สวัสดีตอนบ่ายฮับ! ฉันต้องการแบ่งปันหนังสืออ้างอิงความรู้ที่ฉันรวบรวมมาได้ 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ใช้ในอุตสาหกรรมต่างๆและการใช้งานสมัยใหม่เช่น
สั้น ๆ เกี่ยวกับ RabbitMQ
เป็นนายหน้าข้อความโอเพ่นซอร์ส มันกำหนดเส้นทางข้อความตามหลักการพื้นฐานทั้งหมดของโปรโตคอล อธิบายไว้ใน . RabbitMQ นำไปใช้และเสริมโปรโตคอล AMQP.
แนวคิดหลักของรูปแบบการส่งข้อความค่ะ RabbitMQ สิ่งที่เป็น producer (ผู้เผยแพร่) จะไม่ส่งข้อความไปยังคิวโดยตรง ในความเป็นจริง และบ่อยครั้งที่ผู้จัดพิมพ์ไม่รู้ด้วยซ้ำว่าข้อความจะถูกส่งไปยังคิวใดๆ เลยหรือไม่
แต่ผู้เผยแพร่สามารถส่งข้อความไปยังการแลกเปลี่ยนเท่านั้น ในอีกด้านหนึ่ง การแลกเปลี่ยนจะได้รับข้อความจากผู้เผยแพร่ และในทางกลับกัน ก็ส่งพวกเขาไปที่คิว การแลกเปลี่ยนต้องรู้แน่ชัดว่าต้องทำอย่างไรกับข้อความที่ได้รับ ควรเพิ่มเข้าคิวเฉพาะหรือไม่? ควรเพิ่มหลายคิวหรือไม่? หรือควรละเว้นข้อความ

งานสั้นๆ RabbitMQ สามารถอธิบายได้ดังนี้:
- ผู้เผยแพร่ส่งข้อความไปยังการแลกเปลี่ยนเฉพาะ
- การแลกเปลี่ยนเมื่อได้รับข้อความแล้ว จะกำหนดเส้นทางไปยังคิวตั้งแต่หนึ่งคิวขึ้นไปตามกฎการเชื่อมโยงระหว่างข้อความกับคิว
- คิวจัดเก็บการอ้างอิงถึงข้อความนี้ ข้อความนั้นถูกเก็บไว้ใน RAM หรือบนดิสก์
- เมื่อผู้บริโภคพร้อมที่จะรับข้อความจากคิว เซิร์ฟเวอร์จะสร้างสำเนาข้อความผ่านลิงก์และส่ง
- ผู้บริโภคได้รับข้อความและส่งคำยืนยันไปยังนายหน้า
- เมื่อได้รับการยืนยัน นายหน้าจะลบสำเนาข้อความออกจากคิว จากนั้นลบออกจาก RAM และดิสก์
RPC
กระบวนการ รองรับปฏิสัมพันธ์เกือบทั้งหมดกับนิวเคลียส RabbitMQ. เช่น การอภิปรายเบื้องต้นเกี่ยวกับเงื่อนไขของลูกค้าด้วย RabbitMQแสดงให้เห็นกระบวนการบางอย่าง RPC. เมื่อลำดับนี้เสร็จสิ้นแล้ว RabbitMQ จะพร้อมที่จะรับคำขอจากลูกค้า:

อยู่ในข้อกำหนดด้วย AMQP ทั้งไคลเอนต์และเซิร์ฟเวอร์สามารถออกคำสั่งได้ ซึ่งหมายความว่าไคลเอนต์กำลังรอที่จะสื่อสารกับเซิร์ฟเวอร์ คำสั่งคือคลาสและวิธีการ ตัวอย่างเช่น, Connection.Start – การเรียกวิธี Start ชั้น Connection.
การเชื่อมต่อและช่องทาง
สำหรับการแลกเปลี่ยนข้อมูลระหว่างไคลเอนต์และเซิร์ฟเวอร์ดังกล่าว ช่อง. ช่องถูกสร้างขึ้นภายใน การเชื่อมต่อเฉพาะ. แต่ละช่องจะแยกออกจากช่องอื่น ในกรณีซิงโครนัส จะไม่สามารถดำเนินการคำสั่งถัดไปได้จนกว่าจะได้รับการตอบกลับ
หากต้องการส่งคำสั่งแบบขนานต้องเปิดหลายช่อง แต่ละช่องสร้างแยกกัน Erlang กระบวนการ. การเชื่อมต่อหนึ่งสามารถมีได้หลายช่องทาง (). สำหรับแต่ละช่องสัญญาณจะมีโครงสร้างและวัตถุบางอย่างในหน่วยความจำ ดังนั้นยิ่งมีช่องทางในการเชื่อมต่อมากเท่าไร RabbitMQ ใช้หน่วยความจำมากขึ้น เพื่อจัดการการเชื่อมต่อดังกล่าว

ตัวอย่างง่ายๆ ของการสร้างการเชื่อมต่อและการใช้ช่องทาง :
// ...
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
