# Abone olmayın, öyleyse tüm mesajları Mosquitto ile veritabanına nasıl dökersiniz?


16

HiveMQ'nun blogu , tüm iletileri bir veritabanına dökmeye çalışırken çok düzeyli joker karaktere abone olmamak için "en iyi uygulamalar" altında listelenir. Abone olan istemcinin çok fazla ileti yükleyemeyeceğini ve bunun yerine ileti akışına doğrudan bağlanmak için bir aracı eklentisi kullanmayı önerebileceğini iddia ediyorlar.

Bazen komisyoncu üzerinden aktarılan tüm mesajlara, örneğin hepsini bir veritabanında ısrar ederken abone olmak gerekir. Bu bir MQTT istemcisi kullanılarak ve çok düzeyli joker karaktere abone olarak yapılmamalıdır. Bunun nedeni, genellikle abone olan istemcinin yoluna çıkan iletilerin yükünü işleyememesidir. Özellikle büyük bir veriminiz varsa. Önerdiğimiz çözüm, MQTT aracısında bir uzantı uygulamaktır, örneğin HiveMQ eklenti sistemi, HiveMQ'nun davranışına bağlanmanıza ve gelen her mesajı işlemek ve bir veritabanına devam ettirmek için eşzamansız bir rutin eklemenize izin verir.

Orada mı

  • sivrisinek broker için benzer bir sistem (uzatma / eklenti),
  • Sivrisinek ile çalışan başka bir önerilen yöntem veya
  • Bu yaklaşımın gereksiz olduğuna dair makul kanıtlar, yani abone olan bir müşterinin #gayet iyi yapabileceği?

/programming//q/31584613/3984613 bu soruyu ayrıntılı olarak ele almıyor.

Yanıtlar:


12

mosquitto brokeri için benzer bir sistem (uzatma / eklenti)

Bildiğim kadarıyla mosquitto broker için eklenti / uzantı yok (en azından açık kaynak kodlu)

Sivrisinek ile çalışan başka bir önerilen yöntem

Mosquitto brokeri ve AWS IoT ile yaşadığım tecrübeye göre, doğrudan '#'

Makul kanıt

Bu soruya baktıktan sonra, üretim sınırlarını bilmek ve bir uzatma sistemine ihtiyaç olup olmadığını öğrenmek için biraz merak ettim. Bu yüzden aşağıdakileri ayarladım:

  • 100 AWS Lambda işlevi, Ağ Geçidine rastgele bazı veriler göndermek için sanal uç aygıt olarak işlev görür (EC2 örneği t2.nano500MB RAM)
  • 60 saniyede bir işlevler ağ geçidinde farklı konulara veri yayınlamak için tetiklenir (lambdatoec2 / {VariableTopicNumberFrom1-100}
  • EC2 örneği Mosquitto 1.4.10 çalıştırıyor

Şu an itibariyle, herhangi bir eklenti sistemi olmadan # aboneliğine hiçbir sorun olmadığını görüyorum. Ama yine de birkaç son senaryo için test etmek zorundayım (bunları test edeceğimde cevabı güncelleyeceğim).


"Doğru" cevap testtir. # Numarasına abone ekleyerek sisteminizin performansının olumsuz etkilendiği gösterilebiliyorsa, aracıyı # aboneliğe izin vermeyecek şekilde yeniden yapılandırın. Bu cevabı iptal ettim çünkü @bravokeyl tam olarak bunu yaptı.
John Deters

11

OpenHAB posta listesindeki bu tartışma,# tüm iletileri almak için abonelik olarak kullanılmayla ilgili herhangi bir sorun olmadığını gösteriyor :

MQTT cihazlarında sorun giderirken, bazen keşke Mosquitto aracının belirli bir konu yerine gördüğü tüm MQTT mesajlarını görebilmemi isterdim. Bunu yapmanın bir yolu var mı?

Birisi bu soruyu sizin için Mosquitto listesinde cevapladı; bir joker karakter kullanın. (#)

Bu Yığın Taşması sorusu da aynı yöntemi önerir:

# Numarasına abone olmak size $ ile başlayan konular hariç her şeye bir abonelik verir (bunlar normalde yine de kontrol konularıdır).

Elbette ilk olarak neye abone olduğunuzu bilmek daha iyidir ve bazı aracı yapılandırmaları # seçeneğine abone olmaya izin vermeyebilir.

Bence Kaulics tarafından belirtildiği gibi , spesifikasyon# geçerli olduğunu belirtir :

Normatif olmayan yorum

  • “#” Geçerli ve her Uygulama Mesajını alacak

Dürüst olmak gerekirse, orijinal iddianın gerçekten çok mantıklı olup olmadığına itiraz ediyorum:

Bunun nedeni, genellikle abone olan istemcinin yoluna çıkan iletilerin yükünü işleyememesidir.

Durum buysa, komisyoncu ilk etapta mesajları nasıl ele alabilir? Sürece müşteri brokera benzerlik taşımaktadır gibi ben şiddetle trafik o düzeyde de ilk çökmesine o komisyoncu ve nedenini mahçup çünkü, müşteri bastırmak için mümkün olacağını sanmıyorum.

Özetle, HiveMQ iddiası diğer kaynaklardan gelen çok fazla kanıtla desteklenmiyor gibi görünüyor ve bunun gerçekten ne anlama geleceğini düşündüğünüzde, özellikle mantıklı görünmüyor.


10

Herhangi bir yazılımda olduğu gibi MQTT brokerları için birçok farklı kullanım durumu olduğunu düşünmek önemlidir.

Bir milyar kullanıcı için (birçok kullanıcı, kullanıcı başına nispeten düşük mesaj oranı) sohbet mesajlarını yönetmek, çok az istemciye sahip ancak yüksek mesaj oranına sahip bir sistemden farklıdır ve her ikisi de bir ev otomasyon sisteminden (birkaç istemci, düşük mesaj oranı) farklıdır. .

HiveMQ çok yüksek istemci / mesaj oranı uygulamaları hakkında düşünüyor - bu durumda brokerın yeteneği bir müşterinin kapasitesini neredeyse kesinlikle aşıyor.

#Ev otomasyon sisteminize abone olmak istiyorsanız, sorun yaratmanız pek olası değildir. Her durumda aracının aşırı CPU kullanıp kullanmadığını kontrol edebilir ve görebilirsiniz.

Diğer cevaplarda olduğu gibi, abone olmak #size tüm 'normal' konuları verecektir, bu bir ile başlamayan bir şeydir $. Ben ile başlayan her konu söyleyerek gibi spec yorumlamak $Abone olmak olurdu böylece, kendi içinde bir bütün ayrı ağaçtır $SYS/#, $whatever/#almak için her şeyi . Muhtemelen normal bir uygulama için bunu yapmak istemezsiniz.

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.