首页 > 解决方案 > 在我没有回复消息之前,我们如何才能在 Java rabbitmq 的队列中接收不到新消息?

问题描述

使用 java 从 RabbitMQ 中的队列接收单个消息:

我是 RabbitMQ 的新手,想知道我正在考虑的这个问题的好方法。我想创建一个订阅队列并只接收一条消息并在处理后接收下一条消息的服务。

    DeliverCallback deliverCallback = new DeliverCallback() {
            public void handle(String s, Delivery delivery) throws IOException {
                System.out.println("Tag: "+delivery.getEnvelope().getDeliveryTag());
                String message = new String(delivery.getBody(), "UTF-8");
            }
    };

   channel.basicConsume(QUEUE_NAME, false, deliverCallback, new CancelCallback() {
            public void handle(String consumerTag) throws IOException {}
   });

标签: javarabbitmqamqpamqp-client

解决方案


为了从队列中接收一条消息,我执行了以下步骤:

第 1 步:一次只接受一条未确认的消息:

channel.basicQos(1);

第 2 步:将 autoAck 设置为 false:

boolean autoAck = false;

第 3 步:使用 Java 客户端的工作队列

DeliverCallback deliverCallback = (consumerTag, delivery) -> {
  try {
    System.out.println("Tag: "+delivery.getEnvelope().getDeliveryTag());
    String message = new String(delivery.getBody(), "UTF-8");
  } finally {
    System.out.println(" [Message] Task Done");
    channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);
  }
};

channel.basicConsume(QUEUE_NAME, autoAck, deliverCallback, consumerTag -> { });

参见:rabbitmq 文档


推荐阅读