Blog HiveMQ wymienia pod „najlepszymi praktykami”, aby nie subskrybować wielopoziomowego symbolu wieloznacznego podczas próby zrzucenia wszystkich wiadomości do bazy danych. Twierdzą, że klient subskrybujący może nie być w stanie nadążyć za dużym obciążeniem wiadomości i proponują użycie wtyczki brokera do bezpośredniego połączenia się ze strumieniem wiadomości.
Czasami konieczne jest subskrybowanie wszystkich wiadomości przesyłanych przez brokera, na przykład podczas utrwalania ich wszystkich w bazie danych. Nie należy tego robić za pomocą klienta MQTT i subskrybowania wielopoziomowej karty wieloznacznej. Powodem jest to, że często subskrybujący klient nie jest w stanie przetworzyć obciążenia nadchodzących wiadomości. Zwłaszcza jeśli masz ogromną przepustowość. Naszym zalecanym rozwiązaniem jest wdrożenie rozszerzenia w brokerze MQTT, na przykład system wtyczek HiveMQ pozwala zaczepić się o zachowanie HiveMQ i dodać procedurę asynchroniczną do przetwarzania każdej przychodzącej wiadomości i utrwalania jej w bazie danych.
Czy tam też jest?
- podobny system (rozszerzenie / wtyczka) dla brokera komarów,
- inna zalecana metoda, która działa z komarem, lub
- uzasadnione dowody, że takie podejście jest w ogóle niepotrzebne, tj. że klient subskrybujący
#
może zrobić dobrze?
/programming//q/31584613/3984613 nie rozwiązuje w sposób wyczerpujący tego pytania.
Ta dyskusja na liście mailingowej openHAB wydaje się sugerować, że nie ma problemu z używaniem
#
jako subskrypcji do otrzymywania wszystkich wiadomości:To pytanie dotyczące przepełnienia stosu sugeruje również tę samą metodę:
Jak wskazał Bence Kaulics , specyfikacja zawiera
#
poprawne:Szczerze mówiąc, kwestionuję, czy pierwotne roszczenie naprawdę ma w ogóle sens:
Jeśli tak, to w jaki sposób pośrednik może w pierwszej kolejności obsługiwać wiadomości? Tak długo, jak twój klient ma podobną charakterystykę wydajności do brokera, mocno wątpię, że byłoby możliwe przytłoczenie klienta, ponieważ ten poziom ruchu również przytłoczy brokera i spowoduje jego awarię w pierwszej kolejności.
Podsumowując, twierdzenie HiveMQ nie wydaje się poparte wieloma dowodami z innych źródeł, a kiedy zastanowisz się, co to właściwie znaczy, nie wydaje się to szczególnie logiczne.
źródło
Myślę, że ważne jest, aby wziąć pod uwagę, że istnieje wiele różnych przypadków użycia dla brokerów MQTT, podobnie jak w przypadku każdego oprogramowania.
Obsługa wiadomości czatu dla miliarda użytkowników (wielu użytkowników, stosunkowo niski wskaźnik wiadomości na użytkownika) różni się od systemu z kilkoma klientami, ale z wysokim współczynnikiem wiadomości, i oba różnią się od systemu automatyki domowej (niewielu klientów, niski wskaźnik wiadomości) .
HiveMQ myśli o aplikacjach o bardzo wysokiej liczbie klientów / wiadomości - w takim przypadku możliwości brokera prawie na pewno znacznie przewyższają możliwości klienta.
Jeśli chcesz zasubskrybować
#
swój system automatyki domowej, to raczej nie spowoduje problemów. W każdym razie możesz sprawdzić, czy broker używa nadmiernego procesora.Podobnie jak w innych odpowiedziach, subskrybowanie
#
da ci wszystkie „normalne” tematy, czyli wszystko, co nie zaczyna się od$
. Interpretuję to jako powiedzenie, że każdy temat zaczynający się od$
jest osobnym drzewem, więc musisz się zapisać$SYS/#
,$whatever/#
aby uzyskać wszystko . Najprawdopodobniej i tak nie chcesz tego robić w przypadku normalnej aplikacji.źródło