2016-10-04 80 views
1

我試圖弄清楚如何在java中確認消息,但我還沒有理解它。
下面是官方RabbitMQ的例子:
http://hg.rabbitmq.com/rabbitmq-java-client/file/default/test/src/com/rabbitmq/examples/ConfirmDontLoseMessages.java如何使用Java確認RabbitMQ消息?

的問題是,他們使用10000個消息發送到隊列,之後纔是他們等待時,所有消息都將被證實。我需要發送1條消息,每個線程只發送一條消息並進行確認(在我的情況下,我有幾個平等的發佈者必須不時發送消息)。如何確認一條消息(不確認所有消息)?

我需要這樣的東西:

for (long i = 0; i < MSG_COUNT; ++i) { 
    ch.basicPublish("", QUEUE_NAME, 
        MessageProperties.PERSISTENT_BASIC, 
        "nop".getBytes()); 
    ch.wait_for_confirm(); 
    if(ch.isConfirmed){ 
     //OK 
    } 
    else{ 
     //Republish 
    } 
} 

回答

0

閱讀此篇:

http://www.rabbitmq.com/blog/2011/02/10/introducing-publisher-confirms/

總之你可以使用tx-transactions ch.txSelect(); for (int i = 0; i < MSG_COUNT; ++i) { ch.basicPublish("", QUEUE_NAME, MessageProperties.PERSISTENT_BASIC, "nop".getBytes()); ch.txCommit(); }

publish-confirmation處理程序:

ch.addConfirmListener(new ConfirmListener() {....}

第一個比第二個更容易但比第二個更慢。

0

你應該需要使用確認每個消息可以查看以下鏈接: https://www.rabbitmq.com/confirms.html

+0

一個解決方案的鏈接是值得歡迎的,但請確保你的答案是有用的,沒有它:[添加各地的聯繫上下文] (https://meta.stackexchange.com/a/8259),這樣你的同行用戶就會知道它是什麼以及它爲什麼存在,然後在目標頁面引用頁面中最相關的部分不可用。 [僅僅是一個鏈接的答案可能會被刪除](https://stackoverflow.com/help/deleted-answers)。 –

+0

感謝您的反饋#Sam Onela –