Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Подтверждение RabbitMQ #26

Closed
gosolivs opened this issue Apr 5, 2021 · 6 comments
Closed

Подтверждение RabbitMQ #26

gosolivs opened this issue Apr 5, 2021 · 6 comments

Comments

@gosolivs
Copy link
Member

gosolivs commented Apr 5, 2021

Может стоит добавить пример подтверждение обработки сообщений? Возможно и Nack.

https://github.com/evrone/go-service-template/blob/46ae5d6ed690206e6d1b8d13b1bb6e52c2cf76bb/pkg/rabbitmq/rmq_rpc/server/server.go#L74
https://github.com/evrone/go-service-template/blob/46ae5d6ed690206e6d1b8d13b1bb6e52c2cf76bb/pkg/rabbitmq/rmq_rpc/client/client.go#L170

@neprja
Copy link
Contributor

neprja commented Apr 6, 2021

Здесь я не совсем уверен что поступил правильно, но моя логика была следующей:
Я использую Кролик исключительно как транспорт. Вся бизнес-логика на стороне приложения. В RPC паттерне важен сам факт того что сообщение доставлено до сервера, если клиент не получит ответ более 2 секунд (по дефолту), запрос закончится ошибкой timeout и что дальше с этим делать решает бизнес-логика на стороне клиента.

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

Ack и Nack хорошо подходят для асинхронного взаимодействия, но на мой взгляд не очень применимы при синхронном (в RPC паттерне). Я могу ошибаться.

@gosolivs
Copy link
Member Author

gosolivs commented Apr 6, 2021

@akirill0v @FedotovMaxim, что думайте?

@akirill0v
Copy link
Member

На acknowledge базируется работа с RabbitMQ и без этого с сообщениями будет происходить беда. Лучше использовать механизм подтверждения доставки чтобы они не дублировались, не оставались в "Кролике" и не уходили в другие консьюмеры.

@neprja
Copy link
Contributor

neprja commented Apr 7, 2021

Так и есть, он используется. Тут вопрос скорее в том что Nack не используется)

@gosolivs
Copy link
Member Author

gosolivs commented Apr 7, 2021

Также можно autoAck в channel.Consume в true поставить. Чтобы вообще не писать Ack, раз он не нужен в этом месте.

@neprja
Copy link
Contributor

neprja commented Apr 7, 2021

Также можно autoAck в channel.Consume в true поставить. Чтобы вообще не писать Ack, раз он не нужен в этом месте.

Да, в текущий реализации это по сути autoAck, я его оставил явным на случай если захочется сделать свою более сложную логику.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants