2016-05-23 3 views
0

У меня есть одна задача resque, которая запускается на каком-то мероприятии, которое, наконец, публикует сообщение для обмена RabbitMQ, как я могу проверить кролика (клиента Rabbit MQ ruby), чтобы сообщение было успешно опубликовано?проверить статус RabbitMQ, опубликовано ли сообщение?

Использование подтверждения или любого способа?

Заранее благодарен!

ответ

0

Как только метод publish вернется, сообщение опубликовано в очередь. Публикация сообщения не отложено.

+0

Когда вы вызываете метод 'publish', он помещает его в обмен, мой вопрос в том, что, если сервер MQ кролика не работает, и моя задача resque не может публиковать, как повторно публиковать/повторять? см. этот раздел ** Как сообщение признается в отношении транзакций и издателя Подтверждает ** ссылки http://rubybunny.info/articles/queues.html#message_acknowledgements, Он говорит, что если S1 не работает, это то, что я ищу для решения , – kamal

1

Когда вы выполняете команду publish, вы не уверены, что сообщение опубликовано в очереди.

Если вы хотите быть уверены, что вам нужно использовать, вы должны использовать publish confirm или tx transaction.

прочитать этот пост http://www.rabbitmq.com/blog/2011/02/10/introducing-publisher-confirms/

Примечание: По умолчанию клиенты не имеют какой-либо политики HA, вы должны реализовать. Смотрите раздел Streaming Lightweight Publisher Confirms:

private volatile SortedSet<Long> unconfirmedSet = 

    Collections.synchronizedSortedSet(new TreeSet()); 

... 

ch.setConfirmListener(new ConfirmListener() { 
    public void handleAck(long seqNo, boolean multiple) { 
     if (multiple) { 
      unconfirmedSet.headSet(seqNo+1).clear(); 
     } else { 
      unconfirmedSet.remove(seqNo); 
     } 
    } 
    public void handleNack(long seqNo, boolean multiple) { 
     // handle the lost messages somehow 
    } 
}); 

Примечание 2: сообщение никогда не «положить» в обмен, но всегда внутри очереди.

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