Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 26359|Отговор: 2

Задълбочен анализ на механизма на отговор на съобщенията в RabbitMQ

[Копирай линк]
Публикувано в 30.03.2018 г. 10:42:59 ч. | | | |


Когато потребителят получи съобщението и задачата за обработка приключи, той изпраща ack с този идентификатор на съобщението, за да уведоми сървъра, че съобщението е получено и обработката е завършена. RabbitMQ изчаква, докато връзката на потребителя, обработващ съобщение, бъде загубена, преди да установи, че съобщението не е обработено правилно, затова RabbitMQ го препредава.
Потвърждението на съобщението е изключено по подразбиране. Съществува параметър noAck при инициализация на Consumer,Ако е настроено на true, потребителят ще върне ack веднага щом получи съобщението


Общо взето, често използваният сценарий noack обикновено е настроен на true, но за проекти с високи рискови изисквания, като плащане. За всяко съобщение трябва да гарантираме неговата почтеност и коректност. След като получите съобщението, трябва да потвърдите, че е изпълнена правилната бизнес логика, и след това активно да върнете ack към сървъра. Можете да видите съобщенията в опашката чрез командата rabbitmqctl list_queues име message_rady message_unacknowleded или чрез интерфейса за управление на фона.

Ако noAck е настроен на false, клиентът трябва активно да изпрати ack към сървъра, а ако клиентът не потвърди съобщението, ще възникне следната ситуация:



Докато програмата все още работи, тези 10 съобщения остават неактивирани и не могат да бъдат предоставени от RabbitMQ. Още по-силно е, чеКонсумацията на съобщения в RabbitMQ няма механизъм за тайм-аут, тоест, ако програмата не се рестартира, съобщението винаги ще бъде в състояние Unacked. Не забравяйте тези съобщения за състояние без атак, когато работите по оперативни събития.

Готов ли съм

Съобщения с този статус съществуват в опашката за обработка.

Непризнато

Съобщение в този статус показва, че вече се обработва, но не се потвърждава.




Когато програмата е затворена (докато потребителят е затворен), тези 10 съобщения се връщат в състояние Готовност.


Съобщение за потвърждение

Ами ако клиентът изпрати ack към сървъра? Тоест, потвърди получаването на съобщението? Кодът е следният:


Когато вторият параметър на метода BasicAck, кратен, е зададен на false, това означава, че RabbitMQ получава известие, че текущото съобщение е потвърдено.Ако е вярно, допълнително съобщение, по-малко от тага за доставка, зададен от първия параметър, ще бъде признато。 (Масовото потвърждение е за целия канал)

Потвърждение за отмяна

Ами ако някой от клиентите на разпределената програма има изключение и иска да анулира потвърждението на съобщението и да остави други клиенти да го обработят?

Когато има изключение в съобщението за потребление, трябва да отменим потвърждението и тогава можем да използваме метода basicReject на Channel.

Първият параметър определя етикета за доставка, а вторият параметър описва как да се обработи това съобщение за провал.Стойност на true означава, че съобщението се поставя обратно в заглавието на опашката, а стойността на false означава, че съобщението е изоставено




Предишен:Ще те науча как да настроиш собствен DNS сървър!
Следващ:Baidu Maps за получаване на координати на града
Публикувано в 22.09.2021 г. 20:49:04 ч. |
Научи се да учиш...
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com