JMS Topic vs Queues


191

ฉันสงสัยว่าอะไรคือความแตกต่างระหว่าง JMS Queue และ JMS Topic

หน้า ActiveMQพูดว่า

หัวข้อ

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

คิว

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

ฉันต้องการมี 'บางสิ่ง' ที่จะส่งสำเนาข้อความไปยังผู้สมัครสมาชิกแต่ละรายในลำดับเดียวกันกับที่โบรกเกอร์ได้รับข้อความจาก ActiveMQ

ความคิดใด ๆ

คำตอบ:


147

นั่นหมายความว่าหัวข้อนั้นเหมาะสม คิวหมายถึงข้อความที่ส่งไปยังสมาชิกที่เป็นไปได้เพียงรายเดียวเท่านั้น หัวข้อไปที่สมาชิกแต่ละคนและทุกคน


4
ความคิดใด ๆ ที่โหลดบาลานซ์ทำงานอย่างไรกับ Queues ใน JMS หรือ WSO2 MB
Kulasangar

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

54

หัวข้อสำหรับรุ่น Publisher-Subscriber ในขณะที่ Queue สำหรับแบบจุดต่อจุด


31

หัวข้อ JMSเป็นประเภทของปลายทางในรูปแบบ 1 ต่อหลายของการกระจาย ข้อความตีพิมพ์เดียวกันจะได้รับจากการบริโภคทั้งหมดสมาชิก คุณสามารถเรียกรูปแบบนี้ว่า คุณสามารถคิดถึงหัวข้อที่เทียบเท่ากับหัวเรื่องในรูปแบบการออกแบบของผู้สังเกตการณ์สำหรับการคำนวณแบบกระจาย ผู้ให้บริการ JMS บางรายเลือกที่จะใช้สิ่งนี้เป็น UDP แทน TCP สำหรับหัวข้อการจัดส่งข้อความคือ 'ไฟแล้วลืม' - ถ้าไม่มีใครฟังข้อความจะหายไป หากนั่นไม่ใช่สิ่งที่คุณต้องการคุณสามารถใช้ 'การสมัครสมาชิกที่คงทน'

คิว JMSเป็นปลายทางที่ 1 ต่อ 1 ข้อความ ข้อความได้รับเพียงหนึ่งในผู้รับการบริโภค(โปรดทราบ: การใช้สมาชิกสำหรับ 'ไคลเอนต์หัวข้อ' และผู้รับสำหรับลูกค้าของคิวอย่างสม่ำเสมอเพื่อหลีกเลี่ยงความสับสน) ข้อความที่ส่งไปยังคิวจะถูกเก็บไว้ในดิสก์หรือหน่วยความจำจนกว่าจะมีคนมารับหรือหมดอายุ ดังนั้นคิว (และการสมัครสมาชิกแบบคงทน) จึงจำเป็นต้องมีการจัดการพื้นที่เก็บข้อมูลที่ใช้งานอยู่คุณต้องคิดถึงผู้บริโภคที่ช้า

ในสภาพแวดล้อมส่วนใหญ่ฉันจะเถียงหัวข้อเป็นตัวเลือกที่ดีกว่าเพราะคุณสามารถเพิ่มส่วนประกอบเพิ่มเติมได้ตลอดเวลาโดยไม่ต้องเปลี่ยนสถาปัตยกรรม ส่วนประกอบที่เพิ่มเข้ามาอาจเป็นการตรวจสอบการบันทึกการวิเคราะห์ ฯลฯ คุณไม่เคยรู้ตั้งแต่เริ่มต้นโครงการว่าความต้องการจะเป็นอย่างไรใน 1 ปี 5 ปี 10 ปี การเปลี่ยนแปลงหลีกเลี่ยงไม่ได้ยอมรับ :-)


28

มันง่ายเหมือนที่:

Queues = Insert> ถอน (ส่งไปยังผู้สมัครสมาชิกคนเดียว) 1: 1

หัวข้อ = แทรก> ออกอากาศ (ส่งไปยังสมาชิกทั้งหมด) 1: n

ป้อนคำอธิบายรูปภาพที่นี่


