คืออะไร
คิวข้อความคือคอนเทนเนอร์ที่บันทึกข้อความระหว่างกระบวนการส่งข้อความ
消息
หมายถึงข้อมูลที่จำเป็นต้องส่ง ซึ่งอาจเป็นข้อความ สตริง หรือวัตถุ และข้อมูลอื่นๆ
消息队列
เป็นบริการสื่อสารระหว่างสองแอปพลิเคชัน产生者
ข้อความสามารถส่งคืนได้ทันทีหลังจากจัดเก็บข้อมูลในคิวข้อความ โดยไม่ต้องรอให้接收者
ข้อความตอบกลับ นั่นคือ:生产者
ตรวจสอบให้แน่ใจว่าข้อมูลถูกแทรกลงในคิว และไม่สำคัญว่าใครจะได้รับข้อความ接收者
ข้อความจะเน้นไปที่การรับข้อความและประมวลผลเท่านั้น
อะไรได้บ้าง
ตาม ที่แนะนำข้างต้น คิวข้อความจะแยกตัวสร้างข้อความและตัวรับข้อความ และจะไม่ได้รับผลกระทบจากตัวอื่น
อะซิงโครนัสแบบ อะซิง โครนัสคือการลดเวลาตอบสนองของการร้องขอ ผู้ ผลิตข้อความเพียงต้องการประมวลผลตรรกะง่ายๆ และใส่ข้อมูลในคิวข้อความเพื่อส่งคืน ข้อความ
Peak Shaving เมื่อแอปพลิเคชันคิวข้อความให้บริการ จะสามารถบันทึกข้อมูลคำขอที่หลั่งไหลเข้ามาทันทีในคิวข้อความและส่งคืนได้ทันที จากนั้นคำขอจะได้รับการประมวลผลตามข้อมูลของผู้รับข้อความ
สถานการณ์การใช้งาน: กิจกรรมการเล่นเกม กิจกรรมแฟลชเซล การสั่งซื้อ ฯลฯ ที่จะทำให้เกิดปริมาณการเข้าชมเพิ่มขึ้นทันที
หลังจากแนะนำข้อมูลพื้นฐานของคิวข้อความแล้ว ก่อนที่จะพัฒนาคิวข้อความ เรามาแนะนำแนวคิดพื้นฐานของคิวข้อความ ~
ผู้ผลิตข้อความ (ผู้ผลิต) และ生产者
消费者
(ลูกค้า)
ให้
ลิงก์ ช่อง และคิว
การเชื่อมต่อ: แสดงถึงการเชื่อมโยงระหว่างเซอร์วิสโปรแกรมและคิวข้อความ เซอร์วิสโปรแกรมสามารถสร้างลิงค์ได้หลายลิงค์
ช่อง: ช่องระหว่างลิงก์คิวข้อความ ลิงก์สามารถมีได้หลายช่อง
คิว: คิวที่เก็บข้อมูลไว้ในคิวข้อความ บริการคิวข้อความสามารถมีได้หลายคิว
สรุปความสัมพันธ์ระหว่างลิงค์และคิวช่องเป็นดังนี้
คิวข้อความExchange (แลกเปลี่ยน)
ต้อง มีการแลกเปลี่ยนเมื่อ ส่งข้อความ หากไม่ได้ระบุ ระบบจะใช้การแลกเปลี่ยนเริ่มต้น บทบาทของสวิตช์คือการส่งข้อความไปยังคิวที่เกี่ยวข้อง สวิตช์ในคิวข้อความมีทั้งหมด 4 ประเภท
: โดยตรง: ระบุโหมดคิว เมื่อมีข้อความมาข้อความจะถูกส่งไปยังคิวที่ระบุเท่านั้น และคิวอื่น ๆ จะไม่รับ
fanout: โหมด Broadcast เมื่อมีข้อความมาจะถูกส่งไปยังทุกคิว
หัวข้อ: โหมดการจับคู่แบบคลุมเครือ การส่งต่อที่สอดคล้องกันผ่านการจับคู่แบบคลุมเครือ
ส่วนหัว: คล้ายกับโหมดตรง
ชงติดตั้ง rabbitmq
จากนั้นไปที่ http://localhost:15672/ ในเครื่องเพื่อดูพื้นหลังของบริการ rabbitmq รหัสผ่านบัญชีเริ่มต้นคือ guest
amqplib เป็นชุดเครื่องมือสำหรับการใช้คิวข้อความในโหนด ซึ่งช่วยให้เราใช้คิวข้อความได้อย่างรวดเร็ว
สร้างโปรดิวเซอร์ที่อยู่: https://www.npmjs.com/package/amqplib
/** product.js ผู้บริโภค*/ const amqplib = ต้องการ('amqplib'); const config = need('./config'); const { เชื่อมต่อUrl } = กำหนดค่า; (ไม่ตรงกัน () => { การเชื่อมต่อ const = รอ amqplib.connect (connectUrl); const channel = รอการเชื่อมต่อ createChannel(); const exchangeName = 'testExchange'; ปุ่ม const = 'testQueue'; const sendMsg = 'สวัสดี rabbitmq'; // ทราบประเภทสวิตช์ที่รอคอย channel.assertExchange(exchangeName, 'fanout', { ทนทาน: จริง, - //ระบุคิวที่รอ channel.assertQueue(key); สำหรับ (ให้ i = 0; i < 100; i++) { channel.publish(ชื่อการแลกเปลี่ยน, คีย์, Buffer.from(`${sendMsg} ${i}`)); - รอช่อง.ปิด(); รอการเชื่อมต่อ.ปิด(); -
หลังจากรันแล้ว คุณจะเห็นได้ว่ามีการเพิ่มคิวใหม่ที่มีข้อความถึง 100 ข้อความในพื้นหลัง
สร้างผู้บริโภค/** customer.js ผู้บริโภค*/ const amqplib = ต้องการ('amqplib'); const config = need('./config'); const { เชื่อมต่อUrl } = กำหนดค่า; (ไม่ตรงกัน () => { ให้การเชื่อมต่อ = รอ amqplib.connect (connectUrl); const exchangeName = 'testExchange'; ปุ่ม const = 'testQueue'; //สร้างสองช่อง const channel1 = รอการเชื่อมต่อ createChannel(); const channel2 = รอการเชื่อมต่อ createChannel(); //ระบุการแลกเปลี่ยนที่รอ channel1.assertExchange (exchangeName, 'fanout', { ทนทาน: จริง, - //ระบุคิวที่รอ channel1.assertQueue(key); รอ channel1.bindQueue (คีย์, exchangeName, คีย์); channel1.consume (คีย์ (ข้อความ) => { console.log('ช่อง 1', msg.content.toString()); - รอ channel2.assertExchange (exchangeName, 'fanout', { ทนทาน: จริง, - รอ channel2.assertQueue (คีย์); รอ channel2.bindQueue (คีย์, exchangeName, คีย์); channel2.consume (คีย์ (ข้อความ) => { console.log('ช่อง 2', msg.content.toString()); - -
หลังจากดำเนินการ คุณจะเห็นว่าทั้งสองช่องทางสามารถรับข้อความพร้อมกันได้