Pengenalan kepada RabbitMQ

1. Gambaran keseluruhan

Memisahkan komponen perisian adalah salah satu bahagian penting dalam reka bentuk perisian. Salah satu cara untuk mencapainya adalah dengan menggunakan sistem pesanan, yang menyediakan cara komunikasi yang tidak segerak antara komponen (perkhidmatan). Dalam artikel ini, kita akan membahas salah satu sistem tersebut: RabbitMQ.

RabbitMQ adalah broker mesej yang menerapkan Advanced Message Queuing Protocol (AMQP). Ia menyediakan perpustakaan pelanggan untuk bahasa pengaturcaraan utama.

Selain menggunakan komponen perisian decoupling RabbitMQ dapat digunakan untuk:

  • Melakukan operasi latar
  • Melakukan operasi tak segerak

2. Model Pemesejan

Pertama, mari kita lihat cepat dan tinggi tahap bagaimana pemesejan berfungsi.

Secara sederhana, terdapat dua jenis aplikasi yang berinteraksi dengan sistem pesanan: pengeluar dan pengguna. Pengeluar adalah mereka, yang mengirim (menerbitkan) mesej kepada broker, dan pengguna, yang menerima mesej dari broker. Biasanya, program ini (komponen perisian) dijalankan pada mesin yang berbeza dan RabbitMQ bertindak sebagai alat komunikasi antara mereka.

Dalam artikel ini, kita akan membincangkan contoh mudah dengan dua perkhidmatan yang akan berkomunikasi menggunakan RabbitMQ. Salah satu perkhidmatan akan menerbitkan mesej ke RabbitMQ dan yang lain akan digunakan.

3. Persediaan

Sebagai permulaan mari jalankan RabbitMQ menggunakan panduan persediaan rasmi di sini.

Kami secara semula jadi akan menggunakan klien Java untuk berinteraksi dengan pelayan RabbitMQ; kebergantungan Maven untuk pelanggan ini adalah:

 com.rabbitmq amqp-client 4.0.0 

Setelah menjalankan broker RabbitMQ menggunakan panduan rasmi, kita perlu menyambungnya menggunakan klien java:

ConnectionFactory factory = new ConnectionFactory(); factory.setHost("localhost"); Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); 

Kami menggunakan ConnectionFactory untuk mengatur sambungan dengan pelayan, ia juga menjaga protokol (AMQP) dan pengesahan. Di sini kita menyambung ke pelayan di localhost , kita dapat mengubah nama host dengan menggunakan fungsi setHost .

Kita boleh menggunakan setPort untuk menetapkan port jika port lalai tidak digunakan oleh RabbitMQ Server; port lalai untuk RabbitMQ adalah 15672 :

factory.setPort(15678);

Kami boleh menetapkan nama pengguna dan kata laluan:

factory.setUsername("user1"); factory.setPassword("MyPassword");

Selanjutnya, kami akan menggunakan sambungan ini untuk menerbitkan dan memakan mesej.

4. Pengeluar

Pertimbangkan senario mudah di mana aplikasi web membolehkan pengguna menambahkan produk baru ke laman web. Bila-bila masa produk baru ditambahkan, kami perlu menghantar e-mel kepada pelanggan.

Pertama, mari tentukan barisan:

channel.queueDeclare("products_queue", false, false, false, null);

Setiap kali pengguna menambahkan produk baru, kami akan menerbitkan mesej ke barisan:

String message = "product details"; channel.basicPublish("", "products_queue", null, message.getBytes());

Terakhir, kami menutup saluran dan sambungannya:

channel.close(); connection.close();

Mesej ini akan digunakan oleh perkhidmatan lain, yang bertanggungjawab untuk menghantar e-mel kepada pelanggan.

5. Pengguna

Mari lihat apa yang dapat kita laksanakan di sisi pengguna; kita akan menyatakan barisan yang sama:

channel.queueDeclare("products_queue", false, false, false, null);

Inilah cara kami menentukan pengguna yang akan memproses mesej dari barisan secara tidak segerak:

DefaultConsumer consumer = new DefaultConsumer(channel) { @Override public void handleDelivery( String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { String message = new String(body, "UTF-8"); // process the message } }; channel.basicConsume("products_queue", true, consumer);

6. Kesimpulannya

Artikel ringkas ini merangkumi konsep asas RabbitMQ dan membincangkan contoh mudah menggunakannya.

Pelaksanaan penuh tutorial ini boleh didapati dalam projek GitHub.