RabbitMQ basicPublish不将消息插入队列

时间:2018-05-04 14:53:34

标签: java rabbitmq

这可能是我遗漏的一些愚蠢错误,但问题在于:

我正在尝试使用预定义的交换和路由密钥将简单的“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。 可能有什么不对?

谢谢。

1 个答案:

答案 0 :(得分:2)

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