Java 如何在任务完成时获取RabbitMQ消息?

Java 如何在任务完成时获取RabbitMQ消息?,java,rabbitmq,celery,Java,Rabbitmq,Celery,我在Java上使用RabbitMQ(和芹菜),下面是我的代码,根据我正在阅读的代码从RabbitMQ获取消息: QueueingConsumer consumer = new QueueingConsumer(channel); channel.basicConsume(QUEUE_NAME, true, consumer); while (true) { QueueingConsumer.Delivery delivery = consumer.nextDelivery(); Stri

我在Java上使用RabbitMQ(和芹菜),下面是我的代码,根据我正在阅读的代码从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,因为它被认为是不推荐使用的,如下所述:

相反,您应该创建自己的使用者,从RabbitMQ库实现接口
consumer
。您必须实现一个名为
handleDelivery
的方法,该方法将在每次收到消息时调用。然后,要启动它,您需要调用
channel.basicConsume(QUEUE\u 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
    }
 });

谢谢你的回答,但是当任务完成时我仍然无法得到消息你到底在说什么任务?此代码仅从RabbitMQ中的队列接收消息。在
handleDelivery
方法中,您可以根据需要调用任何东西。我使用芹菜启动任务,它会在队列中添加一个元素,我想知道任务何时完成,也就是说该元素何时不再在队列中