当前位置: 首页 > 知识库问答 >
问题:

RabbitMQ删除队列无法释放连接

茹元魁
2023-03-14
 if(!con.isConnected()){
        log.error("Not connected !!!");

        return false;
}
con.getChannel().basicPublish("",queueName, MessageProperties.PERSISTENT_BASIC, bytes)
    null

结果:队列已从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);

共有1个答案

姬和豫
2023-03-14

来自RabbitMQ google

AMQP 0-9-1中的消息不发布到队列;它们被发布到交换,从那里它们被路由到队列(或另一个交换)或不被路由到队列(或另一个交换)。[1]Basic.Publish从设计上讲是一种完全异步的协议方法:除非您提出要求,否则不会有任何响应[2]。如果定义返回侦听器并将强制标志设置为true,则无法路由的消息可以返回到发布服务器。请注意,publisher确认和强制标志/返回是正交的,一个并不意味着另一个。

定义返回监听器和设置强制标志true解决了我的问题。如果没有路由任何消息,我可以使用ReturnListener捕获它们,并将它们添加到我的持久化队列中,以便在系统变为活动时发送另一个时间。

 类似资料:
  • 我已经用RabbitMQ(3.7.6)设置了一个Laravel(5.6)应用程序,使用最新的Laradock和作曲家安装的https://github.com/vyuldashev/laravel-queue-rabbitmq。当我启动Laravel消息工作人员与我得到以下错误 但是,我可以使用telnet 127.0连接到Rabbit。0.1 5672(连接在不活动10秒后关闭)。听众似乎工作正

  • 我收到了一个关于这个问题的建议,一个评论,说我可能没有我需要的交换,因为我的队列已经存在。于是,我就全部手动删除了。 但是,在重新部署应用程序时,我发现所有队列都有以下异常: 我不确定这意味着什么,因为我显然想要创建队列<code>myInput。组,它似乎在抱怨它不存在。。。 我也检查了这个问题,我的问题可能是权限。但我应该有它们——否则我相信我无法删除队列...... 你能给我一个解决方案吗?

  • 我安装了Rabbitmqadmin,并能够列出所有的交换和队列。如何使用Rabbitmqadmin或Rabbitmqctl删除所有队列。

  • 这就是事情。 我正在使用PHP AMQP从Rabbitmq读取结果队列,以便处理发送的每封电子邮件上的重要信息。完成后,我需要将该消息删除或标记为已写入,以便下次读取队列时,不会得到已处理的消息。 由于Rabbitmq服务器每小时发送超过10.000封电子邮件,每次我读取队列以处理结果发送时,脚本至少可以运行5分钟,以便处理队列中的所有消息,因此在完成后,在这5分钟内会发送数百条新消息。这使得我无

  • 我是Spring的新手,正在开发基于云的应用程序,并尝试使用RabbitTemplate和RabbitMQ。 我能够使用数据存储到队列中。 但是当我从同一个队列接收数据时,使用 我的例外情况如下: ERR 由: java.io.IOException 2016-09-13T11:15:21.38 0530 [App/0] ERR at com.rabbitmq.client.impl.AMQCha

  • 我有一个spring boot rabbitmq应用程序,其中我必须将一个Employee对象发送到队列中。那么我已经设置了一个侦听器应用程序。对employee对象进行一些处理,并将此对象放入回调队列中。 为此,我在应用程序中创建了以下对象。 null 我的应用程序文件如下所示。 应用程序.属性 MainClass.java EmployeeResponseReceiver. 问题是每当我启动我