Комментарии 6
Добрый день, позвольте вопрос.
Вы пишите:
Как вы решаете эту проблему, сажаете какой то timeout?
Вы пишите:
Другими словами, ваш сервис должен понимать, что ему могут не ответить никогда, если он ожидает каких-то данных. Таким образом, вы сразу должны исходить из ситуации, что что-то у вас может не работать.
Как вы решаете эту проблему, сажаете какой то timeout?
0
Извините, не понял ответ. Как связан message broker с возможностью не доставки ответа и тем как это должен разруливать сервис? Если ответ не придет, т.к. сервис например упал во время подготовки ответа, то как должен клиент разруливать эту ситуацию?
0
Здесь – «клиентом» вы называете отправителя, а «сервисом» получателя, я буду использовать соответственно Consumer и Producer, чтобы окончательно всех запутать.
Ну очевидно же :) Если брокер падает, то все переворачивается мехом наружу. Парочка примеров:
1. Producer отправил сообщение, а на брокере очередь не durable. Брокер лёг. Сообщение потерялось до отправки. Ответ не пришел.
2. Более интересный случай. Допустим, producer отправил сообщение, на брокере очередь durable, все хорошо. Брокер отправил сообщение. Consumer начал долгую обработку, ACK еще не отправил, и в этот момент брокер падает… Дальше возможны варианты по количеству (нет ответа, один ответ, два ответа) и правильности, потому что Consumer в любом случае получит два одинаковых сообщения. Второе он может не принимать к обработке, если это особо предусмотрено :)
Минимально – нужно выставить таймаут на Queue, при необходимости переопределить таймаут на Message, и обработать таймаут на Producer.
Как связан message broker с возможностью не доставки ответа и тем как это должен разруливать сервис?
Ну очевидно же :) Если брокер падает, то все переворачивается мехом наружу. Парочка примеров:
1. Producer отправил сообщение, а на брокере очередь не durable. Брокер лёг. Сообщение потерялось до отправки. Ответ не пришел.
2. Более интересный случай. Допустим, producer отправил сообщение, на брокере очередь durable, все хорошо. Брокер отправил сообщение. Consumer начал долгую обработку, ACK еще не отправил, и в этот момент брокер падает… Дальше возможны варианты по количеству (нет ответа, один ответ, два ответа) и правильности, потому что Consumer в любом случае получит два одинаковых сообщения. Второе он может не принимать к обработке, если это особо предусмотрено :)
Если ответ не придет, т.к. сервис например упал во время подготовки ответа, то как должен клиент разруливать эту ситуацию?
Минимально – нужно выставить таймаут на Queue, при необходимости переопределить таймаут на Message, и обработать таймаут на Producer.
0
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Microservices. Как правильно делать и когда применять?