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

时间:2014-11-28 20:14:04

标签: java rabbitmq celery

我在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 + "'");
}

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

1 个答案:

答案 0 :(得分:1)

您不应该使用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
    }
 });
相关问题