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 не будет доступен для получения ответа, но повышает его вероятность.

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

Другие вопросы по тегам