Stałe ustawienia subskrypcji ActiveMQ Ustawiając tryb TRWAŁEJ dostawy dla wydawcy, możesz korzystać z trwałych subskrypcji dla subskrybentów, co gwarantuje, że program Pub/Sub otrzymuje wszystkie opublikowane wiadomości. Subskrypcje wiadomości dzielą się na subskrypcje nietrwałe i trwałe, a subskrypcje nietrwałe mogą otrzymywać wiadomości wysyłane do tematu tylko wtedy, gdy klient jest aktywny, czyli gdy klient jest offline, wiadomości wysłane do tematu w tym okresie zostaną utracone i nigdy nie zostaną odebrane. Gdy klient jest offline, ActiveMQ zapisuje wszystkie wiadomości wysyłane do podmiotu według jego ID, a gdy klient ponownie łączy się z ActiveMQ, otrzymuje wszystkie wiadomości wysyłane do podmiotu, gdy jest offline. Subskrypcje trwałe zwiększają koszty i mają tylko jednego aktywnego użytkownika w subskrypcji trwałej w danym momencie. Kroki dotyczące ustanowienia trwałej subskrypcji: 1. Ustawić identyfikator klienta dla połączenia; 2. Określ nazwę subskrypcji dla tematu subskrypcji; Powyższa kombinacja musi być unikalna. Kod implementuje trwałe subskrypcje
(1) Podczas korzystania z kolejki, czyli podczas kolejki, na wiadomość jest tylko jeden konsument, więc trwałość jest bardzo prosta – wystarczy zapisać ją w bazie danych
。 Następnie każdy konsument może go odebrać i wyrzucić. Nie ma znaczenia, jeśli konsument wyłączy go na jakiś czas.
(2) Przy użyciu tematu, czyli przy subskrypcji, każda wiadomość może mieć wielu odbiorców, co jest bardziej uciążliwe.
Po pierwsze, zakładając, że konsumenci są zwykłymi konsumentami, ------------------------ Po uruchomieniu <1> activemq pojawiła się wiadomość 1, ale niestety obecnie nie zaczynają konsumenci, czyli nie subskrybują już żadnych konsumentów. Więc
, wiadomości zostały porzucone.
<2> Konsument 1 się uruchomił, połączył z activemq, zasubskrybował i czekał na wiadomość~~
ActiveMQ publikuje wiadomość 2, OK, konsument 1 ją odbiera i przetwarza. Porzucenie wiadomości.
<3> Consumer 2 również został uruchomiony, połączony z activemq, subskrybowany i czeka na wiadomość~~
ActiveMQ publikuje wiadomość 3, OK, konsument 1, konsument 2 – wszystkie zostały odebrane i przetworzone. Porzucenie wiadomości.
<4> Konsument 1 jest wyłączony.
ActiveMQ publikuje wiadomość 4, OK, konsument 2 ją odbiera i przetwarza. Porzucenie wiadomości.
<5> Konsument 1 zaczął się od nowa.
ActiveMQ publikuje wiadomości 5, OK, konsument 1 i konsument 2, które wszystkie odbierają i przetwarzają. Porzucenie wiadomości. ----------------------------- Podsumowując: ActiveMQ po prostu wysyła wiadomości do obecnie uruchomionego konsumenta. Konsumenci, którzy się wyłączą, przegapią wiele wiadomości i nie będą mogli ich ponownie odbierać.
Jeśli wysłana wiadomość jest ważna do synchronizacji użytkownika i ją pominą, dane użytkownika nie są synchronizowane.
Jak więc sprawić, by konsumenci otrzymywali nieodebrane wiadomości po wznowieniu?
Odpowiedzią jest trwała subskrypcja. -----------------------------
Zwykłe subskrypcje, bez rozróżniania konsumentów, jeśli w miejscu jest kilka gości, rzucają kilka gotowanych bułeczek. W przypadku subskrypcji trwałych musisz zapisać nazwisko konsumenta. Zhang San powiedział: Jestem Zhang San, mam dla mnie gotowane bułeczki, wrócę po nie. Li Si powiedział: Jestem Li Si, mam gotowe bułeczki, wrócę po nie. activemq zapisał nazwiska Zhang Sana i Li Si.
Następnie, dzieląc bułeczki na parze, jedna głowa nadal daje bułeczkę gotowaną na parze. Po podziałie, gdy zobaczył, że Zhang San nie mówi, oznaczało to, że go tam nie ma, więc zostaw mu jedną. Li Si odezwała się, więc nie było potrzeby zostawać.
Zhang San wrócił, szukał aktywnego i spojrzał, to nie jest Zhang San, przynieś szybko jego gotowane bułeczki. Może to być jedna gotowana na parze bułeczka albo 100 bułeczek na parze, zależy, ile bułeczek Zhang San podzielił od czasu, gdy na jakiś czas wyjechał.
activemq rozróżnia konsumentów na podstawie clientID i nazwy subskrybenta. ----------------------------- Stwórz połączenie connection = connectionFactory.createConnection(); connection.setClientID("bbb"); Subskrypcje trwałe wymagają ustawienia tego ustawienia. connection.start();
Stwórz sesję Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
Stwórz miejsce docelowe Temat = session.createTopic("userSyncTopic"); Nazwa tematu
MessageConsumer consumer = session.createConsumer(temat); Regularna subskrypcja MessageConsumer consumer = session.createDurableSubscriber(topic,"bbb"); Subskrypcje trwałe
Kolejną kwestią jest to, że producent wiadomości używa trybu trwałego podczas wysyłania wiadomości MessageProducer producer = ...; producer.setDeliveryMode(DeliveryMode.PERSISTENT); Jeśli nie, to domyślnie jest trwały
(5) Jeśli użyte jest to samo "clientID", uważa się to za tego samego konsumenta. Jeśli dwa programy używają tego samego "clientID", tylko jeden może jednocześnie połączyć się z activemq, a drugie połączenie zgłosi błąd.
(6) Ustawienia activemq są w conf/activemq.xml, a domyślne wiadomości są zapisywane w data/kahadb i nie zostaną utracone podczas ponownego uruchomienia activemq.
Możesz uzyskać dostęp http://localhost:8161/admin/index.jsp: przeglądać informacje o aktualnych kolejkach, tematach i stałych subskrybentach, wysyłać wiadomości i nie tylko.
Możesz skopiować zawartość w activemq-jdbc.xml i ją zmodyfikować, a wiadomość zapisać w innych bazach danych. |