การใช้ JMS / message ในโลกแห่งความเป็นจริง? [ปิด]


182

ฉันเพิ่งอ่าน abit เกี่ยวกับ JMS และ Apache ActiveMQ และสงสัยว่าสิ่งที่ใช้ในโลกแห่งความเป็นจริงมีคนที่นี่ใช้ JMS หรือเทคโนโลยีคิวข้อความที่คล้ายกันหรือไม่

คำตอบ:


191

JMS (ActiveMQ เป็นการใช้งานโบรกเกอร์ JMS) สามารถใช้เป็นกลไกในการอนุญาตการประมวลผลคำขอแบบอะซิงโครนัส คุณอาจต้องการทำเช่นนี้เนื่องจากคำขอใช้เวลานานในการดำเนินการให้เสร็จสมบูรณ์หรือเนื่องจากหลายฝ่ายอาจสนใจคำขอจริง อีกเหตุผลสำหรับการใช้คืออนุญาตให้ไคลเอนต์หลายคน (อาจเขียนในภาษาต่าง ๆ ) เพื่อเข้าถึงข้อมูลผ่าน JMS ActiveMQ เป็นตัวอย่างที่ดีที่นี่เพราะคุณสามารถใช้โปรโตคอล STOMP เพื่ออนุญาตการเข้าถึงจากไคลเอนต์ C # / Java / Ruby

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

  • เก็บคำสั่งซื้อในระบบแบ็คเอนด์ของบุคคลที่สามบางประเภท (เช่น SAP)
  • ส่งอีเมลไปยังลูกค้าเพื่อแจ้งให้ทราบถึงการสั่งซื้อของพวกเขา

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


สวัสดี @ คุณเคยเห็นแท็กเอกสารนี้หรือไม่ stackoverflow.com/documentation/jms/commitพวกเขาต้องการการสนับสนุนจากผู้สนับสนุนหนึ่งคนเพื่อเปิดใช้งานหัวข้อฉันคิดว่าคุณน่าจะเป็น :) ผู้ที่เปิดใช้งานพวกเขาให้เอกสารที่ยอดเยี่ยมแก่เราใน JMS
juanmf

@ จอนที่ฉันเข้าใจ jms เป็นตัวดำเนินการตามรูปแบบการรวมองค์กรหรือไม่
valik

ไม่ล่อหรืออูฐจะ ...
Jon

1
หากแอพจำนวนมากอาจใช้ข้อความในคิวคิวจะทราบได้อย่างไรว่าจะลบข้อความเก่าเมื่อใด
Basil Bourque

95

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

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


41
หลังจากอ่านคำตอบของคุณฉันจะเพิ่ม JMS ในคิวของฉัน 'สิ่งที่ฉันจะเรียนรู้ในปีนี้' :)
โรมัน

ในยุคสมัยของเราแทนที่จะใช้สเป็ค JMS เราสามารถใช้การเรียกใช้เมธอดแบบอะซิงโครนัสได้ ดูข้อมูลเพิ่มเติมได้ที่: docs.oracle.com/javaee/6/tutorial/doc/gkkqg.html
geo

3
พวกเขาไม่เหมือนกัน ไม่มีการรับประกันการจัดส่งด้วยวิธีการเรียก asynch ไม่มีแนวคิดเกี่ยวกับหัวข้อที่สามารถส่งไปยังผู้ฟังหลายคนพร้อมกัน
duffymo

75

