RabbitMQ. ส่วนที่ 1 บทนำ เออร์แลง, AMQP

สวัสดีตอนบ่ายฮับ! ฉันต้องการแบ่งปันหนังสืออ้างอิงความรู้ที่ฉันรวบรวมมาได้ 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 ประการ:

RabbitMQ. ส่วนที่ 1 บทนำ เออร์แลง, AMQP

  • exchange (จุดแลกเปลี่ยนหรือการแลกเปลี่ยน) - ข้อความถูกส่งไปยังมัน จุดแลกเปลี่ยน กระจายข้อความ ในหนึ่งหรือหลายคิว เธอ กำหนดเส้นทางข้อความไปยังคิว ตามลิงค์ที่สร้างขึ้น (binding) ระหว่างเขากับคิว
  • queue (คิว) - โครงสร้างข้อมูลบนดิสก์หรือใน RAM นั้น เก็บลิงก์ไปยังข้อความและให้สำเนาข้อความ consumers (ถึงผู้บริโภค)
  • binding (ผูกพัน) - กฎนั้น บอกจุดแลกเปลี่ยนว่าควรเข้าคิวข้อความใด

โปรโตคอลทำงานอยู่ด้านบน TCP / IP.

สั้น ๆ เกี่ยวกับ Erlang

ซอร์สโค้ดของโครงการอยู่ในพื้นที่เก็บข้อมูลที่ GitHub. สถาปัตยกรรม เซิร์ฟเวอร์ RabbitMQ ขึ้นอยู่กับ แอร์ลัง และบีม

Erlang พัฒนาโดยบริษัท Ericsson ในช่วงกลางทศวรรษ 1980 เป็นระบบเรียลไทม์แบบกระจาย ทนทานต่อข้อผิดพลาด สำหรับแอปพลิเคชันที่ต้องการเวลาทำงาน 99,999% Erlang ใช้ในอุตสาหกรรมต่างๆและการใช้งานสมัยใหม่เช่น WhatsApp. คุณสามารถอ่านเพิ่มเติมได้ในบทความ สถาปัตยกรรม WhatsApp ซึ่ง Facebook ซื้อมาด้วยมูลค่า 19 พันล้านดอลลาร์

สั้น ๆ เกี่ยวกับ RabbitMQ

RabbitMQ เป็นนายหน้าข้อความโอเพ่นซอร์ส มันกำหนดเส้นทางข้อความตามหลักการพื้นฐานทั้งหมดของโปรโตคอล แอมคิวพี อธิบายไว้ใน ข้อกำหนด. RabbitMQ นำไปใช้และเสริมโปรโตคอล AMQP.

แนวคิดหลักของรูปแบบการส่งข้อความค่ะ RabbitMQ สิ่งที่เป็น producer (ผู้เผยแพร่) จะไม่ส่งข้อความไปยังคิวโดยตรง ในความเป็นจริง และบ่อยครั้งที่ผู้จัดพิมพ์ไม่รู้ด้วยซ้ำว่าข้อความจะถูกส่งไปยังคิวใดๆ เลยหรือไม่

แต่ผู้เผยแพร่สามารถส่งข้อความไปยังการแลกเปลี่ยนเท่านั้น ในอีกด้านหนึ่ง การแลกเปลี่ยนจะได้รับข้อความจากผู้เผยแพร่ และในทางกลับกัน ก็ส่งพวกเขาไปที่คิว การแลกเปลี่ยนต้องรู้แน่ชัดว่าต้องทำอย่างไรกับข้อความที่ได้รับ ควรเพิ่มเข้าคิวเฉพาะหรือไม่? ควรเพิ่มหลายคิวหรือไม่? หรือควรละเว้นข้อความ

RabbitMQ. ส่วนที่ 1 บทนำ เออร์แลง, AMQP

