ActiveMQ ne için kullanılır - Veritabanı kullanarak mesajlaşma konseptini uygulayabilir miyiz?


Yanıtlar:


178

İki dağıtılmış işlem arasında güvenilir bir şekilde iletişim kurmak için kullanılır.

Evet, iki işlem arasında iletişim kurmak için mesajları bir Veritabanında saklayabilirsiniz , ancak mesaj alınır alınmaz DELETEmesaja ihtiyacınız olacak, Bu bir satır INSERTve DELETEher mesaj için. Saniyede binlerce mesaj
ileterek bunu ölçeklendirmeye çalıştığınızda , Veritabanları düşme eğilimindedir .

ActiveMQDiğer taraftan olduğu gibi , mesaj odaklı ara yazılım [MOM] bu kullanım durumlarını ele almak için oluşturulmuştur.
Sağlıklı bir sistemdeki mesajların çok hızlı bir şekilde silineceğini varsayarlar ve ek yükü önlemek için optimizasyonlar yapabilirler. .

Ayrıca, bir tüketicinin bir SQL sorgusu yaparak yeni mesajı yoklaması yerine tüketicilere mesaj gönderebilir.
Bu, sisteme gönderilen yeni mesajların işlenmesindeki gecikmeyi daha da azaltır.


Güzel açıklama! İki dağıtılmış işlemin aynı süreçte olması gerekiyor mu? Aynı uygulamanın iki örneğini mi kastediyorum?
Maverick

Hayır, rastgele uygulamalar ActiveMQ üzerinden birbirleriyle iletişim kurabilir. Örneğin, A ve B uygulamaları AB ve BA qeues oluşturabilir (okuma: B'den A için mesajlar ve diğer şekilde) ve birbirleri için eşleşen kuyruğa mesajlar gönderebilir.
Alex


67

ActiveMQveya genel olarak tüm Message Oriented Middleware (MOM) uygulamaları, iki uygulama veya iki bileşen arasında mesaj göndermek amacıyla tasarlanmıştır. bir uygulama içindeki .

Esasen, MOM ve veritabanları, okuyup yazabilmek için işlemsel ve kalıcı veri depolama sağladıkları için ortak bir temeli paylaşırlar.
En büyük fark, kullanım modelidir - veritabanlarının çok genel olduğu ve birden çok tablo üzerinde karmaşık arama için optimize edildiği, MOM, mesajları teker teker FIFO benzeri bir moda [Kuyruk] ile okumak için optimize edilmiştir.

JMSActiveMQ'nun uyguladığı bir API olan Java Enterprise uygulamalarında önemli bir köşe taşıdır. Bu, mesajların oldukça yaygın bir format ve anlambilim paylaşmasını sağlar, bu da farklı uygulamalar arasında entegrasyonu kolaylaştırır.

Tabii ki, daha ayrıntılı yalnızca ActiveMQ olan özellikler gibi tel protokollerinin bir yeri vardır OpenWire, STOMPve MQTT, JMS, EIPbirlikte Apache Camel, kümeleme, "Yayın / abonelik" JMS Bridging "istek / cevap" ve benzeri mesaj desenleri (ile" aracılar ağı "), ölçeklendirme ve dağıtımlara vb. izin verir.
İlgilendiğiniz takdirde, oldukça büyük oldukları için bu konuları biraz okumalısınız.


25

ActiveMQharika bir zamanlayıcı desteğine sahiptir, bu da mesajınızı belirli bir zamanda teslim edilecek şekilde göndermeyi planlayabileceğiniz anlamına gelir .

Bu özelliği, bir sağlık hizmeti senaryosuna ilaç ayrıntılarını yükleyen hastalara ilaç hatırlatıcıları göndermek için kullandık.


3
Bu oldukça havalı. Quartz planlama kitaplığını benzer hatırlatma amaçları için kullandık.
Siddhartha

Oracle veritabanını Scheduled Jobsda aynı amaçlarla kullandık.
ahmednabil88

15

RDBMS ile, bir veri satırını işlediğinizde, genellikle işlemin tekrarlanmaması için satırın işlendiğini belirten bir bayrağı güncellersiniz.

Ancak, Message Queue ile yalnızca bir mesajı onaylamanız gerekir ve bir sonraki tüketici bir sonrakini işleyecektir.

Aradaki fark, UPDATEbir acknowledgeRDBMS'deki ifadenin, activmeq'e kıyasla gerçekten yavaş bir işlem olmasıdır.


8

şunu vurgulamak isterim:

Ayrılmış : Sistemler bağlanmadan iletişim kurabilir. Kuyruk sistemler arasında yer alır, iletişim Kuyruk aracılığıyla yapıldığından bir sistem arızası diğerini asla etkilemez. Sistemler yukarı çıktıklarında çalışmaya devam eder.

Kurtarma desteği : Kuyruklardaki mesajlar kaldı. Kuyruk başarısız olursa mesajlar daha sonra geri yüklenebilir.

Güvenilir İletişim : İstemci taleplerini işleyen bir sistem düşünün. Normal durumlarda, sistem dakikada 100 istek alır. İstek sayısı ortalamanın üzerine çıktığında bu sistem güvenilmezdir. Böyle bir durumda, Kuyruk istekleri yönetebilir ve mesajları kesintiye uğratmadan sistem verimine göre periyodik olarak itebilir.

Eşzamansız : İstemci sunucu iletişimi engellemez. İstemci, sunucuya istek gönderdikten sonra, yanıt beklemeden diğer işlemleri yapabilir. Yanıt aldığında müşteri istediği zaman halledebilir.


7

Gönderen Wikipedia

Apache ActiveMQ, tam bir Java İleti Hizmeti (JMS) istemcisiyle birlikte Java'da yazılmış açık kaynaklı bir ileti aracısıdır. Bu durumda birden fazla istemci veya sunucudan gelen iletişimi teşvik etmek anlamına gelen "Kurumsal Özellikler" sağlar

Sorularınızla ilgili olarak:

Neden bir veritabanı kullanmıyorsun?

Veritabanını kalıcı veriler için kullanmalısınız, geçici veriler için kullanmamalısınız. Gönderenden Alıcıya bir mesaj göndermeniz gerektiğini varsayın. Mesaj alındığında, Alıcı bir işlemi yürütür (alma, işleme ve unutma). Bu mesajı işledikten sonra, o mesaja hiç ihtiyacınız yok. Bu durumda mesajı kalıcı veri tabanında saklamak doğru bir çözüm değildir.

Mesajlaşma sistemi yerine veritabanı kullanıyorsanız, veritabanına mesaj ekleme ve silme konusunda @Hiram Chirino cevabına tamamen katılıyorum .

Bu makale ve bu makalenin faydaları

  1. Kurumsal entegrasyon : Farklı dillerde ve farklı işletim sistemlerinde oluşturulan uygulamaların birbiriyle entegre olmasına izin verme
  2. Konum şeffaflığı : İstemci uygulamalarının hizmet uygulamalarının nerede olduğunu bilmesine gerek yoktur
  3. Güvenilir iletişim - mesaj üreticileri / tüketicileri aynı anda ulaşılabilir olmak zorunda değildir
  4. Ölçeklendirme - daha fazla hizmet ekleyerek yatay olarak ölçeklenebilir
  5. Eşzamansız iletişim - bir istemci bir mesajı tetikleyebilir ve hizmet yanıt gönderene kadar bloke etmek yerine diğer işlemlere devam edebilir;
  6. Azaltılmış bağlantı - müşteriler ve hizmetler tarafından yapılan varsayımlar, önceki 5 avantajın bir sonucu olarak büyük ölçüde azaltılır. Bir hizmet, istemciyi etkilemeden veya rahatsız etmeden, konumu, protokolü ve kullanılabilirliği dahil olmak üzere kendisiyle ilgili ayrıntıları değiştirebilir.

ActiveMQ'nun veritabanlarının sahip olmadığı bir özellik olmalı mı?

Çok var. Göz at dokümantasyon Daha fazla detay için sayfa. Kullanım durumlarına bir göz atın da .

ActiveMQ'nun dahili özelliklerini anlamak için bu sunuma bir göz atın .


2

Aynı anda birden fazla yerde kullanılan bir uygulamanız olduğunu varsayalım. Ayrıca, uygulamanızın dakikada 1000 istek işlemek zorunda olduğunu veya bunun gibi bir şeyi, normal db işlemlerinin bu tür işlemleri gerçekleştiremeyeceğini varsayalım, Activemq tüm iletileri sıraya alır, böylece uygulamanızdan biri tek bir konumda çökse bile diğer konum etkilenmeyecektir.

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.