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

Widok: 44647|Odpowiedź: 8

[WinForm] rabbitMQ Kolejka Kolejka Trwałość Wiadomości [z kodem źródłowym]

[Skopiuj link]
Opublikowano 09.04.2018 10:23:21 | | | |
Domyślnie wiadomości kolejki rabbitMQ nie są utrzymywane na dysku twardym, co oznacza, że po ponownym uruchomieniu usługi rabbitMQ wiadomości zostaną utracone.

Utrzymywanie kolejek

Na przykład identyfikacja trwałości kolejki jest identyfikowanadurableis ustawiony na true, co oznacza, że jest to kolejka trwała, a po wznowieniu usługi również będzie istnieć, ponieważ usługa przechowuje kolejkę na dysku twardym, a po jej wznowieniu ponownie ustanawia to, co było wcześniej utrzymane w kolejce. Kolejka może być utrzymana, ale to, czy wiadomości w niej są trwałe, zależy od ustawień trwałości wiadomości. Innymi słowy, jeśli przed ponownym uruchomieniem nie wysłano żadnej wiadomości w kolejce, to czy oryginalna wiadomość nadal istnieje w kolejce po ponownym uruchomieniu, zależy od ustawień wiadomości, które pojawiły się w momencie wysłania wiadomości.
Jeśli chcesz, aby wiadomości trwały po wznowieniu, musisz ustawić tożsamość, że wiadomość jest trwała.

Ustaw trwałość kolejki:




Czwarty parametr metody, autoDelete, zwykle jest wpisywany jako false. Dokumentacja opisuje ten parametr, jeśli jest prawdziwy, co oznacza, że jeśli kolejka nie jest już używana (nie jest subskrybowana), serwer ją usunie. Podczas moich testów, dopóki wszyscy odbiorcy kolejki zmiany połączenia są odłączeni, kolejka jest usuwana, nawet jeśli nadal są w niej nieprzetworzone wiadomości. Restarty RabbitMQ również je usuną. Jeśli zostanie wprowadzony fałszywy wpis, usługa nie usunie kolejki, a wiadomości w kolejce będą istnieć, jeśli wszyscy klienci do niej podłączoni zostaną rozłączeni. Nadawca może także umieszczać wiadomości w kolejce zmian, gdy nie ma połączenia z klientem, a gdy klient się pojawi, otrzyma te wiadomości. Jednak jeśli usługa RabbitMQ zostanie zrestartowana, kolejka zniknie, a komunikaty w niej naturalnie znikną.

Trzeci parametr jest wyłączny, a dokumentacja stwierdza, że jeśli jest prawdziwe, połączenie kolejki zostaje przerwane, a kolejka jest usuwana, włącznie z komunikatami w środku.

Drugi parametr, trwały, jest opisany w dokumentacji jako mówiący, że jeśli jest prawdziwy, reprezentuje trwałą kolejkę, która będzie istnieć także po wznowieniu usługi. Ponieważ usługa przechowuje trwałą kolejkę na dysku twardym, a po jej ponownym uruchomieniu potwierdzi tę kolejkę. Oczywiście, musi tak być, gdy zarówno autoDelete, jak i exclusive są fałszywe. Kolejka może być utrzymana, ale to, czy wiadomości w niej są trwałe, zależy od ustawień trwałości wiadomości. Innymi słowy, jeśli wiadomości nadal są wysyłane w kolejce przed restartem, to czy oryginalna wiadomość nadal istnieje w kolejce po wznowieniu, zależy od ustawień nadawcy dla wiadomości podczas jej wysyłania.


Po modyfikacji kodu próbujemy go uruchomić, a błąd będzie następujący:

Nieobsługiwany wyjątek: RabbitMQ.Client.Exceptions.OperationInterruptedException: Operacja AMQP została przerwana: AMQP close-reason, inicjowana przez Peer, code=406, text="PRECONDITION_FAILED - nierównoważny arg 'durable' dla kolejki 'hello' w hostie 'myserver': otrzymane 'true', ale current is 'false'", classId=50, methodId=10, cause=



Ponieważ zdefiniowaliśmy kolejkę bez trwałości o nazwie hello. RabbitMQ nie pozwala na redefiniowanie istniejących kolejek z innymi ustawieniami parametrów.

Istnieją dwa rozwiązania:

1: Ponownie zadeklarować kolejkę pod inną nazwą, na przykład my_queue
2: Usuń zdefiniowaną kolejkę "hello" z adresem http://localhost:15672 i zaloguj się za pomocą nazwy użytkownika i hasła. Domyślne hasło i nazwa użytkownika RabbitMQ to gościnne. Kliknij kolumnę "kolejka", aby zobaczyć listę kolejek, kliknij na kolejkę "hello", aby rozwinąć szczegóły kolejki. Przeciągnij stronę na koniec, jest tam element "Usuść", kliknij go, kliknij przycisk "Usuń kolejkę" i możesz usunąć kolejkę. Następnie, gdy kod jest uruchamiany, tworzona jest kolejka powitań wspierająca trwałość.



Utrzymywanie wiadomości

Jeśli chcesz, aby wiadomość pozostała trwała po wznowieniu, musisz ustawić ją na trwałość. Ustawienie to moment, gdy nadawca go wysyła, co jest stosunkowo proste, a kod wygląda następująco:


DeliveryMode domyślnie ustawia się na 1, nietrwały, a ustawienie na 2 oznacza, że wiadomość jest trwała

Po modyfikacji kodu staramy się otwierać program Producer tylko do wysyłania wiadomości, a następnie restartować usługę rabbitMQ, ponownie otworzyć konsumenta i okazuje się, że komunikat nie został utracony.

