首页 > 解决方案 > RabbitMQ basicPublish 未将消息插入队列

问题描述

这可能是我错过的一些愚蠢的错误,但这是问题所在:

我正在尝试将一个简单的“hello”消息插入到 Rabbit 队列中,并带有预定义的交换和路由键。这是我正在使用的代码:

    private static void send_equity_task_to_rabbitmq(ConnectionFactory factory) throws IOException,TimeoutException{

        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();
        channel.queueDeclare("b", false, false, false, null);
        channel.exchangeDeclare("b", "direct");

        channel.basicPublish("b","b",null, "hello".getBytes());

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

public static void main(String[] argv) throws TimeoutException,IOException {

    ConnectionFactory factory = new ConnectionFactory();
    factory.setHost("127.0.0.1");

    Date start_time= Calendar.getInstance().getTime();
    Long start_time_timestamp=System.currentTimeMillis();

    System.out.println("[INFO] Starting connection to queue at:"+start_time);
        send_equity_task_to_rabbitmq(factory);

        Long end_time_timestamp=System.currentTimeMillis();

        System.out.println("[INFO] Message sent and processed successfully after:"+ (end_time_timestamp-start_time_timestamp)+" miliseconds");

 }
}

代码运行没有任何错误。但是,当我检查“b”队列中的记录数量时,我得到:

$ rabbitmqctl list_queues
Listing queues ...
b       0
...done.

我目前没有这个队列的消费者,所以我假设因为它有 0 条记录,所以我使用 basicPublish 很糟糕。有什么问题?

谢谢你。

标签: javarabbitmq

解决方案


我认为您需要将队列绑定到交换机。您已经创建了一个名为“b”的队列和一个名为“b”的交换。交换器将使用“b”routingKey 将消息分发到绑定到它的队列,但由于“b”队列未绑定到“b”交换器,“b”交换器不会发布到该队列.


推荐阅读