Pull to refresh

Comments 6

Добрый день, позвольте вопрос.

Вы пишите:
Другими словами, ваш сервис должен понимать, что ему могут не ответить никогда, если он ожидает каких-то данных. Таким образом, вы сразу должны исходить из ситуации, что что-то у вас может не работать.


Как вы решаете эту проблему, сажаете какой то timeout?
В принципе, для всего AMQP-based семейства подходы примерно похожи. Вот пример по надежной доставке в RabbitMQ – надеюсь, будет полезно.
Извините, не понял ответ. Как связан message broker с возможностью не доставки ответа и тем как это должен разруливать сервис? Если ответ не придет, т.к. сервис например упал во время подготовки ответа, то как должен клиент разруливать эту ситуацию?
Здесь – «клиентом» вы называете отправителя, а «сервисом» получателя, я буду использовать соответственно Consumer и Producer, чтобы окончательно всех запутать.

Как связан message broker с возможностью не доставки ответа и тем как это должен разруливать сервис?

Ну очевидно же :) Если брокер падает, то все переворачивается мехом наружу. Парочка примеров:

1. Producer отправил сообщение, а на брокере очередь не durable. Брокер лёг. Сообщение потерялось до отправки. Ответ не пришел.

2. Более интересный случай. Допустим, producer отправил сообщение, на брокере очередь durable, все хорошо. Брокер отправил сообщение. Consumer начал долгую обработку, ACK еще не отправил, и в этот момент брокер падает… Дальше возможны варианты по количеству (нет ответа, один ответ, два ответа) и правильности, потому что Consumer в любом случае получит два одинаковых сообщения. Второе он может не принимать к обработке, если это особо предусмотрено :)

Если ответ не придет, т.к. сервис например упал во время подготовки ответа, то как должен клиент разруливать эту ситуацию?

Минимально – нужно выставить таймаут на Queue, при необходимости переопределить таймаут на Message, и обработать таймаут на Producer.
Спасибо за ответ. Как работает Message brocker я знаю.

Судя по вашему ответу альтернативы timeoutу нет, я надеялся услышать про какой нибудь другой способ.

Спасибо еще раз.
Sign up to leave a comment.