Baktım ve 2 sistem arasında mesaj gönderiyordu.
Ama neden? Neden sadece kullanmıyorsun Database
?
Bazı özellik olmalı ActiveMQ
o vardır Databases
değil mi?
Baktım ve 2 sistem arasında mesaj gönderiyordu.
Ama neden? Neden sadece kullanmıyorsun Database
?
Bazı özellik olmalı ActiveMQ
o vardır Databases
değil mi?
Yanıtlar:
İ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 DELETE
mesaja ihtiyacınız olacak, Bu bir satır INSERT
ve DELETE
her mesaj için. Saniyede binlerce mesaj
ileterek bunu ölçeklendirmeye çalıştığınızda , Veritabanları düşme eğilimindedir .
ActiveMQ
Diğ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.
ActiveMQ
veya 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.
JMS
ActiveMQ'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
, STOMP
ve MQTT
, JMS
, EIP
birlikte 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.
ActiveMQ
harika 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.
Scheduled Jobs
da aynı amaçlarla kullandık.
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, UPDATE
bir acknowledge
RDBMS'deki ifadenin, activmeq'e kıyasla gerçekten yavaş bir işlem olmasıdır.
ş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.
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ı
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 .
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.