สวัสดีตอนบ่ายฮับ! ฉันต้องการแบ่งปันหนังสืออ้างอิงความรู้ที่ฉันรวบรวมมาได้ RabbitMQ
และสรุปเป็นข้อเสนอแนะและข้อสรุปสั้นๆ
สารบัญ
- แรบบิทเอ็มคิว. ส่วนที่ 1 บทนำ Erlang, AMQP และ RPC
- แรบบิทเอ็มคิว. ส่วนที่ 2 ทำความเข้าใจการแลกเปลี่ยน
- แรบบิทเอ็มคิว. ส่วนที่ 3 ทำความเข้าใจคิวและการโยง
- RabbitMQ. ตอนที่ 4 ทำความเข้าใจว่าข้อความและเฟรมคืออะไร
- แรบบิทเอ็มคิว. ส่วนที่ 5: การเผยแพร่และการใช้ประสิทธิภาพของข้อความ
- แรบบิทเอ็มคิว. ส่วนที่ 6 ภาพรวมของโมดูลสหพันธ์และพลั่ว
- แรบบิทเอ็มคิว. ตอนที่ 7 รายละเอียดเกี่ยวกับ Connection และ Chanel
- แรบบิทเอ็มคิว. ส่วนที่ 8 RabbitMQ ใน. NET
- แรบบิทเอ็มคิว. ส่วนที่ 9 การตรวจสอบ
สั้น ๆ เกี่ยวกับ AMQP
AMQP (Advanced Message Queuing Protocol) เป็นโปรโตคอลแบบเปิดสำหรับการส่งข้อความระหว่างส่วนประกอบของระบบ แนวคิดพื้นฐานคือแต่ละระบบย่อย (หรือแอปพลิเคชันอิสระ) สามารถแลกเปลี่ยนข้อความในลักษณะที่ต้องการผ่านนายหน้า AMQP ซึ่งดำเนินการกำหนดเส้นทาง อาจรับประกันการจัดส่ง กระจายสตรีมข้อมูล และสมัครรับประเภทข้อความที่ต้องการ
มาตรการ AMQP
นำเสนอแนวคิด XNUMX ประการ:
exchange
(จุดแลกเปลี่ยนหรือการแลกเปลี่ยน) - ข้อความถูกส่งไปยังมัน จุดแลกเปลี่ยน กระจายข้อความ ในหนึ่งหรือหลายคิว เธอ กำหนดเส้นทางข้อความไปยังคิว ตามลิงค์ที่สร้างขึ้น (binding
) ระหว่างเขากับคิวqueue
(คิว) - โครงสร้างข้อมูลบนดิสก์หรือใน RAM นั้น เก็บลิงก์ไปยังข้อความและให้สำเนาข้อความconsumers
(ถึงผู้บริโภค)binding
(ผูกพัน) - กฎนั้น บอกจุดแลกเปลี่ยนว่าควรเข้าคิวข้อความใด
โปรโตคอลทำงานอยู่ด้านบน
สั้น ๆ เกี่ยวกับ Erlang
ซอร์สโค้ดของโครงการอยู่ในพื้นที่เก็บข้อมูลที่
Erlang
พัฒนาโดยบริษัทEricsson
ในช่วงกลางทศวรรษ 1980 เป็นระบบเรียลไทม์แบบกระจาย ทนทานต่อข้อผิดพลาด สำหรับแอปพลิเคชันที่ต้องการเวลาทำงาน 99,999%Erlang
ใช้ในอุตสาหกรรมต่างๆและการใช้งานสมัยใหม่เช่นสถาปัตยกรรม WhatsApp ซึ่ง Facebook ซื้อมาด้วยมูลค่า 19 พันล้านดอลลาร์
สั้น ๆ เกี่ยวกับ RabbitMQ
RabbitMQ
นำไปใช้และเสริมโปรโตคอล AMQP
.
แนวคิดหลักของรูปแบบการส่งข้อความค่ะ RabbitMQ
สิ่งที่เป็น producer
(ผู้เผยแพร่) จะไม่ส่งข้อความไปยังคิวโดยตรง ในความเป็นจริง และบ่อยครั้งที่ผู้จัดพิมพ์ไม่รู้ด้วยซ้ำว่าข้อความจะถูกส่งไปยังคิวใดๆ เลยหรือไม่
แต่ผู้เผยแพร่สามารถส่งข้อความไปยังการแลกเปลี่ยนเท่านั้น ในอีกด้านหนึ่ง การแลกเปลี่ยนจะได้รับข้อความจากผู้เผยแพร่ และในทางกลับกัน ก็ส่งพวกเขาไปที่คิว การแลกเปลี่ยนต้องรู้แน่ชัดว่าต้องทำอย่างไรกับข้อความที่ได้รับ ควรเพิ่มเข้าคิวเฉพาะหรือไม่? ควรเพิ่มหลายคิวหรือไม่? หรือควรละเว้นข้อความ
งานสั้นๆ RabbitMQ
สามารถอธิบายได้ดังนี้:
- ผู้เผยแพร่ส่งข้อความไปยังการแลกเปลี่ยนเฉพาะ
- การแลกเปลี่ยนเมื่อได้รับข้อความแล้ว จะกำหนดเส้นทางไปยังคิวตั้งแต่หนึ่งคิวขึ้นไปตามกฎการเชื่อมโยงระหว่างข้อความกับคิว
- คิวจัดเก็บการอ้างอิงถึงข้อความนี้ ข้อความนั้นถูกเก็บไว้ใน RAM หรือบนดิสก์
- เมื่อผู้บริโภคพร้อมที่จะรับข้อความจากคิว เซิร์ฟเวอร์จะสร้างสำเนาข้อความผ่านลิงก์และส่ง
- ผู้บริโภคได้รับข้อความและส่งคำยืนยันไปยังนายหน้า
- เมื่อได้รับการยืนยัน นายหน้าจะลบสำเนาข้อความออกจากคิว จากนั้นลบออกจาก RAM และดิสก์
RPC
กระบวนการ RabbitMQ
. เช่น การอภิปรายเบื้องต้นเกี่ยวกับเงื่อนไขของลูกค้าด้วย RabbitMQ
แสดงให้เห็นกระบวนการบางอย่าง RPC
. เมื่อลำดับนี้เสร็จสิ้นแล้ว RabbitMQ
จะพร้อมที่จะรับคำขอจากลูกค้า:
อยู่ในข้อกำหนดด้วย AMQP
ทั้งไคลเอนต์และเซิร์ฟเวอร์สามารถออกคำสั่งได้ ซึ่งหมายความว่าไคลเอนต์กำลังรอที่จะสื่อสารกับเซิร์ฟเวอร์ คำสั่งคือคลาสและวิธีการ ตัวอย่างเช่น, Connection.Start
– การเรียกวิธี Start
ชั้น Connection
.
การเชื่อมต่อและช่องทาง
สำหรับการแลกเปลี่ยนข้อมูลระหว่างไคลเอนต์และเซิร์ฟเวอร์ดังกล่าว ช่อง. ช่องถูกสร้างขึ้นภายใน การเชื่อมต่อเฉพาะ. แต่ละช่องจะแยกออกจากช่องอื่น ในกรณีซิงโครนัส จะไม่สามารถดำเนินการคำสั่งถัดไปได้จนกว่าจะได้รับการตอบกลับ
หากต้องการส่งคำสั่งแบบขนานต้องเปิดหลายช่อง แต่ละช่องสร้างแยกกัน Erlang
กระบวนการ. การเชื่อมต่อหนึ่งสามารถมีได้หลายช่องทาง (
ตัวอย่างง่ายๆ ของการสร้างการเชื่อมต่อและการใช้ช่องทาง
// ...
private void TryConnect()
{
var factory = new ConnectionFactory()
{
HostName = "host_name",
UserName = "user_name",
Password = "p@ssword",
// Включение автоматичекого восстановления
// соединения после сбоев сети
AutomaticRecoveryEnabled = true
};
_connection = factory.CreateConnection();
}
// ...
public void CreateChanel()
{
_channel = _connection.CreateModel();
// other options
}
ไม่แนะนำให้เปิดการเชื่อมต่อใหม่สำหรับแต่ละการดำเนินการเช่นนี้ จะทำให้ต้นทุนสูง. ช่องสัญญาณควรจะคงอยู่เช่นกัน แต่ข้อผิดพลาดของโปรโตคอลจำนวนมากทำให้ช่องปิด ดังนั้นอายุการใช้งานของช่องอาจสั้นกว่าอายุการใช้งานของการเชื่อมต่อ
RabbitMQ ใช้ที่ไหน
ในบริบทของไมโครเซอร์วิส โปรโตคอล AMQP
และการนำไปปฏิบัติใน RabbitMQ
มักใช้สำหรับ ปฏิสัมพันธ์แบบอะซิงโครนัส ระหว่างบริการ
ในบริบท IIOT
มาตรการ AMQP
และการนำไปปฏิบัติใน RabbitMQ
ใช้สำหรับการแลกเปลี่ยนข้อมูลระหว่างเซิร์ฟเวอร์ (server-server) ใช้ปลั๊กอินด้วย
ในบทความถัดไป เราจะเริ่มเข้าใจ Exchanges โดยละเอียดมากขึ้น
การอ้างอิง
ที่มา: will.com