Mamy brokera ActiveMQ, który jest podłączony do bardzo różnych klientów przy użyciu JMS, AMQP i MQTT. Z jakiegoś powodu nie odkryliśmy jeszcze, że określony zestaw klientów MQTT często (nie zawsze) subskrybuje trwale. Jest to środowisko testowe, w którym klienci są często dodawani i usuwani, czasem przez ciągnięcie wtyczki lub ponowne uruchamianie wbudowanego urządzenia, aby nie mogli poprawnie zrezygnować z subskrypcji. Efektem (IIUC) jest to, że broker gromadzi "trwałą subskrypcję offline" dla urządzeń, których nigdy już nie zobaczy (widzę to pod http://my_broker:8161/admin/subscribers.jsp), utrzymując wiadomości na te tematy na zawsze, aż w końcu zepsuje się pod własnym śladem pamięci .Jak zmusić mojego brokera ActiveMQ do przerwania trwałych abonentów w trybie offline
Problem polega na tym, że subskrybenci subskrybują na stałe, i musimy się dowiedzieć, dlaczego tak jest. Jednak zdecydowano również, że klienci robiący to (nieświadomie) nie powinni doprowadzić do zatrzymania brokera, więc musimy rozwiązać ten problem w sposób niezależny.
znalazłem there are settings for a timeout for offline durable subscriptions i umieścić te w naszej konfiguracji brokera (ostatnie dwie linie):
<broker
xmlns="http://activemq.apache.org/schema/core"
brokerName="my_broker"
dataDirectory="${activemq.data}"
useJmx="true"
advisorySupport="false"
persistent="false"
offlineDurableSubscriberTimeout="1800000"
offlineDurableSubscriberTaskSchedule="60000">
Jeśli dobrze rozumiem, powyższe należy sprawdzić każdą minutę i odwoływania klientów nie widział na pół godzina. Jednak, w przeciwieństwie do dokumentów, nie wydaje się to działać: Konsument, którego subskrybowałem, a następnie wyciągnąłem wtyczkę kilka dni temu jest nadal widoczny na liście abonentów o trwałym dostępie offline, ślad pamięci brokera stale rośnie, a jeśli ręcznie usuwaj subskrybentów w interfejsie internetowym brokera Widzę, że ślad pamięci spada.
Więc oto moje pytania:
- Co decyduje czy abonament MQTT do tematu na brokera ActiveMQ jest trwały?
- Co robię źle w ustawianiu limitu czasu dla trwałych subskrypcji w trybie offline w ustawieniach ActiveMQ?
Próbowałeś na odwrót, poprzez publikowanie wiadomości z krótkim okresie TTL (czas życia) i konfigurując krótki ** expireMessagesPeriod **? Zgodnie z dokumentami, przy takiej konfiguracji system musi usuwać wszystkie takie wiadomości po upływie okresu TTL, nieistotny dla długo utraconych stałych abonentów (którzy nie zrezygnowali z subskrypcji).To powinno nam również pomóc w uwolnieniu zasobów pamięci, ponieważ rzeczywiste zużycie pamięci polega na przechowywaniu "wiadomości", a nie na przechowywaniu samych obiektów subskrybentów. – blackpen