(Koniec)

Załączony jest kod źródłowy C#:

Turyści, jeśli chcecie zobaczyć ukrytą zawartość tego wpisu, proszęOdpowiedź





Poprzedni:Wiadomość wyjątku: "StrongTypingException: IsPrima...
Następny:Wprowadzenie do delegatów C# (delegate, Action, Func, predykat)
Opublikowano 09.04.2018 13:17:51 |
Naucz się uczyć
Opublikowano 25.06.2019 23:22:47 |
Naucz się uczyć
Opublikowano 29.06.2019 09:36:23 |
Dlaczego nie widziałem dema, muszę odpowiedzieć, żeby je zobaczyć
Opublikowano 09.07.2019 17:34:42 |
Chcę kod źródłowy w C#
Opublikowano 24.07.2019 14:21:51 |
Jest dobra, dokładnie tego potrzebuję
Opublikowano 11.04.2020 14:34:54 |
Naucz się go
Opublikowano 01.01.2022 14:45:24 |
1111111111111111
 Ziemianin| Opublikowano 03.05.2023 22:12:22 |
Parametry kolejki RabbitMQ i ich znaczenia


/**
* Skonstruuj nową kolejkę, nadajesz nazwę, flagę wytrzymałości, flagę automatycznego usuwania oraz argumenty.
* @param nazwać nazwę kolejki – nie może być null; Ustaw na "", aby broker wygenerował nazwę.
* @param trwała prawdziwość, jeśli deklarujemy trwałą kolejkę (kolejka przetrwa restart serwera)
* @param wyłącznie prawdziwe, jeśli deklarujemy kolejkę wyłączną (kolejka będzie używana tylko przez deklarującego
* połączenie)
* @param autoDelete true, jeśli serwer usunie kolejkę, gdy nie jest już używana
* @param argumenty argumentów użytych do deklaracji kolejki
*/
public Queue(String name, boolean durable, boolean exclive, boolean autoDelete, Map<String, Object> argumenty) {
   Assert.notNull(name, "'name' cannot be null");
   this.name = imię;
   this.actualName = StringUtils.hasText(name) ? Nazwa
         : (Base64UrlNamingStrategy.DEFAULT.generateName() + "_awaiting_declaration");
   this.durable = durable;
   this.exclusive = ekskluzywny;
   this.autoDelete = autoDelete;
   this.arguments = argumenty != null ? argumenty: nowy HashMap<>();
}

Wprowadzenie do parametrów:
1. nazwa: nazwa kolejki;
2. rzeczywista nazwa: Rzeczywista nazwa kolejki, parametr nazwy, jest używany domyślnie, jeśli nazwa jest pusta, generuje się ją zgodnie z regułami;
3. trwały: czy jest trwały;
4. Wyłączność: czy jest wyłączna, czy wyłączna;
5. automatyczne usuwanie: czy usunąć automatycznie;
6. Argumenty: Inne parametry atrybutów kolejki mają następujące opcje, patrz Argumenty na Rysunku 2:
(1) x-message-ttl: czas wygaśnięcia wiadomości, w milisekundach;
(2) x-wygasa: czas wygaśnięcia kolejki, jak długo kolejka będzie usuwana, jeśli nie zostanie do niej dostępna, jednostka: milisekundy;
(3) x-max-długość: maksymalna długość kolejki, jeśli przekroczy maksymalną wartość, wiadomość zostanie usunięta z nagłówka kolejki;
(4) x-max-długość-bajtów: zawartość wiadomości kolejki zajmuje maksymalną przestrzeń, ograniczoną przez rozmiar pamięci, a jeśli przekroczy ten próg, wiadomość zostanie usunięta z nagłówka kolejki;
(5) x-overflow: Ustaw zachowanie przelewu kolejki. To określa, co dzieje się z wiadomością po osiągnięciu maksymalnej długości kolejki. Poprawne wartości to drop-head, reject-publish lub reject-publish-dlx. Typy kolejek quorum obsługują tylko drophead;
(6) x-dead-letter-exchange: nazwa wymiany dead-letter oraz wiadomości, które wygasły lub zostały usunięte (z powodu długiej kolejki lub przestrzeni przekraczającej próg), mogą być określone do wysłania do centrali;
(7) klucz routingowy x-dead-letter-routing-key: Klucz routingu wiadomości martwej litery, który zostanie użyty podczas wysyłania wiadomości do wymiennika martwych liter; jeśli nie jest ustawiony, zostanie użyta oryginalna wartość klucza routingu wiadomości
(8) X-Single-Active-Consumer: wskazuje, czy kolejka jest pojedynczym aktywnym konsumentem; jeśli jest to prawda, tylko jeden konsument z zarejestrowanej grupy konsumentów konsumuje wiadomości, pozostali są ignorowani, a fałszywe, gdy wiadomość jest dystrybuowana do wszystkich konsumentów w pętli (domyślnie fałszywe)
(9) x-max-priorytet: maksymalna liczba priorytetów obsługiwanych przez kolejkę; Jeśli nie jest ustawiona, kolejka nie będzie obsługiwać priorytetu wiadomości;
(10) tryb x-queue (Lazy mode): Ustaw kolejkę na tryb opóźnienia, zachowaj jak najwięcej wiadomości na dysku, aby zmniejszyć zużycie RAM; Jeśli nie jest ustawiona, kolejka będzie przechowywać pamięć podręczną, aby przekazywać wiadomości jak najszybciej;
(11) x-queue-master-locator: Ustaw informacje o węźle głównym kolejki lustrzanego w trybie klastra.


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