JMS / ileti kuyruklarının gerçek dünyada kullanımı? [kapalı]


182

Sadece JMS ve Apache ActiveMQ hakkında abit okuyordum. Ve buradaki insanlar JMS veya benzeri mesaj kuyruğu teknolojilerini hangi gerçek dünyada kullandıklarını merak ediyor muydu?

Yanıtlar:


191

JMS (ActiveMQ bir JMS aracı uygulamasıdır), eşzamansız istek işlemeye izin veren bir mekanizma olarak kullanılabilir. Bunu, isteğin tamamlanması uzun sürdüğü veya birkaç tarafın gerçek taleple ilgilenebileceği için bunu yapmak isteyebilirsiniz. Bunu kullanmanın bir başka nedeni, birden fazla istemcinin (farklı dillerde yazılmış olması muhtemel) JMS aracılığıyla bilgilere erişmesine izin vermektir. ActiveMQ burada iyi bir örnektir, çünkü bir C # / Java / Ruby istemcisinden erişime izin vermek için STOMP protokolünü kullanabilirsiniz.

Gerçek bir dünya örneği, belirli bir müşteri için sipariş vermek için kullanılan bir web uygulaması örneğidir. Bu siparişi vermenin (ve bir veritabanında saklamanın) bir parçası olarak bir dizi ek görev taşımak isteyebilirsiniz:

  • Siparişi bir tür üçüncü taraf arka uç sisteminde (SAP gibi) depolayın
  • Siparişinin verildiğini bildirmek için müşteriye bir e-posta gönderin

Bunu yapmak için uygulama kodunuz, sipariş kimliği içeren bir JMS kuyruğunda bir ileti yayınlar. Uygulamayı kuyruğu dinleyen bir kısmı, orderId'yi alarak, veritabanında siparişi arayarak ve bu siparişi başka bir üçüncü taraf sistemine yerleştirerek olaya yanıt verebilir. Başvurunuzun başka bir kısmı, orderId'yi almaktan ve müşteriye bir onay e-postası göndermekten sorumlu olabilir.


Merhaba @jon Bu Belgeler etiketini gördünüz mü? stackoverflow.com/documentation/jms/commit onlar konuyu etkinleştirmek için sadece bir committer desteğe ihtiyaç, ben bir olabilir sanırım :) kim bize JMS harika dokümanlar vermek sağlar
juanmf

@Jon anladığım gibi jms kendisi kurumsal entegrasyon desen bir uygulamasıdır?
valik

Hayır, Katır ya da Deve ...
Jon

1
Herhangi bir sayıda uygulama kuyruktaki iletileri tüketiyorsa, kuyruk eski iletilerin ne zaman silineceğini nasıl bilebilir?
Basil Bourque

95

Uzun süren işlemleri eşzamansız olarak işlemek için bunları her zaman kullanın. Bir web kullanıcısı, bir isteğin işlenmesi için 5 saniyeden fazla beklemek istemez. Bundan daha uzun çalışan bir tasarımınız varsa, bir tasarım isteği kuyruğa göndermek ve kullanıcının işin ne zaman bittiğini görmek için kontrol edebileceği bir URL'yi hemen geri göndermektir.

Yayınlama / abone olma, birçok alıcıdan gönderenleri ayırmak için başka bir iyi tekniktir. Esnek bir mimari, çünkü aboneler gerektiği gibi gelip gidebiliyor.


41
Cevabınızı okuduktan sonra sıraya 'Bu yıl ne öğreneceğim' dersine JMS ekleyeceğim :)
Roman

Günümüzde, JMS spec kullanmak yerine, senkronize olmayan yöntem çağrılarını kullanabiliriz. Daha fazla bilgi için bkz. Docs.oracle.com/javaee/6/tutorial/doc/gkkqg.html
geo

3
Tam olarak aynı değiller. Asenkron yöntem çağrısı ile garantili yayın yoktur; aynı anda birkaç dinleyiciye gönderilebilecek konu kavramı yok.
duffymo

