【问题标题】:how to retrieve unack message from queue using rabbitmq java client如何使用rabbitmq java客户端从队列中检索unack消息
【发布时间】:2014-08-05 14:36:38
【问题描述】:

我正在寻找一种方法来检索未确认消息并将它们恢复为就绪状态,以便我的消费者可以再次发回这些消息。

我正在使用 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();
    }

谁能给我一个代码 sn-p 以便 unack 消息可以恢复到就绪状态,我可以使用我的检索 prog 来阅读它们。

【问题讨论】:

标签: java client rabbitmq recover


【解决方案1】:

如果您不执行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

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

【讨论】:

    猜你喜欢
    • 2011-01-13
    • 1970-01-01
    • 2019-03-01
    • 1970-01-01
    • 2012-10-21
    • 2010-11-05
    • 2019-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多