gpt4 book ai didi

java - Rabbitmq java客户端消费者handleDelivery方法没有被调用

转载 作者:行者123 更新时间:2023-12-02 02:48:34 24 4
gpt4 key购买 nike

这是一个非常人为的rabbitmq应用程序示例,它在一个主方法中既是消息的生产者又是消息的消费者。问题是重写的handleDelivery方法中的代码永远不会被执行。我使用 Rabbitmq 仪表板并看到队列已满并消耗。并且handleConsumeOk 中的行被打印。由于我是rabbitmq的新手,我想知道我是否做了一些根本性错误的事情,或者我只是得到了“当该消费者收到 basic.deliver 时调用”的想法错误。

public class RabbitMain {

public static void main(String[] args) throws IOException, TimeoutException, InterruptedException {
Connection connection = Utils.getConnection("test");
String payload = "hello world!";
try (Channel channel = connection.createChannel()){
channel.exchangeDeclare("sampleExchange", BuiltinExchangeType.TOPIC, true);
channel.basicPublish("sampleExchange", "testKey", null, payload.getBytes());
}

System.out.println("Consume...");

try (Channel channel = connection.createChannel()){
channel.exchangeDeclare("sampleExchange", BuiltinExchangeType.TOPIC, true);
channel.queueDeclare("testQueue", true, false, false, null);
channel.queueBind("testQueue", "sampleExchange", "testKey");

Consumer consumer = new DefaultConsumer(channel){
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
String message = new String(body);
System.out.println("Received: " + message);
}

@Override
public void handleConsumeOk(String consumerTag) {
System.out.println("handled consume ok");
}
};

Thread.sleep(2000);

channel.basicConsume("testQueue", true, consumer);
}
}
}

最佳答案

在任何队列绑定(bind)到消息之前,您将消息发布到exhnage。 RabbitMQ 将丢弃任何无法路由到队列的消息。

channel.queueDeclare("testQueue", true, false, false, null);
channel.queueBind("testQueue", "sampleExchange", "testKey");

在调用channel.basicPublish之前。

关于java - Rabbitmq java客户端消费者handleDelivery方法没有被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57125509/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com