【发布时间】:2016-11-13 14:18:54
【问题描述】:
在我的 java 程序中,某种消息正在通过 RabbitMQ 队列发送,如下所示:
if(!con.isConnected()){
log.error("Not connected !!!");
return false;
}
con.getChannel().basicPublish("",queueName, MessageProperties.PERSISTENT_BASIC, bytes)
- 我通过 RabbitMQ 管理 GUI 插件删除了队列
- 尝试通过已删除的队列发送消息
结果: 队列已从 RabbitMQ GUI 中删除,但是当我尝试通过已删除的 RabbitMQ 队列发送消息时,连接仍然有效。(con.isConnected() == true )我需要找到监听队列的方法,如果它被删除了,我不应该向已删除的队列发送任何消息。
注意:删除队列后,我并没有重启 RabbitMQ。
频道创建:
channel = connection.createChannel();
channel.queueDeclare(prop.getQueueName(), true, false, false, null);
示例代码通道、队列、交换创建:
ConnectionFactory cf = new ConnectionFactory();
cf.setUsername("guest");
cf.setPassword("guest");
cf.setHost("localhost");
cf.setPort(5672);
cf.setAutomaticRecoveryEnabled(true);
cf.setConnectionTimeout(10000);
cf.setNetworkRecoveryInterval(10000);
cf.setTopologyRecoveryEnabled(true);
cf.setRequestedHeartbeat(5);
Connection connection = cf.newConnection();
channel = connection.createChannel();
channel.queueDeclare("test", true, false, false, null);
channel.exchangeDeclare("testExchange", "direct",true);
channel.queueBind("test", "testExchange", "testRoutingKey");
connection.addShutdownListener(new ShutdownListener() {
@Override
public void shutdownCompleted(ShutdownSignalException cause) {
System.out.println("test"+cause);
}
});
发送消息:
channel.basicPublish("testExchange", "testRoutingKey", null,messageBodyBytes);
【问题讨论】:
-
请分享一些代码,以便我们可以 - 至少 - 尝试帮助您。
-
我不确定代码块是否能帮助您了解情况,但无论如何我添加了它。
-
请分享您连接队列的代码...
-
请分享您传递给
basicPublish的内容。 IIRC 您不能直接发布到队列,而只能发布到交换。如果该队列存在,默认交换允许您传递我猜的队列名称。另外一个连接和队列无关,所以如果你删除队列,连接仍然有效。 -
据我了解,有一种方法可以将消息直接发送到相关队列,请查看 RabbitMQ Durability 部分:link
标签: java queue rabbitmq message-queue amqp