Здравствуйте!
Использую ZeroMQ с паттерном PUSH-PULL для того, чтобы принимать запрос от клиента и моментально отдавать в браузер страничку об успешности операции, а в это время всю "тяжелую" работу передавать воркеру.
Выглядит это так. Клиент:
$pusher = new ZMQSocket($context, ZMQ::SOCKET_PUSH);
$pusher->bind("tcp://*:5557");
$pusher->send("My message", ZMQ::MODE_DONTWAIT);
Воркер:
$receiver = new ZMQSocket($context, ZMQ::SOCKET_PULL);
$receiver->connect("tcp://localhost:5557");
while (true) {
$string = $receiver->recv();
// ...
}
Проблема возникает в случае, если воркер падает. При этом клиент отправляет сообщение непонятно куда, а при повторном запуске воркер не получает этих сообщений.
Как быть в этой ситуации? Как правильно "буферизовать" сообщения, даже если воркер упал?
Заранее спасибо!