2015-04-20 2 views
0

В настоящее время у меня есть система, в которой приложения пингуют друг друга, чтобы проверить, что они все еще живы. У меня есть 1 клиент, который отправляет запросы, 1 маршрутизатор, который их распределяет, и 2 работника, которые выполняют работу и возвращают результаты.Есть ли способ вернуть любые неотправленные сообщения в zeromq?

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

Это чат-приложение, поэтому кто-то отправит сообщение, это пойдет в порт дилера клиента. Дилер вдруг пойдёт «waaah router's dead!» и отправьте сообщение вместе с ошибкой, чтобы сказать, что система в данный момент недоступна. Таким образом, если катастрофические удары, пользователи узнают, что система выключена и перестает отправлять сообщения, пока они не вернутся.

Есть ли способ сделать это? Правильно ли я говорю, что знак высокой воды знает внутри, сколько сообщений в настоящее время не отправлено, и, может быть, я мог бы использовать какую-то функцию, чтобы вернуть все очереди в нуль mq?

Большое спасибо

ответ

0

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

Несоблюдение этого, единственное, что мне удалось найти, - это либо обработать кэширование самостоятельно, либо использовать другую платформу обмена сообщениями (rabbitmq, activemq). Требования к памяти сами по себе беспокоили меня слишком много, чтобы рассматривать их, однако, лично.

1

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

Смежные вопросы