Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 13505|Odpowiedź: 2

Stałe ustawienia subskrypcji ActiveMQ

[Skopiuj link]
Opublikowano 09.01.2017 11:12:10 | | |

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.




Poprzedni:Kanał VIP piątej generacji z biletami 360 pękł, szybko wejdź do kolejki VIP
Następny:. Platforma .Net
 Ziemianin| Opublikowano 09.01.2017 13:41:53 |
1 Porównanie cech technicznych kolejki i tematu
nazwa
Temat
Kolejka
Przegląd
Publikuj Subskrybuj wiadomości Publikuj wiadomości subskrypcyjne
Punkt-punkt punkt-punkt punkt-punkt
Nie ma żadnego stanu
Dane tematów są domyślnie bezstanowe.
Dane kolejki są domyślnie zapisywane jako plik na serwerze MQ, na przykład Active MQ jest zwykle przechowywany pod $AMQ_HOME\data\kr-store\data. Może być również skonfigurowany jako magazyn baz danych.
Gwarancja integralności
Nie ma gwarancji, że każdy fragment danych opublikowany przez wydawcę zostanie zaakceptowany przez subskrybenta.
Kolejka gwarantuje, że każdy fragment danych może zostać odebrany przez odbiorcę.
czy przekaz zostanie utracony
Ogólnie rzecz biorąc, gdy wydawca publikuje wiadomość do tematu, tylko subreddit słuchający adresu tematu może ją otrzymać. Jeśli nie ma suba, który nie słucha, temat ginie.
Nadawca wysyła wiadomość do docelowej kolejki, a odbiorca może odbierać wiadomości w tej kolejce asynchronicznie. Wiadomości w kolejce nie zostaną utracone, jeśli nie będzie odbiorcy, który mógłby je odebrać na razie.
Polityka odbioru komunikatów
Polityka publikowania i odbierania wiadomości jeden do wielu – wielu subskrybentów słuchających tego samego tematu może otrzymywać wiadomości wysyłane przez wydawcę. Sub otrzymuje powiadomienie do serwera mq
Polityki publikowania i odbierania wiadomości jeden do jednego, wiadomości wysyłane przez nadawcę mogą być odebrane tylko przez jednego odbiorcę. Po odebraniu przez odbiorcę, serwer MQ powiadamia serwer MQ o odebraniu, a serwer MQ usuwa lub podejmuje inne działania na wiadomościach w kolejce.

 Ziemianin| Opublikowano 09.01.2017 13:42:15 |
Największa różnica między tematem a kolejką polega na tym, że temat ma formę nadawania, powiadamiając wszystkich klientów słuchających online o nowej wiadomości, a klient bez monitorowania nie otrzyma tej wiadomości; Kolejka natomiast powiadamia jednego z wielu klientów słuchających w sposób peer-to-peer.

2 Porównanie efektywności przetwarzania wiadomości między metodami tematu i kolejki
        Zwiększając liczbę współbieżności klienta słuchającego, można zweryfikować, czy pchnięcie wiadomości tematu znacząco zmniejszy się ze względu na wzrost współbyżalności klienta słuchającego.
        Z mierzonych wyników wynika, że nie ma istotnej różnicy w efektywności wysyłania i odbierania wiadomości wysyłanych metodą tematyczną przy założeniu jednego abonenta i 100 abonentów, ale przy założeniu współbieżności 500 abonentów (wątków) różnica w efektywności jest oczywista (ze względu na współbieżność 500 wątków, wskaźnik wykorzystania CPU mojego komputera sięga nawet 70-90%, więc nie da się potwierdzić, czy jest to wąskie gardło wydajności spowodowane moim lokalnym testem, czy też ograniczenie wydajności w metodzie wysyłania wiadomości tematycznej, co skutkuje tak znaczącym spadkiem efektywności).
        Nie ma istotnej różnicy w efektywności wysyłania i odbierania wiadomości metodą tematyczną i trybem kolejki przy założeniu jednego abonenta i 100 abonentów, ale przy założeniu współbieżności 500 subskrybentów efektywność trybu tematycznego jest znacznie niższa niż w kolejce.
        Efektywność wysyłania i odbierania wiadomości w metodzie Queue nie zmienia się znacząco przy założeniu jednego abonenta, 100 i 500 subskrybentów.
Dane mierzone tematycznie:


Łączna liczba wiadomości wysłanych przez nadającego
Łączna liczba wiadomości otrzymanych przez wszystkich subskrybentów
Średni czas potrzebny na wysłanie i odbieranie wiadomości
Jednoosobowy subskrybent
100
100
101 ms
100 subskrybentów
100
10000
103 ms
500 subskrybentów
100
50000
14162 ms

Dane mierzone w kolejce:


Łączna liczba wiadomości wysłanych przez nadającego
Łączna liczba wiadomości otrzymanych przez wszystkich subskrybentów
Średni czas potrzebny na wysłanie i odbieranie wiadomości
Jednoosobowy subskrybent
100
100
96ms
100 subskrybentów
100
100
96ms
500 subskrybentów
100
100
100 ms

Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com