Mam pewne problemy ze zrozumieniem potwierdzić z RabbitMQ, widzę następujące wyjaśnienia od RabbitMQ:Zachowanie kanałów w trybie „Potwierdź” z RabbitMQ
Uwagi
Broker traci uporczywe wiadomości, jeśli ulega awarii, zanim te wiadomości zostaną zapisane na dysku. Pod pewnymi warunkami powoduje to, że broker zachowuje się w zaskakujący sposób. Na przykład, rozważmy tę scenariusz:
klient publikuje uporczywy wiadomość do trwałego kolejce
klient zużywa się komunikat z kolejki (zauważyć, że wiadomość jest trwała i kolejka trwałe) , ale nie ma jeszcze ack go
broker umiera i zostaje wznowiona i
klient łączy się ponownie i rozpoczyna wiadomości pracochłonne.
W tym momencie klient mógł zasadnie przyjąć, że wiadomość zostanie ponownie wydana. Tak nie jest: ponowne uruchomienie spowodowało, że broker utracił wiadomość. Aby zagwarantować trwałość, klient powinien używać potwierdzeń. Jeśli kanał wydawcy był w trybie potwierdzania, , wydawca nie otrzymał potwierdzenia utraty zgubionej wiadomości (ponieważ konsument nie potwierdził jej i nie został zapisany na dysku).
Następnie Używam tego http://hg.rabbitmq.com/rabbitmq-java-client/file/default/test/src/com/rabbitmq/examples/ConfirmDontLoseMessages.java zrobić jakieś podstawowe badania i weryfikacji potwierdzają, ale trochę dziwne wyniki:
- Sposób waitForConfirmsOrDie nie blokują producenta, który różni się od moich oczekiwań Przypuszczam, że waitForConfirmsOrDie zablokuje producenta, dopóki wszystkie wiadomości nie zostaną potwierdzone lub jeden z nich zostanie nack'd.
- Usuwam channel.confirmSelect() i channel.waitForConfirmsOrDie() od wydawcy, i zmieniam konsumenta z automatycznego potwierdzenia na ręczny ack, publikuję wszystkie wiadomości do kolejki i odbieram komunikaty jeden po drugim, a następnie zatrzymuję rabbitmq serwer podczas procesu konsumowania, czego oczekuję teraz, to, że lewe wiadomości zostaną utracone po ponownym uruchomieniu serwera rabbitmq, ponieważ kanał nie jest w trybie potwierdzania, ale nadal widzę wszystkie pozostałe wiadomości w kolejce po restarcie serwera.
Od kiedy jestem nowy w RabbitMQ, czy ktoś może mi powiedzieć, gdzie jest mój problem z potwierdzeniem zrozumienia?