ActiveMQ ใช้สำหรับอะไร - เราสามารถประยุกต์ใช้แนวคิดการส่งข้อความโดยใช้ฐานข้อมูลได้หรือไม่


116

ฉันมองขึ้นไปและมันเคยส่งข้อความระหว่าง 2 ระบบ
แต่ทำไม? ทำไมคุณไม่ใช้ a Database?
จะต้องมีคุณสมบัติบางอย่างActiveMQที่Databasesไม่มี?


คำถามที่คล้ายกันstackoverflow.com/q/2868800/460775
EMBarbosa

คำตอบ:


178

ใช้เพื่อสื่อสารระหว่างสองกระบวนการแบบกระจายได้อย่างน่าเชื่อถือ

ใช่คุณสามารถจัดเก็บข้อความในฐานข้อมูลเพื่อสื่อสารระหว่างสองกระบวนการ แต่ทันทีที่ได้รับข้อความคุณจะต้องDELETEส่งข้อความนั่นหมายถึงแถวINSERTและDELETEสำหรับแต่ละข้อความ
เมื่อคุณพยายามขนาดว่าถึงการสื่อสารข้อความนับพันต่อวินาทีฐานข้อมูลมีแนวโน้มที่จะลดลงกว่า

เครื่องกลางที่เน้นข้อความ [MOM] เหมือนActiveMQในทางกลับกันถูกสร้างขึ้นเพื่อรองรับกรณีการใช้งานเหล่านั้น
พวกเขาคิดว่าข้อความในระบบที่ดีจะถูกลบอย่างรวดเร็วและสามารถทำการเพิ่มประสิทธิภาพเพื่อหลีกเลี่ยงค่าใช้จ่ายลบออกได้อย่างรวดเร็วและสามารถทำเพิ่มประสิทธิภาพเพื่อหลีกเลี่ยงค่าใช้จ่าย

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


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

ไม่แอปพลิเคชันโดยพลการสามารถสื่อสารกันผ่าน ActiveMQ ตัวอย่างเช่นแอปพลิเคชัน A และ B สามารถสร้าง qeues AB และ BA (อ่าน: ข้อความสำหรับ A จาก B และในทางกลับกัน) และส่งข้อความถึงกันและกันไปยังคิวที่ตรงกัน
Alex


67

ActiveMQหรือโดยทั่วไปการใช้งาน Message Oriented Middleware (MOM) ทั้งหมดได้รับการออกแบบมาเพื่อจุดประสงค์ในการส่งข้อความระหว่างสองแอปพลิเคชันหรือสององค์ประกอบภายในแอปพลิเคชันเดียว

โดยพื้นฐานแล้ว MOM และฐานข้อมูลมีพื้นฐานร่วมกันในการจัดเตรียมการจัดเก็บข้อมูลแบบธุรกรรมและต่อเนื่องเพื่อให้สามารถอ่านและเขียนได้
ความแตกต่างที่สำคัญคือรูปแบบการใช้งาน - โดยที่ฐานข้อมูลเป็นแบบทั่วไปและได้รับการปรับให้เหมาะสมสำหรับการค้นหาที่ซับซ้อนในหลาย ๆ ตาราง MOM ได้รับการปรับให้เหมาะกับการอ่านข้อความทีละข้อความใน FIFO เหมือนกับแฟชั่น [คิว]

JMSซึ่งเป็นการนำ API ActiveMQ มาใช้ถือเป็นรากฐานที่สำคัญในแอปพลิเคชัน Java Enterprise สิ่งนี้ทำให้ข้อความมีรูปแบบและความหมายร่วมกันซึ่งทำให้การรวมระหว่างแอปพลิเคชันต่างๆทำได้ง่ายขึ้น

แน่นอนว่ายังมีเป็นจำนวนมากของคุณสมบัติรายละเอียดเพิ่มเติมที่มีเฉพาะใน ActiveMQ โปรโตคอลลวดชอบOpenWire,STOMPและMQTT, JMS, EIPร่วมกันกับ Apache อูฐรูปแบบข้อความเช่น "คำขอ / ตอบ" และ "เผยแพร่ / สมัคร", JMS Bridging, การจัดกลุ่ม (" เครือข่ายของโบรกเกอร์ ") ซึ่งอนุญาตให้มีการปรับขนาดและการแจกแจง ฯลฯ
คุณควรอ่านหัวข้อเหล่านั้นสักเล็กน้อยหากคุณสนใจเนื่องจากมีขนาดค่อนข้างใหญ่


25

ActiveMQมีการสนับสนุนตารางเวลาที่ยอดเยี่ยมซึ่งหมายความว่าคุณสามารถกำหนดเวลาการส่งข้อความของคุณที่จะส่งในเวลาใดเวลาหนึ่งได้หนึ่งได้

เราได้ใช้คุณลักษณะนี้เพื่อส่งการแจ้งเตือนการใช้ยาไปยังผู้ป่วยที่อัปโหลดรายละเอียดยาในสถานการณ์การดูแลสุขภาพ


3
มันเจ๋งมาก เราได้ใช้ไลบรารีการตั้งเวลา Quartz เพื่อจุดประสงค์ในการเตือนความจำที่คล้ายกัน
สิทธารถะ

เราได้ใช้ฐานข้อมูล Oracle Scheduled Jobsเพื่อวัตถุประสงค์เดียวกัน
ahmednabil88

