Yanıtlar:
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:
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.
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.
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.
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 Producer
bir Message
nesne oluşturarak , belirli bir nesneye koyarak Queue
ve ilerleyerek hareket eder. Söz konusu aboneye abone olacak ve gönderilenleri ele almaya özen gösterecek
bir dizi Consumer
kiş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 .Queue
Message
Producer
Message
Message
MessageBroker
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.
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.
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ı:
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.
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. .
ActiveMQ ile birlikte kullanılan Apache Camel , Kurumsal Entegrasyon Kalıpları yapmanın harika bir yoludur
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 ...