75

JMS için pek çok şaşırtıcı kullanımım oldu:

  • Müşteri hizmetleri için web sohbet iletişimi.

  • Arka uçtaki günlük hatalarını ayıkla. Tüm uygulama sunucuları çeşitli düzeylerde hata ayıklama iletileri yayınladı. Hata ayıklama iletilerini izlemek için bir JMS istemcisi başlatılabilir. Tabii ki syslog gibi bir şey kullanmış olabilirim , ama bu bana bağlamsal bilgilere (uygulama sunucusu adı, api çağrısı, günlük seviyesi, kullanıcı kimliği, mesaj türü vb.) Göre çıktıyı filtrelemek için her türlü yolu verdi. Ayrıca çıktıyı renklendirdim.

  • Günlük dosyasında hata ayıklama. Yukarıdaki ile aynı şekilde, sadece belirli parçalar filtreler kullanılarak çıkarıldı ve genel kayıt için dosyaya kaydedildi.

  • Uyarma. Yine, yukarıdaki günlük kaydına benzer bir kurulum, belirli hataları izleme ve çeşitli yollarla (e-posta, kısa mesaj, IM, Growl pop-up ...) insanları uyarma

  • Yazılım kümelerini dinamik olarak yapılandırma ve denetleme. Her uygulama sunucusu bir "beni yapılandır" mesajı, ardından her türlü yapılandırma bilgisini içeren bir mesajla yanıt verecek bir yapılandırma arka plan programı yayınlardı. Daha sonra, tüm uygulama sunucularının yapılandırmalarının bir kerede değiştirilmesi gerekiyorsa, yapılandırma arka plan programından yapılabilir.

  • Ve faturalandırma, sipariş işleme, provizyon, e-posta oluşturma gibi gecikmiş etkinlikler için olağan sıradaki işlemler ...

İletilerin asenkron olarak teslim edilmesini garanti etmek istediğiniz her yerde harika.


5
Hata ayıklama günlüğü için JMS kullanmak bana doğru gelmiyor. Kuyrukların ve mesajlaşmanın önemli bir maliyeti ve günlüğü vardır (genellikle çok fazla günlük kaydeden hata ayıklama için) mümkün olduğunca hızlı olmalıdır.
Marco Altieri

19

Dağıtık (a) eşzamanlı hesaplama.
Gerçek bir dünya örneği, uygulama kullanımı sırasında çeşitli noktalarda paydaşlara posta gönderen, uygulama çapında bir bildirim çerçevesi olabilir. Böylece uygulama Producerbir Messagenesne oluşturarak , belirli bir nesneye koyarak Queueve ilerleyerek hareket eder. Söz konusu aboneye abone olacak ve gönderilenleri ele almaya özen gösterecek
bir dizi Consumerkişi olacaktır . Bu işlem sırasında, s'nin belirli bir işlemin nasıl yapılacağı mantığından ayrıldığını unutmayın . Mesajlaşma çerçeveleri (ActiveMQ ve benzerleri) bu işlemleri kolaylaştırmak için bir omurga görevi görür .QueueMessageProducerMessage
MessageMessageBroker


RestService Api senkron olduğundan eşzamansız işleme istiyorum. ActiveMq ve Jms ile nasıl yapılır.Lütfen bu konuda yardım edin. stackoverflow.com/questions/19706788/… . Yardımınız ve zamanınız için teşekkür ederiz
Kumar

10

Farklı fon yönetim sistemleri arasında gün içi işlemler göndermek için kullandım. Harika bir teknoloji mesajlaşmasının ne olduğu hakkında daha fazla bilgi edinmek isterseniz, " Kurumsal Entegrasyon Kalıpları " kitabını iyice önerebilirim . İstek / yanıt ve yayınla / abone ol gibi şeyler için bazı JMS örnekleri vardır.

Mesajlaşma entegrasyon için mükemmel bir araçtır.


