Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 26359|Ответ: 2

Глубокий анализ механизма отклика на сообщения RabbitMQ

[Скопировать ссылку]
Опубликовано 30.03.2018 10:42:59 | | | |


Когда пользователь получает сообщение и задача обработки завершена, он отправляет ack с этим идентификатором сообщения, чтобы сообщить серверу, что сообщение получено и обработка завершена. RabbitMQ ждёт, пока ссылка потребителя, обрабатывающего сообщение, не будет потеряна, прежде чем определить, что сообщение было обработано неправильно, поэтому RabbitMQ передаёт сообщение повторно.
Подтверждение сообщения по умолчанию отключено. При инициализации Consumer, есть параметр noAck,Если установлен true, пользователь сразу же вернёт ACK после получения сообщения


В целом, часто используемый сценарий noack обычно устанавливается как true, но для проектов с высокими рисками, такими как оплата. Для каждого сообщения нужно обеспечивать его целостность и корректность. После получения сообщения нужно убедиться, что выполнена правильная бизнес-логика, а затем активно возвращать ack на сервер. Вы можете просматривать сообщения в очереди через команду rabbitmqctl list_queues name message_rady message_unacknowleded или через интерфейс управления фоном.

Если noAck установлен как false, клиент должен активно отправить ack серверу, и если клиент не подтвердит сообщение, возникает следующая ситуация:



Пока программа продолжает работать, эти 10 сообщений остаются недоступными и не могут быть повторно доставлены RabbitMQ. Что ещё сильнее —Потребление сообщений в RabbitMQ не имеет механизма тайм-аута, то есть если программа не перезапущена, сообщение всегда будет в состоянии Unacked. Не забывайте об этих незащищённых сообщениях состояния при работе с событиями операций.

Готовы

Сообщения с таким статусом находятся в очереди для обработки.

Не признано

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




Когда программа закрыта (пока Потребитель закрыт), эти 10 сообщений возвращаются в состояние Ready.


Сообщение подтверждения

Что если клиент отправит 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