งานสั้นๆ RabbitMQ สามารถอธิบายได้ดังนี้:

  1. ผู้เผยแพร่ส่งข้อความไปยังการแลกเปลี่ยนเฉพาะ
  2. การแลกเปลี่ยนเมื่อได้รับข้อความแล้ว จะกำหนดเส้นทางไปยังคิวตั้งแต่หนึ่งคิวขึ้นไปตามกฎการเชื่อมโยงระหว่างข้อความกับคิว
  3. คิวจัดเก็บการอ้างอิงถึงข้อความนี้ ข้อความนั้นถูกเก็บไว้ใน RAM หรือบนดิสก์
  4. เมื่อผู้บริโภคพร้อมที่จะรับข้อความจากคิว เซิร์ฟเวอร์จะสร้างสำเนาข้อความผ่านลิงก์และส่ง
  5. ผู้บริโภคได้รับข้อความและส่งคำยืนยันไปยังนายหน้า
  6. เมื่อได้รับการยืนยัน นายหน้าจะลบสำเนาข้อความออกจากคิว จากนั้นลบออกจาก RAM และดิสก์

RPC

กระบวนการ RPC (การเรียกขั้นตอนระยะไกล) รองรับปฏิสัมพันธ์เกือบทั้งหมดกับนิวเคลียส RabbitMQ. เช่น การอภิปรายเบื้องต้นเกี่ยวกับเงื่อนไขของลูกค้าด้วย RabbitMQแสดงให้เห็นกระบวนการบางอย่าง RPC. เมื่อลำดับนี้เสร็จสิ้นแล้ว RabbitMQ จะพร้อมที่จะรับคำขอจากลูกค้า:

RabbitMQ. ส่วนที่ 1 บทนำ เออร์แลง, AMQP

อยู่ในข้อกำหนดด้วย AMQP ทั้งไคลเอนต์และเซิร์ฟเวอร์สามารถออกคำสั่งได้ ซึ่งหมายความว่าไคลเอนต์กำลังรอที่จะสื่อสารกับเซิร์ฟเวอร์ คำสั่งคือคลาสและวิธีการ ตัวอย่างเช่น, Connection.Start – การเรียกวิธี Start ชั้น Connection.

การเชื่อมต่อและช่องทาง

สำหรับการแลกเปลี่ยนข้อมูลระหว่างไคลเอนต์และเซิร์ฟเวอร์ดังกล่าว ช่อง. ช่องถูกสร้างขึ้นภายใน การเชื่อมต่อเฉพาะ. แต่ละช่องจะแยกออกจากช่องอื่น ในกรณีซิงโครนัส จะไม่สามารถดำเนินการคำสั่งถัดไปได้จนกว่าจะได้รับการตอบกลับ

หากต้องการส่งคำสั่งแบบขนานต้องเปิดหลายช่อง แต่ละช่องสร้างแยกกัน Erlang กระบวนการ. การเชื่อมต่อหนึ่งสามารถมีได้หลายช่องทาง (มัลติ). สำหรับแต่ละช่องสัญญาณจะมีโครงสร้างและวัตถุบางอย่างในหน่วยความจำ ดังนั้นยิ่งมีช่องทางในการเชื่อมต่อมากเท่าไร RabbitMQ ใช้หน่วยความจำมากขึ้น เพื่อจัดการการเชื่อมต่อดังกล่าว

RabbitMQ. ส่วนที่ 1 บทนำ เออร์แลง, AMQP

ตัวอย่างง่ายๆ ของการสร้างการเชื่อมต่อและการใช้ช่องทาง 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) ใช้ปลั๊กอินด้วย ปลั๊กอิน MQTT RabbitMQ ซึ่งเป็นการดำเนินการตามโปรโตคอล MQTT สำหรับการส่งข้อมูลระหว่างเซ็นเซอร์และเซิร์ฟเวอร์ในสภาพแวดล้อมความเร็วต่ำและเวลาแฝงสูง (รายการโปรโตคอลที่รองรับทั้งหมดแสดงอยู่ที่ เว็บไซต์โครงการ).

ในบทความถัดไป เราจะเริ่มเข้าใจ Exchanges โดยละเอียดมากขึ้น

การอ้างอิง

ที่มา: will.com

เพิ่มความคิดเห็น