gpt4 book ai didi

java - 如何使用rabbitmq java客户端从队列中检索unack消息

转载 作者:太空宇宙 更新时间:2023-11-04 06:37:39 25 4
gpt4 key购买 nike

我正在寻找一种方法来检索未确认消息并将其放回就绪状态,以便我的消费者可以再次发回这些消息。 enter image description here

我正在使用java客户端来获取消息,这些是我发送和检索消息的程序。我读到有一个 basicRecover() 方法,它将把消息放回到队列中。

SendMessage
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();

channel.queueDeclare(QUEUE_NAME, true, false, false, null);
for(int i=0;i<1000;i++)
{
String message = "message goes here";

channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
System.out.println(" [x] Sent '" + message + "'");
}
channel.close();
connection.close();

}

Retrieve
try
{
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("10.4.4.19");
factory.setUsername("test");
factory.setPassword("test");
//factory.setPort(5267);
connection=factory.newConnection();
channel=connection.createChannel();
channel.basicQos(1);
QueueingConsumer consumer = new QueueingConsumer(channel);
channel.basicConsume(QUEUE_NAME, false, consumer);

for(int i=0;i<1;i++)
{
QueueingConsumer.Delivery delivery = consumer.nextDelivery();
String message = new String(delivery.getBody());
System.out.println(" [x] Received '" + message + "'");
// Thread.currentThread().sleep(3000);
channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);

}
channel.close();
connection.close();
}
catch(Exception e)
{
System.out.println("Error:"+e.getMessage());
e.printStackTrace();
}

任何人都可以给我提供一个代码片段,以便可以将 unack 消息放回就绪状态,并且我可以使用我的检索程序来读取它们。

最佳答案

如果您不执行channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);,则消息将(最终)重新传递。您不必通知服务消息未送达,它的工作原理是任何未确认为已送达的内容均未送达。

http://pubs.vmware.com/vfabric5/index.jsp?topic=/com.vmware.vfabric.rabbitmq.2.4/tutorials/tutorial-two-java.html

但是正如您将在上面的链接中读到的那样,取消确认消息的唯一方法是终止/关闭与服务的连接。

关于java - 如何使用rabbitmq java客户端从队列中检索unack消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25141508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com