【问题标题】:RabbitMQ consumer which consumes only one message, acknowledges it and stops listeningRabbitMQ 消费者只消费一条消息,确认它并停止监听
【发布时间】:2016-11-13 20:15:54
【问题描述】:

我正在查看 Java 中的 RabbitMQ HelloWorld 示例https://www.rabbitmq.com/tutorials/tutorial-one-java.html

制片人

        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost(host);
        factory.setPort(Integer.parseInt(port));
        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();

        channel.queueDeclare(queueName, false, false, false, null);

        channel.basicPublish("", queueName, null, message.getBytes());
        System.out.println(" [x] Sent '" + message + "'");

        channel.close();
        connection.close();

消费者

        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost(host);
        factory.setPort(Integer.parseInt(port));
        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();

        channel.queueDeclare(queueName, false, false, false, null);
        System.out.println(" [*] Waiting for messages.");

        QueueingConsumer consumer = new QueueingConsumer(channel);
        channel.basicConsume(queueName, true, consumer);

        QueueingConsumer.Delivery delivery = consumer.nextDelivery(1000);
        if (delivery != null) {
            String message = new String(delivery.getBody());
            System.out.println(" [x] Received '" + message + "'");
        } else {
            System.out.println(" [x] No messages received");
        }

有没有办法让我的消费者只接收消息并停止收听?

【问题讨论】:

  • 将“consumer.nextDelivery(1000)”保持在一个while循环(无限循环)中,它会继续监听。

标签: java rabbitmq message-queue


【解决方案1】:

修改了消费者代码如下。这对我有用。

        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost(host);
        factory.setPort(Integer.parseInt(port));
        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();

        channel.queueDeclare(queueName, false, false, false, null);
        System.out.println(" [*] Waiting for messages.");

        QueueingConsumer consumer = new QueueingConsumer(channel);
        channel.basicConsume(queueName, true, consumer);

        QueueingConsumer.Delivery delivery = consumer.nextDelivery(1000);
        while (delivery != null) {
            String message = new String(delivery.getBody());
            System.out.println(" [x] Received '" + message + "'");
            delivery = consumer.nextDelivery(1000);
        }
        channel.close();
        connection.close();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    • 1970-01-01
    • 2017-07-31
    • 2013-08-01
    • 1970-01-01
    • 2019-02-04
    • 1970-01-01
    相关资源
    最近更新 更多