ฉันมีการใช้งานที่น่าอัศจรรย์มากมายสำหรับ JMS:

  • การสื่อสารผ่านเว็บแชทสำหรับการบริการลูกค้า

  • แก้ไขข้อผิดพลาดการเข้าสู่ระบบในแบ็กเอนด์ เซิร์ฟเวอร์แอปทั้งหมดออกอากาศข้อความดีบั๊กในระดับต่างๆ จากนั้นลูกค้า JMS สามารถเปิดใช้งานเพื่อดูข้อความการแก้ปัญหา แน่ใจว่าฉันสามารถใช้บางอย่างเช่นsyslogแต่วิธีนี้ทำให้ฉันมีวิธีการกรองผลลัพธ์ตามข้อมูลบริบท (eq ตามชื่อเซิร์ฟเวอร์แอป, การเรียก API, ระดับการบันทึก, หมายเลขผู้ใช้, ประเภทข้อความ ฯลฯ ... ) ฉันยัง colorized ผลลัพธ์

  • แก้ไขข้อผิดพลาดในการเข้าสู่ไฟล์ เช่นเดียวกับข้างต้นเฉพาะบางส่วนเท่านั้นที่ถูกดึงออกมาโดยใช้ตัวกรองและเข้าสู่ไฟล์สำหรับการบันทึกทั่วไป

  • การแจ้งเตือน อีกครั้งการตั้งค่าที่คล้ายกันกับการบันทึกข้างต้นการดูข้อผิดพลาดเฉพาะและการแจ้งเตือนผู้คนด้วยวิธีการต่าง ๆ (อีเมล, ข้อความ, IM, ป๊อปอัปคำราม ... )

  • การกำหนดค่าและควบคุมกลุ่มซอฟต์แวร์แบบไดนามิก เซิร์ฟเวอร์แอพแต่ละตัวจะเผยแพร่ข้อความ "configure me" จากนั้น daemon การกำหนดค่าที่จะตอบกลับด้วยข้อความที่มีข้อมูลการกำหนดค่าทุกชนิด ในภายหลังหากเซิร์ฟเวอร์แอปทั้งหมดต้องการเปลี่ยนการกำหนดค่าในครั้งเดียวก็สามารถทำได้จาก config daemon

  • และธุรกรรมตามปกติ - รอคิวสำหรับกิจกรรมที่ล่าช้าเช่นการเรียกเก็บเงินการประมวลผลคำสั่งการจัดสรรการสร้างอีเมล ...

มันยอดเยี่ยมทุกที่ที่คุณต้องการรับประกันการส่งข้อความแบบอะซิงโครนัส


5
ฉันใช้ JMS ในการแก้ไขข้อผิดพลาดไม่ถูกต้อง คิวและการส่งข้อความมีค่าใช้จ่ายและการบันทึกที่สำคัญ (สำหรับการดีบักที่มักจะบันทึกจำนวนมาก) จะต้องเร็วที่สุด
Marco Altieri

19

การคำนวณแบบซิงโครนัสแบบกระจาย
ตัวอย่างในโลกแห่งความจริงอาจเป็นกรอบการแจ้งเตือนทั่วทั้งแอปพลิเคชันซึ่งจะส่งอีเมลไปยังผู้มีส่วนได้เสียในหลาย ๆ จุดระหว่างการใช้งานแอปพลิเคชัน ดังนั้นแอปพลิเคชันจะทำหน้าที่เป็น a Producerโดยสร้างMessageวัตถุวางลงบนสิ่งใดสิ่งQueueหนึ่งและเคลื่อนที่ไปข้างหน้า
จะมีกลุ่มของConsumerผู้ที่จะสมัครเป็นสมาชิกQueueในคำถามและจะจัดการการMessageส่งข้าม โปรดทราบว่าในระหว่างการทำธุรกรรมนี้Producers จะถูกแยกจากตรรกะของวิธีการMessageจัดการที่กำหนด
เฟรมเวิร์กการส่งข้อความ (ActiveMQ และไลค์) ทำหน้าที่เป็นแกนหลักเพื่ออำนวยความสะดวกในการMessageทำธุรกรรมดังกล่าวโดยการจัดเตรียมMessageBrokers


ฉันต้องการการประมวลผลแบบอะซิงโครนัสเนื่องจาก RestService Api เป็นแบบซิงโครนัส จะทำอย่างไรกับ ActiveMq และ Jms.P กรุณาช่วยในเรื่องนี้ stackoverflow.com/questions/19706788/… . ขอบคุณสำหรับความช่วยเหลือและเวลาของคุณ
Kumar

10

