2016-03-17 2 views
0

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

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

+0

Является ли [auto-delete] (https://www.rabbitmq.com/amqp-0-9-1-reference.html#queue.declare.auto-delete) флаг очереди подходящим для ваших нужд? – pinepain

+0

@pinepain Нет, на самом деле, автоматическое удаление удалит очередь, когда клиент отключится, но клиент не знает, когда отключиться и будет оставаться на связи. – Magnus

ответ

0

Когда последнее сообщение получено, клиент должен уничтожить очередь ответов.

моя первая реакция, «почему?»

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

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

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

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

Любой из этих (и, вероятно, многих других вариантов) будет работать нормально.

+0

Чтобы ответить на ваш вопрос «почему?», Так как этот вызов RPC будет производиться только при первом запуске клиента, после этого он получит данные, полученные из обмена разветвлением. Там не будет больше звонков, поэтому нет никакой причины держать очередь в живых. – Magnus

+0

я вижу. это кажется разумным делом, тогда! –

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