2016-05-23 6 views
0

最終的にメッセージをRabbitMQの交換に公開するイベントで実行される1つのresqueジョブがあります。メッセージが正常に公開されたかどうかをバニー(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ポリシーを持っていない、あなたはそれを実装する必要があります。

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:セクションStreaming Lightweight Publisher Confirmsを参照してくださいメッセージが交換の内部に、常にキュー内の「置く」ことはありません。

関連する問題