如何用Java确认RabbitMQ消息?

时间:2016-10-04 09:34:50

标签: java queue rabbitmq client confirmation

我试图弄清楚如何在java中确认消息,但我还没有理解它 这是官方的RabbitMQ示例:
http://hg.rabbitmq.com/rabbitmq-java-client/file/default/test/src/com/rabbitmq/examples/ConfirmDontLoseMessages.java

问题是他们使用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
    }
}

2 个答案:

答案 0 :(得分: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() {....}

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

答案 1 :(得分:-1)

您应该对每条消息使用确认,您可以查看以下链接: https://www.rabbitmq.com/confirms.html