ฉันมองขึ้นไปและมันเคยส่งข้อความระหว่าง 2 ระบบ
แต่ทำไม? ทำไมคุณไม่ใช้ a Database
?
จะต้องมีคุณสมบัติบางอย่างActiveMQ
ที่Databases
ไม่มี?
ฉันมองขึ้นไปและมันเคยส่งข้อความระหว่าง 2 ระบบ
แต่ทำไม? ทำไมคุณไม่ใช้ a Database
?
จะต้องมีคุณสมบัติบางอย่างActiveMQ
ที่Databases
ไม่มี?
คำตอบ:
ใช้เพื่อสื่อสารระหว่างสองกระบวนการแบบกระจายได้อย่างน่าเชื่อถือ
ใช่คุณสามารถจัดเก็บข้อความในฐานข้อมูลเพื่อสื่อสารระหว่างสองกระบวนการ แต่ทันทีที่ได้รับข้อความคุณจะต้องDELETE
ส่งข้อความนั่นหมายถึงแถวINSERT
และDELETE
สำหรับแต่ละข้อความ
เมื่อคุณพยายามขนาดว่าถึงการสื่อสารข้อความนับพันต่อวินาทีฐานข้อมูลมีแนวโน้มที่จะลดลงกว่า
เครื่องกลางที่เน้นข้อความ [MOM] เหมือนActiveMQ
ในทางกลับกันถูกสร้างขึ้นเพื่อรองรับกรณีการใช้งานเหล่านั้น
พวกเขาคิดว่าข้อความในระบบที่ดีจะถูกลบอย่างรวดเร็วและสามารถทำการเพิ่มประสิทธิภาพเพื่อหลีกเลี่ยงค่าใช้จ่ายลบออกได้อย่างรวดเร็วและสามารถทำเพิ่มประสิทธิภาพเพื่อหลีกเลี่ยงค่าใช้จ่าย
นอกจากนี้ยังสามารถส่งข้อความไปยังผู้บริโภคแทนที่จะเป็นผู้บริโภคที่ต้องสำรวจข้อความใหม่โดยการทำแบบสอบถาม SQL
ซึ่งจะช่วยลดเวลาแฝงที่เกี่ยวข้องกับการประมวลผลข้อความใหม่ที่ส่งเข้าสู่ระบบ
ActiveMQ
หรือโดยทั่วไปการใช้งาน Message Oriented Middleware (MOM) ทั้งหมดได้รับการออกแบบมาเพื่อจุดประสงค์ในการส่งข้อความระหว่างสองแอปพลิเคชันหรือสององค์ประกอบภายในแอปพลิเคชันเดียว
โดยพื้นฐานแล้ว MOM และฐานข้อมูลมีพื้นฐานร่วมกันในการจัดเตรียมการจัดเก็บข้อมูลแบบธุรกรรมและต่อเนื่องเพื่อให้สามารถอ่านและเขียนได้
ความแตกต่างที่สำคัญคือรูปแบบการใช้งาน - โดยที่ฐานข้อมูลเป็นแบบทั่วไปและได้รับการปรับให้เหมาะสมสำหรับการค้นหาที่ซับซ้อนในหลาย ๆ ตาราง MOM ได้รับการปรับให้เหมาะกับการอ่านข้อความทีละข้อความใน FIFO เหมือนกับแฟชั่น [คิว]
JMS
ซึ่งเป็นการนำ API ActiveMQ มาใช้ถือเป็นรากฐานที่สำคัญในแอปพลิเคชัน Java Enterprise สิ่งนี้ทำให้ข้อความมีรูปแบบและความหมายร่วมกันซึ่งทำให้การรวมระหว่างแอปพลิเคชันต่างๆทำได้ง่ายขึ้น
แน่นอนว่ายังมีเป็นจำนวนมากของคุณสมบัติรายละเอียดเพิ่มเติมที่มีเฉพาะใน ActiveMQ โปรโตคอลลวดชอบOpenWire
,STOMP
และMQTT
, JMS
, EIP
ร่วมกันกับ Apache อูฐรูปแบบข้อความเช่น "คำขอ / ตอบ" และ "เผยแพร่ / สมัคร", JMS Bridging, การจัดกลุ่ม (" เครือข่ายของโบรกเกอร์ ") ซึ่งอนุญาตให้มีการปรับขนาดและการแจกแจง ฯลฯ
คุณควรอ่านหัวข้อเหล่านั้นสักเล็กน้อยหากคุณสนใจเนื่องจากมีขนาดค่อนข้างใหญ่
ActiveMQ
มีการสนับสนุนตารางเวลาที่ยอดเยี่ยมซึ่งหมายความว่าคุณสามารถกำหนดเวลาการส่งข้อความของคุณที่จะส่งในเวลาใดเวลาหนึ่งได้หนึ่งได้
เราได้ใช้คุณลักษณะนี้เพื่อส่งการแจ้งเตือนการใช้ยาไปยังผู้ป่วยที่อัปโหลดรายละเอียดยาในสถานการณ์การดูแลสุขภาพ
Scheduled Jobs
เพื่อวัตถุประสงค์เดียวกัน
ด้วย RDBMS เมื่อคุณประมวลผลแถวข้อมูลโดยทั่วไปคุณจะอัปเดตแฟล็กที่ระบุว่าแถวนั้นได้รับการประมวลผลเพื่อไม่ให้การประมวลผลซ้ำ
อย่างไรก็ตามด้วยคิวข้อความคุณจะต้องรับทราบข้อความเท่านั้นจากนั้นผู้บริโภครายถัดไปจะดำเนินการกับข้อความถัดไป
ความแตกต่างก็คือUPDATE
statment ใน RDBMS นั้นทำงานช้ามากเมื่อเทียบกับacknowledge
ใน activmeq
ฉันขอเน้นสิ่งต่อไปนี้:
Decoupled : ระบบสามารถสื่อสารได้โดยไม่ต้องเชื่อมต่อ คิวอยู่ระหว่างระบบความล้มเหลวของระบบหนึ่งจะไม่ส่งผลกระทบต่อระบบอื่น ๆ เมื่อการสื่อสารเสร็จสิ้นผ่านคิว ระบบต่างๆยังคงทำงานต่อไปเมื่อมีการใช้งาน
การสนับสนุนการกู้คืน : ข้อความในคิวยังคงอยู่ สามารถกู้คืนข้อความได้ในภายหลังหากคิวล้มเหลว
การสื่อสารที่เชื่อถือได้ : พิจารณาระบบที่ประมวลผลคำขอของลูกค้า ในกรณีปกติระบบจะได้รับ 100 คำขอต่อนาที ระบบนี้ไม่น่าเชื่อถือเมื่อจำนวนคำขอเกินค่าเฉลี่ย ในกรณีเช่นนี้ Queue สามารถจัดการคำขอและสามารถพุชข้อความเป็นระยะ ๆ ตามปริมาณงานของระบบโดยไม่ทำลาย
อะซิงโครนัส : การสื่อสารเซิร์ฟเวอร์ไคลเอ็นต์ไม่ปิดกั้น เมื่อไคลเอนต์ส่งคำขอไปยังเซิร์ฟเวอร์ก็สามารถดำเนินการอื่น ๆ ได้โดยไม่ต้องรอการตอบกลับ เมื่อได้รับการตอบกลับลูกค้าสามารถจัดการได้ตลอดเวลา
จากWikipedia
Apache ActiveMQ เป็นโบรกเกอร์ข้อความโอเพนซอร์สที่เขียนด้วย Java พร้อมกับไคลเอ็นต์ Java Message Service (JMS) แบบเต็ม มี "คุณสมบัติขององค์กร" ซึ่งในกรณีนี้หมายถึงการส่งเสริมการสื่อสารจากไคลเอนต์หรือเซิร์ฟเวอร์มากกว่าหนึ่งเครื่อง
เกี่ยวกับคำถามของคุณ:
ทำไมคุณไม่ใช้ฐานข้อมูล?
คุณควรใช้ฐานข้อมูลสำหรับข้อมูลถาวรไม่ใช่สำหรับข้อมูลชั่วคราว สมมติว่าคุณต้องส่งข้อความจากผู้ส่งถึงผู้รับ ในการรับข้อความผู้รับจะดำเนินการหนึ่งการดำเนินการ (รับประมวลผลและลืม) หลังจากประมวลผลข้อความนั้นคุณไม่จำเป็นต้องใช้ข้อความนั้นเลย ในกรณีนี้การจัดเก็บข้อความในฐานข้อมูลถาวรไม่ใช่วิธีแก้ปัญหาที่ถูกต้อง
ฉันเห็นด้วยอย่างยิ่งกับคำตอบของ@Hiram Chirinoเกี่ยวกับการแทรกและการลบข้อความในฐานข้อมูลหากคุณใช้ฐานข้อมูลแทนระบบส่งข้อความ
ประโยชน์ที่ได้รับจากสิ่งนี้ บทความนี้และบทความนี้
ต้องมีคุณลักษณะ ActiveMQ มีฐานข้อมูลที่ไม่?
มีมากมาย. ดูรายละเอียดเพิ่มเติมได้ที่หน้าเอกสารประกอบ มองไปที่กรณีการใช้งานด้วย
ดูงานนำเสนอนี้เพื่อทำความเข้าใจภายในของ ActiveMQ
สมมติว่าคุณมีแอปพลิเคชันที่ใช้งานในสถานที่หลายแห่งในเวลาเดียวกัน นอกจากนี้สมมติว่าแอปพลิเคชันของคุณต้องจัดการคำขอ 1,000 รายการต่อนาทีหรืออะไรทำนองนั้นดังนั้นการดำเนินการ db ปกติจึงไม่สามารถจัดการการดำเนินการดังกล่าวได้ Activemq ทำหน้าที่เป็นการประมวลผลข้อความซึ่งจะนำข้อความทั้งหมดเข้าสู่คิวดังนั้นแม้ว่าแอปพลิเคชันของคุณจะขัดข้องในที่เดียวก็ตาม สถานที่อื่นจะไม่ได้รับผลกระทบ