我在Java上使用RabbitMQ(和Celery),这是我基于正在读取的tutorial从RabbitMQ获取消息的代码:

QueueingConsumer consumer = new QueueingConsumer(channel);
channel.basicConsume(QUEUE_NAME, true, consumer);
while (true) {
  QueueingConsumer.Delivery delivery = consumer.nextDelivery();
  String message = new String(delivery.getBody());
  System.out.println(" [x] Received '" + message + "'");
}


但是我仅在任务开始时收到消息-当我想在任务完成时收到消息。有什么帮助吗?

最佳答案

您不应该使用QueueingConsumer,因为它已被弃用,如下所述:https://www.rabbitmq.com/releases/rabbitmq-java-client/current-javadoc/com/rabbitmq/client/QueueingConsumer.html

相反,您应该创建自己的使用者,以实现RabbitMQ库中的接口Consumer。您必须实现一种称为handleDelivery的方法,每次收到消息时都会调用该方法。然后,要启动它,您需要调用channel.basicConsume(QUEUE_NAME, true, consumer)

例:

channel.basicConsume(queueName, autoAck, "myConsumerTag", new DefaultConsumer(channel) {
    @Override
    public void handleDelivery(String consumerTag,
                            Envelope envelope,
                            AMQP.BasicProperties properties,
                            byte[] body) throws IOException
    {
         //your code here
    }
 });

10-04 14:42
查看更多