อะไรคือข้อ จำกัด ของข้อความคิวและการแลกเปลี่ยนใน RabbitMQ?


100
  1. ข้อความประเภทใดที่อนุญาต (สตริงไบต์จำนวนเต็ม ฯลฯ )
  2. ขนาดสูงสุดของข้อความคืออะไร?
  3. จำนวนคิวและการแลกเปลี่ยนสูงสุดคืออะไร?

คำตอบ:


117
  1. ในทางทฤษฎีทุกอย่างสามารถจัดเก็บ / ส่งเป็นข้อความได้ จริงๆแล้วคุณไม่ต้องการเก็บอะไรไว้ในคิว ระบบจะทำงานได้อย่างมีประสิทธิภาพสูงสุดหากคิวว่างเกือบตลอดเวลา คุณสามารถส่งอะไรก็ได้ที่คุณต้องการไปยังคิวโดยมีเงื่อนไขสองประการ:

    • สิ่งที่คุณกำลังส่งสามารถแปลงเป็นและจากการทดสอบ bytestring
    • ผู้บริโภครู้แน่ชัดว่ากำลังได้รับอะไรและจะแปลงเป็นวัตถุดั้งเดิมได้อย่างไร

    สตริงนั้นค่อนข้างง่ายมีวิธีการในตัวสำหรับการแปลงเป็นและจากไบต์ ถ้าคุณรู้ว่ามันเป็นสตริงคุณก็จะรู้วิธีแปลงกลับ ตัวเลือกที่ดีที่สุดคือใช้สตริงมาร์กอัปเช่น XML, JSON หรือ YML ด้วยวิธีนี้คุณสามารถแปลงวัตถุเป็น Strings และกลับไปเป็นวัตถุดั้งเดิมได้อีกครั้ง พวกเขาทำงานข้ามภาษาโปรแกรมดังนั้นผู้บริโภคของคุณสามารถเขียนภาษาอื่นถึงผู้ผลิตของคุณได้ตราบเท่าที่พวกเขารู้วิธีทำความเข้าใจวัตถุ ฉันทำงานใน Java ฉันต้องการส่งข้อความที่ซับซ้อนพร้อมกับวัตถุย่อยในฟิลด์ ฉันใช้วัตถุข้อความของตัวเอง วัตถุข้อความมีสองวิธีเพิ่มเติมtoBytesและfromBytesที่แปลงเป็นและจาก bytestream ฉันใช้คีย์การกำหนดเส้นทางที่ไม่ต้องสงสัยเลยว่าผู้บริโภคได้รับข้อความประเภทใด ข้อความสามารถต่อเนื่องได้ ใช้งานได้ดี แต่มีข้อ จำกัด เนื่องจากฉันสามารถใช้ได้กับโปรแกรม Java อื่นเท่านั้น

  2. ขนาดของข้อความถูก จำกัด โดยหน่วยความจำบนเซิร์ฟเวอร์และหากยังคงอยู่ต่อไปก็จะมีเนื้อที่ว่างบน HDD ด้วยเช่นกัน คุณอาจไม่ต้องการส่งข้อความที่ใหญ่เกินไป การส่งข้อมูลอ้างอิงไปยังไฟล์หรือฐานข้อมูลอาจดีกว่า

    คุณอาจต้องการอ่านข้อมูลเกี่ยวกับการวัดประสิทธิภาพของพวกเขา: http://www.rabbitmq.com/blog/2012/04/17/rabbitmq-performance-measurements-part-1/ http://www.rabbitmq.com/ บล็อก / 2012/04/25 / rabbitmq- ประสิทธิภาพการวัดส่วนที่ 2 /

  3. คิวค่อนข้างเบาคุณมักจะถูก จำกัด ด้วยจำนวนการเชื่อมต่อที่คุณมี จะขึ้นอยู่กับเซิร์ฟเวอร์มากที่สุด นี่คือข้อมูลบางส่วนสำหรับคำถามที่คล้ายกัน: http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/2009-Feb February/003042.html


10

ขนาดสูงสุดของข้อความคืออะไร?

ขนาดของข้อความสูงสุดใน RabbitMQ ที่ใช้จะเป็น2 ลิ่มก่อนเวอร์ชัน 3.8.0:

%% Trying to send a term across a cluster larger than 2^31 bytes will
%% cause the VM to exit with "Absurdly large distribution output data
%% buffer". So we limit the max message size to 2^31 - 10^6 bytes (1MB
%% to allow plenty of leeway for the #basic_message{} and #content{}
%% wrapping the message body).
-define(MAX_MSG_SIZE, 2147383648).

อ้างอิง: https://github.com/rabbitmq/rabbitmq-common/blob/v3.7.21/include/rabbit.hrl#L279

เป็น512 MiBตั้งแต่เวอร์ชัน 3.8.0:

%% Max message size is hard limited to 512 MiB.
%% If user configures a greater rabbit.max_message_size,
%% this value is used instead.
-define(MAX_MSG_SIZE, 536870912).

อ้างอิง: https://github.com/rabbitmq/rabbitmq-common/blob/v3.8.0/include/rabbit.hrl#L238


4
  1. ดูคำตอบของ robthewolf

  2. ขนาดข้อความสูงสุดคือ 2GB อย่างไรก็ตามการปรับแต่งประสิทธิภาพสำหรับข้อความขนาดนี้ไม่ได้ผล ขนาดข้อความสูงสุด

  3. ไม่มีข้อ จำกัด อย่างหนักที่กำหนดโดย RabbitMQ Server Software สำหรับจำนวนคิวอย่างไรก็ตามฮาร์ดแวร์ที่เซิร์ฟเวอร์กำลังทำงานอยู่อาจส่งผลกระทบต่อขีด จำกัด นี้ได้เป็นอย่างดี

3a. ไม่มีการจำกัดความยาวคิวที่กำหนดโดยเซิร์ฟเวอร์โดยค่าเริ่มต้น อย่างไรก็ตามคุณสามารถ จำกัด สิ่งนี้ผ่านนโยบายฝั่งเซิร์ฟเวอร์ (การกำหนดค่า) หรือนโยบายฝั่งไคลเอ็นต์ความยาวคิวสูงสุด

มีข้อมูลเพิ่มเติมและการเชื่อมโยงในเป็นโพสต์ที่เกี่ยวข้อง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.