2
ตัวอย่างสามารถใช้สำหรับเครือข่ายสังคมออนไลน์ที่เรียบง่าย มีคนชอบโพสต์ของ แบ็กเอนด์เผยแพร่กิจกรรม 'POST LIKE' ในหัวข้อ มีผู้ใช้ 3 ราย: notificationProcessor(ส่งการแจ้งเตือนไปยังผู้โพสต์), karmaProcessor(ให้กรรมเพื่อคนที่ชอบและผู้โพสต์), feedProcessor(ย้าย jot ขึ้นไปเป็นฟีดของผู้คน) ทั้งหมดแบบอะซิงโครนัสแน่นอน
Siddhartha

@Siddhartha นี้อาจเป็นคำตอบที่ถูกห่อในตัวอย่างขอบคุณ!
selem mn

8

ในฐานะที่เป็นสำหรับการเก็บรักษาเพื่อให้ดูหน้า ActiveMQ นี้ ในระยะสั้น: คำสั่งซื้อจะถูกเก็บไว้สำหรับผู้บริโภครายเดียว แต่ไม่รับประกันว่าจะมีการส่งคำสั่งของผู้บริโภคหลายราย


7

คิว

ข้อดี

  • รูปแบบการส่งข้อความที่เรียบง่ายด้วยการสื่อสารที่โปร่งใส
  • ข้อความสามารถกู้คืนได้โดยใส่กลับเข้าไปในคิว

จุดด้อย

  • ผู้บริโภคเพียงรายเดียวเท่านั้นที่สามารถรับข้อความ
  • แสดงถึงการมีเพศสัมพันธ์ระหว่างผู้ผลิตและผู้บริโภคเนื่องจากเป็นความสัมพันธ์แบบหนึ่งต่อหนึ่ง

หัวข้อ

ข้อดี

  • ผู้บริโภคหลายคนสามารถรับข้อความ
  • Decoupling ระหว่างผู้ผลิตและผู้บริโภค (รูปแบบการเผยแพร่และสมัครสมาชิก)

จุดด้อย

  • การสื่อสารที่ซับซ้อนยิ่งขึ้น
  • ไม่สามารถกู้คืนข้อความสำหรับผู้ฟังรายเดียวได้

4

หากคุณมีผู้บริโภค N คนแล้ว:

หัวข้อ JMS ส่งข้อความถึง N of N คิว JMS ส่งข้อความถึง 1 จาก N

คุณบอกว่าคุณกำลัง "มองหา 'สิ่ง' ที่จะส่งสำเนาของข้อความไปยังสมาชิกแต่ละรายในลำดับเดียวกับที่โบรกเกอร์ได้รับข้อความจาก ActiveMQ"

ดังนั้นคุณต้องการใช้หัวข้อเพื่อให้สมาชิก N ทั้งหมดได้รับสำเนาข้อความ


1

หัวข้อ :: หัวข้อเป็นการสื่อสารที่หลากหลาย ... (ทวีคูณหรือเผยแพร่ / สมัครสมาชิก) EX: -imagine ผู้เผยแพร่เผยแพร่ภาพยนตร์ใน youtube แล้วสมาชิกทั้งหมดจะได้รับการแจ้งเตือน .... QUEVE :: one-to - การสื่อสารหนึ่ง ... Ex: - เมื่อเผยแพร่คำขอเพื่อชาร์จมันจะไปเพียงหนึ่ง qreciever ... จำไว้เสมอถ้าคำขอได้รับ qreceivers ทั้งหมดแล้วหลายชาร์จเกิดขึ้นดังนั้นในขณะที่การพัฒนาวิเคราะห์ซึ่งเหมาะสำหรับโปรแกรม


-1

คิวเป็นวัตถุที่มีการจัดการ JMS ที่ใช้สำหรับเก็บข้อความที่รอให้สมาชิกใช้งาน เมื่อสมาชิกทั้งหมดใช้ข้อความข้อความจะถูกลบออกจากคิว

หัวข้อคือสมาชิกทั้งหมดของหัวข้อได้รับข้อความเดียวกันเมื่อมีการเผยแพร่ข้อความ


2
ข้อความคิวจะถูกใช้เพียงครั้งเดียวโดยผู้บริโภครายเดียวนั่นคือเหตุผลที่คิวดำเนินการโหลดบาลานเซอร์ การสมัครสมาชิกของหัวข้อสามารถคงทนได้ : ผู้สมัครสมาชิกสามารถรับข้อความได้นานหลังจากการประกาศ (หากผู้สมัครสมาชิกถูกปิดและเกิดขึ้นอีกครั้งเป็นต้น)
กรูเบอร์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.