Když spotřebitel zprávu obdrží a zpracování je dokončeno, pošle ack s tímto identifikátorem zprávy, aby serveru oznámil, že zpráva byla přijata a zpracování dokončeno. RabbitMQ čeká, až se ztratí spojení spotřebitele zpracovávajícího zprávu, než zjistí, že zpráva nebyla správně zpracována, takže RabbitMQ zprávu znovu odešle. Potvrzení zprávy je ve výchozím nastavení vypnuté. Při inicializaci Consumera existuje parametr noAck,Pokud je nastaveno na true, spotřebitel vrátí ack hned, jak zprávu obdrží。
Obecně platí, že běžně používaný scénář noack je nastaven na true, ale pro projekty s vysokými rizikovými požadavky, jako je platba. U každého sdělení musíme zajistit jeho integritu a správnost. Po obdržení zprávy musíte potvrdit, že byla vykonána správná obchodní logika, a pak aktivně vrátit žádost o schválení serveru. Zprávy ve frontě můžete zobrazit přes příkaz rabbitmqctl list_queues jméno message_rady message_unacknowleded nebo přes rozhraní pro správu na pozadí.
Pokud je noAck nastaven na false, klient musí aktivně odeslat ack serveru, a pokud klient zprávu nepotvrdí, nastane následující situace:
Dokud program běží, těchto 10 zpráv zůstává nevyužitých a RabbitMQ je nemůže znovu doručit. Co je ještě silnější, je to, žeKonzumace zpráv v RabbitMQ nemá mechanismus pro časový limit, tedy pokud program není restartován, zpráva bude vždy ve stavu Unaced. Nezapomeňte na tyto neporušené státní zprávy při práci na operačních událostech.
Připraveno
Zprávy s tímto stavem existují ve frontě ke zpracování.
Neuznáno
Zpráva v tomto stavu znamená, že je již zpracovávána, ale není potvrzena.
Když je program uzavřen (pokud je Consumer uzavřen), těchto 10 zpráv se vrátí do stavu Připraveno.
Potvrzovací zpráva
Co když klient pošle serveru hlášení? Tedy potvrdit přijetí zprávy? Kód je následující:
Když je druhý parametr metody BasicAck, násobek, nastaven na nepravdivé, znamená to, že RabbitMQ je informován, že aktuální zpráva byla potvrzena.Pokud je to pravda, bude potvrzena další zpráva menší než dodací tag specifikovaný prvním parametrem。 (Hromadné potvrzení platí pro celý kanál)
Potvrzení zrušení
Co když má jeden z klientů distribuovaného programu výjimku a chce zrušit potvrzení zprávy a nechat jiným klientům zprávu zpracovat?
Když je v spotřební zprávě výjimka, musíme potvrzení zrušit a pak můžeme použít základní metodu Odmítnout – kanál.
První parametr určuje dodací tag a druhý parametr popisuje, jak tuto zprávu o selhání zpracovat.Hodnota pravda znamená, že zpráva je vrácena zpět do hlavičky fronty, a hodnota nepravda znamená, že zpráva je opuštěna。
|