8

Bunu, mevcut bir işlemi kesmek veya çakışmak istemediğimiz zaman uyumsuz işlemeyi başlatmak için kullanırız.

Örneğin, "eşya satın al" gibi pahalı ve çok önemli bir mantığınız olduğunu varsayalım, eşya satın almanın önemli bir kısmı 'eşya mağazasına bildir' olacaktır. Bildirim çağrısında yer alan herhangi bir mantık / işlem, satın alma iş mantığı ile kaynakları engellemeyecek veya bunlarla mücadele etmeyecek şekilde bildirim çağrısını eşzamansız hale getiririz. Sonuç olarak, satın alma tamamlanır, kullanıcı mutludur, paramızı alırız ve kuyruk teslimatı garanti ettiği için mağaza açılır açılmaz ya da kuyrukta yeni bir öğe olur olmaz bildirilir.


1
Lütfen bu konuda yardım edin. stackoverflow.com/questions/19706788/… . Yardımınız ve zaman ayırdığınız için teşekkürler.
Kumar

2
Ancak istek eşzamansız olduğundan, ağ sorunu nedeniyle iletiniz gönderilmeyebilir. Peki buna ne dersin? Bir şeyler satın almak istediğinizde, nitelemeniz gönderilmelidir. değil mi?
grep

8

Amazon'a benzer çevrimiçi perakende web sitesi olan akademik projem için kullandım. JMS aşağıdaki özellikleri işlemek için kullanıldı:

  1. Sevkiyat bir yerden başka bir yere giderken müşterilerin verdiği siparişlerin konumunu güncelleyin. Bu, JMS Kuyruğuna sürekli mesaj gönderilerek yapıldı.
  2. Sevkıyatın gecikmesi gibi alışılmadık olaylar hakkında uyarı ve ardından müşteriye e-posta gönderme.
  3. Teslimat hedefine ulaşırsa, bir teslimat etkinliği gönderir.

Ana sunucuya bağlı birden fazla uzak istemcimiz de vardı. Bağlantı mevcutsa, ana veritabanına erişmek için veya kendi veritabanlarını kullanmazlar. Veri tutarlılığıyla başa çıkmak için 2PC mekanizması uyguladık. Bunun için JMS'yi bu sistemler arasında mesaj alışverişi yapmak için kullandık, yani biri koordinatör olarak görev yapan biri, kuyruğa mesaj göndererek süreci başlatacak ve diğerleri de kuyruğa tekrar bir mesaj göndererek buna cevap verecektir. Diğerlerinin de belirttiği gibi, bu pub / sub modeline benziyordu.


6

JMS'nin farklı ticari ve akademik projelerde kullanıldığını gördüm. Tamamen ayrılmış bir dağıtılmış sisteme sahip olmak istediğinizde JMS kolayca resminize gelebilir. Genel olarak, isteğinizi bir düğümden göndermeniz gerektiğinde ve ağınızdaki bir kişi, gönderene alıcı hakkında herhangi bir bilgi vermeden / vermeyerek bu konuyla ilgilenir.

Benim durumumda, tezimde bir tarafta belirli tipte nesne yönelimli nesnelerin üretildiği ve yanıt olarak diğer tarafta derlendiği ve yürütüldüğü tezimde mesaj odaklı bir ara katman yazılımı (MOM) geliştirirken JMS'yi kullandım. .



5

Çevrimiçi Alıntılar oluşturmak için mesajlaşmayı kullandık


4

JMS'yi güvenilir olmayan ağlar üzerinden çok sayıda uzak sitedeki sistemlerle iletişim için kullanıyoruz. Güvenilir mesajlaşma ile birlikte gevşek bağlantı, istikrarlı bir sistem manzarası üretir: Her mesaj teknik olarak mümkün olan en kısa sürede gönderilecek, ağdaki daha büyük sorunların tüm sistem manzarası üzerinde etkisi olmayacaktır ...

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.