我试图弄清楚如何在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
}
}
答案 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