15

ด้วย RDBMS เมื่อคุณประมวลผลแถวข้อมูลโดยทั่วไปคุณจะอัปเดตแฟล็กที่ระบุว่าแถวนั้นได้รับการประมวลผลเพื่อไม่ให้การประมวลผลซ้ำ

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

ความแตกต่างก็คือUPDATEstatment ใน RDBMS นั้นทำงานช้ามากเมื่อเทียบกับacknowledgeใน activmeq


8

ฉันขอเน้นสิ่งต่อไปนี้:

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

การสนับสนุนการกู้คืน : ข้อความในคิวยังคงอยู่ สามารถกู้คืนข้อความได้ในภายหลังหากคิวล้มเหลว

การสื่อสารที่เชื่อถือได้ : พิจารณาระบบที่ประมวลผลคำขอของลูกค้า ในกรณีปกติระบบจะได้รับ 100 คำขอต่อนาที ระบบนี้ไม่น่าเชื่อถือเมื่อจำนวนคำขอเกินค่าเฉลี่ย ในกรณีเช่นนี้ Queue สามารถจัดการคำขอและสามารถพุชข้อความเป็นระยะ ๆ ตามปริมาณงานของระบบโดยไม่ทำลาย

อะซิงโครนัส : การสื่อสารเซิร์ฟเวอร์ไคลเอ็นต์ไม่ปิดกั้น เมื่อไคลเอนต์ส่งคำขอไปยังเซิร์ฟเวอร์ก็สามารถดำเนินการอื่น ๆ ได้โดยไม่ต้องรอการตอบกลับ เมื่อได้รับการตอบกลับลูกค้าสามารถจัดการได้ตลอดเวลา


7

จากWikipedia

Apache ActiveMQ เป็นโบรกเกอร์ข้อความโอเพนซอร์สที่เขียนด้วย Java พร้อมกับไคลเอ็นต์ Java Message Service (JMS) แบบเต็ม มี "คุณสมบัติขององค์กร" ซึ่งในกรณีนี้หมายถึงการส่งเสริมการสื่อสารจากไคลเอนต์หรือเซิร์ฟเวอร์มากกว่าหนึ่งเครื่อง

เกี่ยวกับคำถามของคุณ:

ทำไมคุณไม่ใช้ฐานข้อมูล?

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

ฉันเห็นด้วยอย่างยิ่งกับคำตอบของ@Hiram Chirinoเกี่ยวกับการแทรกและการลบข้อความในฐานข้อมูลหากคุณใช้ฐานข้อมูลแทนระบบส่งข้อความ

ประโยชน์ที่ได้รับจากสิ่งนี้ บทความนี้และบทความนี้

  1. การรวมองค์กร : อนุญาตให้แอปพลิเคชันที่สร้างขึ้นด้วยภาษาที่แตกต่างกันและบนระบบปฏิบัติการที่แตกต่างกันเพื่อรวมเข้าด้วยกัน
  2. ความโปร่งใสของสถานที่ : แอปพลิเคชันไคลเอนต์ไม่จำเป็นต้องทราบว่าแอปพลิเคชันบริการอยู่ที่ใด
  3. การสื่อสารที่เชื่อถือได้ - ผู้ผลิต / ผู้บริโภคข้อความไม่จำเป็นต้องพร้อมใช้งานในเวลาเดียวกัน
  4. ขูดหินปูน - สามารถปรับขนาดในแนวนอนได้โดยเพิ่มบริการอื่น ๆ
  5. การสื่อสารแบบอะซิงโครนัส - ไคลเอนต์สามารถส่งข้อความและดำเนินการประมวลผลอื่น ๆ ต่อไปแทนการบล็อกจนกว่าบริการจะส่งการตอบกลับ
  6. การมีเพศสัมพันธ์ที่ลดลง - สมมติฐานของลูกค้าและบริการจะลดลงอย่างมากอันเป็นผลมาจากผลประโยชน์ 5 ข้อก่อนหน้านี้ บริการสามารถเปลี่ยนแปลงรายละเอียดเกี่ยวกับตัวมันเองรวมถึงตำแหน่งโปรโตคอลและความพร้อมใช้งานโดยไม่ส่งผลกระทบหรือรบกวนลูกค้า

ต้องมีคุณลักษณะ ActiveMQ มีฐานข้อมูลที่ไม่?

มีมากมาย. ดูรายละเอียดเพิ่มเติมได้ที่หน้าเอกสารประกอบ มองไปที่กรณีการใช้งานด้วย

ดูงานนำเสนอนี้เพื่อทำความเข้าใจภายในของ ActiveMQ


2

สมมติว่าคุณมีแอปพลิเคชันที่ใช้งานในสถานที่หลายแห่งในเวลาเดียวกัน นอกจากนี้สมมติว่าแอปพลิเคชันของคุณต้องจัดการคำขอ 1,000 รายการต่อนาทีหรืออะไรทำนองนั้นดังนั้นการดำเนินการ db ปกติจึงไม่สามารถจัดการการดำเนินการดังกล่าวได้ Activemq ทำหน้าที่เป็นการประมวลผลข้อความซึ่งจะนำข้อความทั้งหมดเข้าสู่คิวดังนั้นแม้ว่าแอปพลิเคชันของคุณจะขัดข้องในที่เดียวก็ตาม สถานที่อื่นจะไม่ได้รับผลกระทบ

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