java - 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 很糟糕。有什么问题?
谢谢你。
解决方案
我认为您需要将队列绑定到交换机。您已经创建了一个名为“b”的队列和一个名为“b”的交换。交换器将使用“b”routingKey 将消息分发到绑定到它的队列,但由于“b”队列未绑定到“b”交换器,“b”交换器不会发布到该队列.
推荐阅读
- ios - UITableView 不知道点击动作行为
- uint32 - How to re-write some c++ code from using uint64 to uint32_t
- php - PHP:将 id 从按钮标签传递到将用于运行 php 脚本的模式
- google-chrome-extension - Chrome extension — cannot get data from dom
- javascript - Store data from dynamic input form to object (React)
- c++ - std::async(std::launch::deferred) + std::future::then 的行为
- android - Android Firebase 实时数据库过滤器父级
- php - Docker - 添加二进制文件以供 PHP 使用时是单独的容器还是相同的容器?
- .htaccess - 删除 URL 中的子文件夹
- ios - 如何从谷歌地图获取省份和城市 - ios