Apa yang dimaksud dengan antrian pesan?
Antrian pesan adalah wadah yang menyimpan pesan selama proses transmisi pesan. Ini pada dasarnya adalah antrian (masuk pertama, keluar pertama).
消息
mengacu pada data yang perlu dikirimkan, yang dapat berupa teks, string, atau objek dan informasi lainnya.
消息队列
adalah layanan komunikasi antara dua aplikasi.产生者
pesan dapat mengembalikannya segera setelah menyimpan data dalam antrian pesan, tanpa menunggu接收者
pesan merespons. Artinya:生产者
memastikan bahwa data dimasukkan ke dalam antrian, dan tidak peduli siapa yang menerima pesan tersebut.接收者
pesan hanya fokus menerima pesan dan memprosesnya.
apa
yang dapat dilakukan oleh antrian pesan? Seperti yang dijelaskan di atas, antrian pesan memisahkan pembuat pesan dan penerima pesan, dan tidak ada yang terpengaruh oleh yang lain.
Asynchronous Asynchronous adalah untuk mengurangi waktu respons permintaan. Produsen pesan hanya perlu memproses logika sederhana dan memasukkan data ke dalam antrian pesan untuk dikembalikan. Logika kompleks, seperti operasi database dan operasi IO, ditangani oleh penerima pesannya.
Pencukuran Puncak Saat aplikasi antrian pesan sedang melayani, aplikasi ini dapat menyimpan aliran informasi permintaan seketika ke dalam antrian pesan dan segera mengembalikannya. Permintaan tersebut kemudian diproses berdasarkan data oleh penerima pesan.
Skenario aplikasi: aktivitas permainan, aktivitas penjualan flash, penempatan pesanan, dll. yang akan menyebabkan lonjakan lalu lintas seketika.
Setelah memperkenalkan informasi dasar antrian pesan, sebelum mengembangkan antrian pesan, mari kita perkenalkan beberapa konsep dasar antrian pesan ~
produsen pesan (produsen) dan生产者
消费者
pelanggan).
menyediakan
tautan, saluran, dan antrian.
Koneksi: mewakili tautan antara program layanan dan antrian pesan. Sebuah program layanan dapat membuat banyak tautan .
Saluran: Saluran di antara tautan antrean pesan. Sebuah tautan dapat memiliki banyak saluran .
Antrian: Antrian yang menyimpan data dalam antrian pesan. Layanan antrian pesan dapat memiliki beberapa antrian.
Singkatnya, hubungan antara link dan antrian saluran adalah seperti ini
Pertukaran (pertukaran)
antrian pesan harus memiliki pertukaran saat mengirim pesan . Jika tidak ditentukan, pertukaran default akan digunakan. Peran saklar adalah untuk mendorong pesan ke antrian yang sesuai. Ada total 4 jenis saklar dalam antrian pesan
: Langsung: Menentukan mode antrian. Ketika sebuah pesan datang, pesan itu hanya akan dikirim ke Antrian yang ditentukan, dan Antrian lain tidak akan menerimanya.
fanout: Mode siaran, ketika ada pesan yang masuk, maka akan dikirim ke semua antrian.
topik: mode pencocokan fuzzy, penerusan yang sesuai melalui pencocokan fuzzy.
header: Mirip dengan mode Langsung.
buatan instal Rabbitmq
Kemudian kunjungi http://localhost:15672/ secara lokal untuk melihat latar belakang layanan Rabbitmq. Kata sandi akun awal adalah guest
amqplib adalah seperangkat alat untuk menggunakan antrian pesan di node, yang memungkinkan kita menggunakan antrian pesan dengan cepat.
Buat produserAlamat: https://www.npmjs.com/package/amqplib
/** produk.js konsumen*/ const amqplib = memerlukan('amqplib'); const config = memerlukan('./config'); const { connectUrl } = konfigurasi; (asinkron () => { koneksi const = menunggu amqplib.connect(connectUrl); const saluran = menunggu koneksi.createChannel(); const exchangeName = 'testExchange'; const key = 'antrian tes'; const sendMsg = 'halo kelincimq'; // Ketahui jenis saklar menunggu saluran.assertExchange(exchangeName, 'fanout', { tahan lama: benar, }); //Tentukan antrian menunggu channel.assertQueue(key); untuk (misalkan i = 0; i < 100; i++) { channel.publish(exchangeName, kunci, Buffer.from(`${sendMsg} ${i}`)); } menunggu saluran.close(); menunggu koneksi.close(); })();
Setelah berjalan, Anda dapat melihat di latar belakang bahwa antrian baru dengan 100 pesan telah ditambahkan.
Buat konsumen/** pelanggan.js konsumen*/ const amqplib = memerlukan('amqplib'); const config = memerlukan('./config'); const { connectUrl } = konfigurasi; (asinkron () => { biarkan koneksi = menunggu amqplib.connect(connectUrl); const exchangeName = 'testExchange'; const key = 'antrian tes'; //Buat dua saluran const channel1 = menunggu koneksi.createChannel(); const channel2 = menunggu koneksi.createChannel(); //Tentukan pertukaran menunggu channel1.assertExchange(exchangeName, 'fanout', { tahan lama: benar, }); //Tentukan antrian menunggu channel1.assertQueue(key); menunggu saluran1.bindQueue(kunci, namatukar, kunci); saluran1.konsumsi(kunci, (pesan) => { console.log('saluran 1', pesan.konten.toString()); }); menunggu saluran2.assertExchange(exchangeName, 'fanout', { tahan lama: benar, }); menunggu saluran2.assertQueue(kunci); menunggu channel2.bindQueue(kunci, namatukar, kunci); saluran2.konsumsi(kunci, (pesan) => { console.log('saluran 2', pesan.konten.toString()); }); })();
Setelah eksekusi, Anda dapat melihat bahwa kedua saluran dapat bekerja secara bersamaan untuk menerima pesan.