ฉันเพิ่งอ่าน abit เกี่ยวกับ JMS และ Apache ActiveMQ และสงสัยว่าสิ่งที่ใช้ในโลกแห่งความเป็นจริงมีคนที่นี่ใช้ JMS หรือเทคโนโลยีคิวข้อความที่คล้ายกันหรือไม่
ฉันเพิ่งอ่าน abit เกี่ยวกับ JMS และ Apache ActiveMQ และสงสัยว่าสิ่งที่ใช้ในโลกแห่งความเป็นจริงมีคนที่นี่ใช้ JMS หรือเทคโนโลยีคิวข้อความที่คล้ายกันหรือไม่
คำตอบ:
JMS (ActiveMQ เป็นการใช้งานโบรกเกอร์ JMS) สามารถใช้เป็นกลไกในการอนุญาตการประมวลผลคำขอแบบอะซิงโครนัส คุณอาจต้องการทำเช่นนี้เนื่องจากคำขอใช้เวลานานในการดำเนินการให้เสร็จสมบูรณ์หรือเนื่องจากหลายฝ่ายอาจสนใจคำขอจริง อีกเหตุผลสำหรับการใช้คืออนุญาตให้ไคลเอนต์หลายคน (อาจเขียนในภาษาต่าง ๆ ) เพื่อเข้าถึงข้อมูลผ่าน JMS ActiveMQ เป็นตัวอย่างที่ดีที่นี่เพราะคุณสามารถใช้โปรโตคอล STOMP เพื่ออนุญาตการเข้าถึงจากไคลเอนต์ C # / Java / Ruby
ตัวอย่างในโลกแห่งความเป็นจริงคือเว็บแอปพลิเคชันที่ใช้ในการสั่งซื้อสำหรับลูกค้าเฉพาะราย เป็นส่วนหนึ่งของการวางคำสั่งซื้อนั้น (และเก็บไว้ในฐานข้อมูล) คุณอาจต้องการทำงานเพิ่มเติมหลายอย่าง:
ในการทำเช่นนี้รหัสแอปพลิเคชันของคุณจะเผยแพร่ข้อความไปยังคิว JMS ซึ่งรวมถึงรหัสคำสั่งซื้อ ส่วนหนึ่งของแอปพลิเคชันของคุณที่รับฟังคิวอาจตอบสนองต่อเหตุการณ์โดยรับ orderId ค้นหาคำสั่งซื้อในฐานข้อมูลจากนั้นสั่งซื้อสินค้านั้นกับระบบของบุคคลที่สามอื่น อีกส่วนของแอปพลิเคชันของคุณอาจรับผิดชอบต่อการสั่งซื้อรหัสและส่งอีเมลยืนยันไปยังลูกค้า
ใช้พวกเขาตลอดเวลาในการประมวลผลการดำเนินงานในระยะยาวแบบไม่พร้อมกัน ผู้ใช้เว็บจะไม่ต้องการรอนานกว่า 5 วินาทีเพื่อขอให้ดำเนินการ หากคุณมีที่ยาวกว่านั้นการออกแบบหนึ่งคือการส่งคำขอไปยังคิวและส่ง URL ทันทีที่ผู้ใช้สามารถตรวจสอบเพื่อดูเมื่องานเสร็จ
Publish / สมัครเป็นอีกหนึ่งเทคนิคที่ดีสำหรับการแยกผู้ส่งจากผู้รับจำนวนมาก มันเป็นสถาปัตยกรรมที่ยืดหยุ่นเนื่องจากสมาชิกสามารถมาและไปได้ตามต้องการ
ฉันมีการใช้งานที่น่าอัศจรรย์มากมายสำหรับ JMS:
การสื่อสารผ่านเว็บแชทสำหรับการบริการลูกค้า
แก้ไขข้อผิดพลาดการเข้าสู่ระบบในแบ็กเอนด์ เซิร์ฟเวอร์แอปทั้งหมดออกอากาศข้อความดีบั๊กในระดับต่างๆ จากนั้นลูกค้า JMS สามารถเปิดใช้งานเพื่อดูข้อความการแก้ปัญหา แน่ใจว่าฉันสามารถใช้บางอย่างเช่นsyslogแต่วิธีนี้ทำให้ฉันมีวิธีการกรองผลลัพธ์ตามข้อมูลบริบท (eq ตามชื่อเซิร์ฟเวอร์แอป, การเรียก API, ระดับการบันทึก, หมายเลขผู้ใช้, ประเภทข้อความ ฯลฯ ... ) ฉันยัง colorized ผลลัพธ์
แก้ไขข้อผิดพลาดในการเข้าสู่ไฟล์ เช่นเดียวกับข้างต้นเฉพาะบางส่วนเท่านั้นที่ถูกดึงออกมาโดยใช้ตัวกรองและเข้าสู่ไฟล์สำหรับการบันทึกทั่วไป
การแจ้งเตือน อีกครั้งการตั้งค่าที่คล้ายกันกับการบันทึกข้างต้นการดูข้อผิดพลาดเฉพาะและการแจ้งเตือนผู้คนด้วยวิธีการต่าง ๆ (อีเมล, ข้อความ, IM, ป๊อปอัปคำราม ... )
การกำหนดค่าและควบคุมกลุ่มซอฟต์แวร์แบบไดนามิก เซิร์ฟเวอร์แอพแต่ละตัวจะเผยแพร่ข้อความ "configure me" จากนั้น daemon การกำหนดค่าที่จะตอบกลับด้วยข้อความที่มีข้อมูลการกำหนดค่าทุกชนิด ในภายหลังหากเซิร์ฟเวอร์แอปทั้งหมดต้องการเปลี่ยนการกำหนดค่าในครั้งเดียวก็สามารถทำได้จาก config daemon
และธุรกรรมตามปกติ - รอคิวสำหรับกิจกรรมที่ล่าช้าเช่นการเรียกเก็บเงินการประมวลผลคำสั่งการจัดสรรการสร้างอีเมล ...
มันยอดเยี่ยมทุกที่ที่คุณต้องการรับประกันการส่งข้อความแบบอะซิงโครนัส
การคำนวณแบบซิงโครนัสแบบกระจาย
ตัวอย่างในโลกแห่งความจริงอาจเป็นกรอบการแจ้งเตือนทั่วทั้งแอปพลิเคชันซึ่งจะส่งอีเมลไปยังผู้มีส่วนได้เสียในหลาย ๆ จุดระหว่างการใช้งานแอปพลิเคชัน ดังนั้นแอปพลิเคชันจะทำหน้าที่เป็น a Producer
โดยสร้างMessage
วัตถุวางลงบนสิ่งใดสิ่งQueue
หนึ่งและเคลื่อนที่ไปข้างหน้า
จะมีกลุ่มของConsumer
ผู้ที่จะสมัครเป็นสมาชิกQueue
ในคำถามและจะจัดการการMessage
ส่งข้าม โปรดทราบว่าในระหว่างการทำธุรกรรมนี้Producer
s จะถูกแยกจากตรรกะของวิธีการMessage
จัดการที่กำหนด
เฟรมเวิร์กการส่งข้อความ (ActiveMQ และไลค์) ทำหน้าที่เป็นแกนหลักเพื่ออำนวยความสะดวกในการMessage
ทำธุรกรรมดังกล่าวโดยการจัดเตรียมMessageBroker
s
ฉันใช้มันเพื่อส่งการซื้อขายระหว่างวันระหว่างระบบการจัดการกองทุนที่แตกต่างกัน หากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับเทคโนโลยีการส่งข้อความที่ยอดเยี่ยมฉันสามารถแนะนำหนังสือ " Enterprise Integration Patterns " อย่างละเอียด มีตัวอย่าง JMS สำหรับสิ่งต่างๆเช่นคำขอ / ตอบกลับและเผยแพร่ / สมัครสมาชิก
การส่งข้อความเป็นเครื่องมือที่ยอดเยี่ยมสำหรับการรวมเข้าด้วยกัน
เราใช้เพื่อเริ่มการประมวลผลแบบอะซิงโครนัสซึ่งเราไม่ต้องการขัดขวางหรือขัดแย้งกับธุรกรรมที่มีอยู่
ตัวอย่างเช่นสมมติว่าคุณมีตรรกะราคาแพงและมีความสำคัญมากเช่น "ซื้อสิ่งของ" ส่วนสำคัญของการซื้อคือ 'แจ้งเตือนร้านค้า' เราทำการแจ้งเตือนการโทรแบบอะซิงโครนัสเพื่อให้ตรรกะ / การประมวลผลใด ๆ ที่เกี่ยวข้องกับการแจ้งเตือนไม่ได้บล็อกหรือโต้แย้งกับทรัพยากรด้วยตรรกะทางธุรกิจซื้อ ผลลัพธ์สุดท้ายซื้อเสร็จสมบูรณ์ผู้ใช้มีความสุขเราได้รับเงินของเราและเนื่องจากคิวรับประกันการจัดส่งที่ร้านค้าจะได้รับแจ้งทันทีที่เปิดหรือทันทีที่มีรายการใหม่ในคิว
ฉันใช้มันสำหรับโครงการการศึกษาของฉันซึ่งเป็นเว็บไซต์ค้าปลีกออนไลน์ที่คล้ายคลึงกับ Amazon JMS ถูกใช้เพื่อจัดการกับคุณสมบัติดังต่อไปนี้:
เรามีลูกค้าระยะไกลที่ใช้งานหลายเครื่องเชื่อมต่อกับเซิร์ฟเวอร์หลัก หากมีการเชื่อมต่อพวกเขาจะใช้ในการเข้าถึงฐานข้อมูลหลักหรือหากไม่ใช้ฐานข้อมูลของตนเอง เพื่อจัดการกับความสอดคล้องของข้อมูลเราได้ใช้กลไก 2PC สำหรับสิ่งนี้เราใช้ JMS เพื่อแลกเปลี่ยนข้อความระหว่างระบบเหล่านี้นั่นคือผู้ที่ทำหน้าที่เป็นผู้ประสานงานที่จะเริ่มต้นกระบวนการโดยการส่งข้อความในคิว ดังที่คนอื่น ๆ ได้พูดไปแล้วนี่คล้ายกับ pub / sub model
ฉันเคยเห็น JMS ใช้ในโครงการการค้าและการศึกษาที่แตกต่างกัน JMS สามารถเข้ามาในรูปภาพของคุณได้อย่างง่ายดายเมื่อใดก็ตามที่คุณต้องการมีระบบกระจายสัญญาณแบบแยกอิสระอย่างสมบูรณ์ โดยทั่วไปเมื่อคุณต้องการส่งคำขอจากโหนดเดียวและมีคนในเครือข่ายของคุณดูแลโดยไม่ต้องให้ข้อมูลใด ๆ เกี่ยวกับผู้รับ
ในกรณีของฉันฉันใช้ JMS ในการพัฒนามิดเดิลแวร์ที่มุ่งเน้นข้อความ (MOM) ในวิทยานิพนธ์ของฉันซึ่งมีการสร้างวัตถุเชิงวัตถุประเภทหนึ่งในด้านหนึ่งตามคำขอของคุณและรวบรวมและดำเนินการในด้านอื่น ๆ ตามการตอบสนองของคุณ .
Apache Camelใช้ร่วมกับ ActiveMQ เป็นวิธีที่ดีในการทำ Enterprise Integration Patterns
เราใช้การส่งข้อความเพื่อสร้างการเสนอราคาออนไลน์
เราใช้ JMS เพื่อการสื่อสารกับระบบในไซต์ระยะไกลจำนวนมากผ่านเครือข่ายที่ไม่น่าเชื่อถือ การเชื่อมต่อหลวม ๆ ร่วมกับการส่งข้อความที่เชื่อถือได้สร้างภูมิทัศน์ของระบบที่เสถียร: แต่ละข้อความจะถูกส่งทันทีที่เป็นไปได้ทางเทคนิคปัญหาที่ใหญ่กว่าในเครือข่ายจะไม่มีผลต่อภูมิทัศน์ของระบบทั้งหมด ...