ฉันใช้มันเพื่อส่งการซื้อขายระหว่างวันระหว่างระบบการจัดการกองทุนที่แตกต่างกัน หากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับเทคโนโลยีการส่งข้อความที่ยอดเยี่ยมฉันสามารถแนะนำหนังสือ " Enterprise Integration Patterns " อย่างละเอียด มีตัวอย่าง JMS สำหรับสิ่งต่างๆเช่นคำขอ / ตอบกลับและเผยแพร่ / สมัครสมาชิก

การส่งข้อความเป็นเครื่องมือที่ยอดเยี่ยมสำหรับการรวมเข้าด้วยกัน


8

เราใช้เพื่อเริ่มการประมวลผลแบบอะซิงโครนัสซึ่งเราไม่ต้องการขัดขวางหรือขัดแย้งกับธุรกรรมที่มีอยู่

ตัวอย่างเช่นสมมติว่าคุณมีตรรกะราคาแพงและมีความสำคัญมากเช่น "ซื้อสิ่งของ" ส่วนสำคัญของการซื้อคือ 'แจ้งเตือนร้านค้า' เราทำการแจ้งเตือนการโทรแบบอะซิงโครนัสเพื่อให้ตรรกะ / การประมวลผลใด ๆ ที่เกี่ยวข้องกับการแจ้งเตือนไม่ได้บล็อกหรือโต้แย้งกับทรัพยากรด้วยตรรกะทางธุรกิจซื้อ ผลลัพธ์สุดท้ายซื้อเสร็จสมบูรณ์ผู้ใช้มีความสุขเราได้รับเงินของเราและเนื่องจากคิวรับประกันการจัดส่งที่ร้านค้าจะได้รับแจ้งทันทีที่เปิดหรือทันทีที่มีรายการใหม่ในคิว


1
โปรดช่วยในเรื่องนี้ stackoverflow.com/questions/19706788/… . ขอบคุณสำหรับความช่วยเหลือและเวลาของคุณ
Kumar

2
แต่เนื่องจากคำขอไม่ตรงกันเนื่องจากปัญหาเครือข่ายข้อความของคุณอาจไม่ถูกส่ง แล้วเรื่องนี้ล่ะ เมื่อคุณต้องการซื้อสิ่งต่าง ๆ จะต้องส่งสารไนตริกของคุณ ไม่ได้หรือไม่
grep

8

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

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

เรามีลูกค้าระยะไกลที่ใช้งานหลายเครื่องเชื่อมต่อกับเซิร์ฟเวอร์หลัก หากมีการเชื่อมต่อพวกเขาจะใช้ในการเข้าถึงฐานข้อมูลหลักหรือหากไม่ใช้ฐานข้อมูลของตนเอง เพื่อจัดการกับความสอดคล้องของข้อมูลเราได้ใช้กลไก 2PC สำหรับสิ่งนี้เราใช้ JMS เพื่อแลกเปลี่ยนข้อความระหว่างระบบเหล่านี้นั่นคือผู้ที่ทำหน้าที่เป็นผู้ประสานงานที่จะเริ่มต้นกระบวนการโดยการส่งข้อความในคิว ดังที่คนอื่น ๆ ได้พูดไปแล้วนี่คล้ายกับ pub / sub model


6

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

ในกรณีของฉันฉันใช้ JMS ในการพัฒนามิดเดิลแวร์ที่มุ่งเน้นข้อความ (MOM) ในวิทยานิพนธ์ของฉันซึ่งมีการสร้างวัตถุเชิงวัตถุประเภทหนึ่งในด้านหนึ่งตามคำขอของคุณและรวบรวมและดำเนินการในด้านอื่น ๆ ตามการตอบสนองของคุณ .




4

เราใช้ JMS เพื่อการสื่อสารกับระบบในไซต์ระยะไกลจำนวนมากผ่านเครือข่ายที่ไม่น่าเชื่อถือ การเชื่อมต่อหลวม ๆ ร่วมกับการส่งข้อความที่เชื่อถือได้สร้างภูมิทัศน์ของระบบที่เสถียร: แต่ละข้อความจะถูกส่งทันทีที่เป็นไปได้ทางเทคนิคปัญหาที่ใหญ่กว่าในเครือข่ายจะไม่มีผลต่อภูมิทัศน์ของระบบทั้งหมด ...

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