ZeroMQ REQ-REP: проверка того, что ответы прошли
В документации ZeroMQ для сокета REP говорится:
Если исходный запросчик больше не существует, ответ молча отбрасывается.
В моем проекте я хотел бы иметь некоторый способ узнать, что сущность, которая сделала первоначальный запрос, больше не присутствует и ожидает ответа. Другими словами, я бы хотел, чтобы была выдана ошибка, если ответ будет отклонен.
Возможна ли такая вещь, или я должен использовать какой-то отдельный канал для проверки запроса или какого-либо ACK при получении ответа?
1 ответ
Вы должны использовать отдельный канал для отслеживания запрашивающей стороны, так как сокеты zmq не могут этого знать.
Для этой цели вы можете использовать сокеты запроса / ответа в обратном порядке, но у вас могут возникнуть проблемы с производительностью, потому что по сути вы будете делать еще один запрос / ответ, прежде чем ответить.
Entity1 Entity2
Request -------------- Reply
Reply -------------- Request
и поток связи будет
Entity1 --------> request -----> Entity2
Entity1 <------- request <----- Entity2
Entity1 -------- reply ------> Entity2
Entity1 <------- reply ------- Entity2
Это в настоящее время обеспечивает гарантию того, что Entity1 не будет доступен для получения ответа, но повышает его вероятность.
Однако может быть плохой идеей запросить состояние запрашивающего, чтобы быть известным ответчику.