Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 没有连接的AMQP/RabbitMQ通道何时失效?_Java_Message Queue_Rabbitmq_Amqp_Spring Amqp - Fatal编程技术网

Java 没有连接的AMQP/RabbitMQ通道何时失效?

Java 没有连接的AMQP/RabbitMQ通道何时失效?,java,message-queue,rabbitmq,amqp,spring-amqp,Java,Message Queue,Rabbitmq,Amqp,Spring Amqp,我有一个简单的RabbitMQ测试程序,它随机地将消息排队,另一个则读取消息,所有这些都使用SpringAMQP。如果使用者死亡(例如,在没有机会关闭其连接或通道的情况下终止进程),则它未确认的任何消息似乎永远保持未确认状态 我已经看到很多参考资料(例如)说通道在没有连接的情况下死亡,剩余的未确认消息将被重新传递。这不是我看到的行为-相反,我得到了一个标记为空闲的通道列表和一个标记为正在运行但没有活动的连接列表 是否需要一些配置来注意一旦进程被终止,连接就会失效 编辑: 我在VirtualBox

我有一个简单的RabbitMQ测试程序,它随机地将消息排队,另一个则读取消息,所有这些都使用SpringAMQP。如果使用者死亡(例如,在没有机会关闭其连接或通道的情况下终止进程),则它未确认的任何消息似乎永远保持未确认状态

我已经看到很多参考资料(例如)说通道在没有连接的情况下死亡,剩余的未确认消息将被重新传递。这不是我看到的行为-相反,我得到了一个标记为空闲的通道列表和一个标记为正在运行但没有活动的连接列表

是否需要一些配置来注意一旦进程被终止,连接就会失效

编辑:
我在VirtualBox VM中运行rabbitmq服务器,它显然无法通过NAT正确管理失效的入站连接。这对于直接在物理主机上运行的mq服务器来说效果很好。

AMQP使用队列和交换。您可以在exchange上发布,并绑定队列以从exchange获取消息(您可以在我的博客上看到)。创建队列时,您可以将其设置为自动删除,以及在自动删除之前它将保留多长时间不使用。 以下是RabbitMQ quickref的一段引用:

声明(短保留-1,队列名称队列,位被动,位 持久,位独占,位自动删除,无等待无等待,表格 (论据)➔ 宣布同意

支持:完全声明队列,需要时创建

此方法创建或检查队列。创建新队列时 客户机可以指定各种属性来控制产品的耐久性 队列及其内容,以及队列的共享级别

RabbitMQ实现了对AMQP规范的扩展,允许 队列的创建者,用于控制其行为的各个方面

每个队列消息TTL此扩展确定消息的长度 在服务器丢弃队列之前,发布到队列的消息可以存活。 “生存时间”是用x-message-ttl参数配置为 此方法的参数

队列到期可以使用可选的租用时间声明队列 租用时间确定队列在被占用之前可以保持未使用的时间 由服务器自动删除。租赁时间作为 此方法的arguments参数中的x-expires参数

镜像队列我们为其开发了主动/主动高可用性 队列。这通过允许在其他节点上镜像队列来实现 在RabbitMQ集群中。结果是 群集失败时,队列可以自动切换到其中一个镜像 并继续运营,没有服务不可用。创建 对于镜像队列,您可以在参数中提供一个x-ha-policy参数 此方法的参数


回答关闭。这不是一个真正的问题


我在VirtualBox VM中运行rabbitmq服务器,该虚拟机显然无法通过NAT正确管理失效的入站连接。这对于直接在物理主机上运行的mq服务器来说效果很好。

我不希望删除队列,我希望它是持久的。但我也希望未确认的消息(由在确认之前已死亡的进程使用)重新交付。需要删除的是已死亡的连接/通道,而不是消息。现在我明白了-您需要创建ConnectionParameters实例,并将心跳(setRequestedHeardbeat)设置为合理的值(1次心跳未命中将关闭通道)然后将其传递给连接工厂constructor@ArnonRotem Gal Oz,setting
RequestedHeartbeat
解决了我的类似问题,即代理上的独占队列没有及时清理。这阻止了使用确定性名称声明独占队列的组件启动。@drstevens right-这几乎是同一个问题。代理需要知道客户端已经去释放资源了。yi:我遇到了一个类似的问题,在独占消费者死亡后,代理上的独占队列没有及时清理。这阻止了这些具有确定性名称的组件启动。这由sett解决正在将ConnectionFactory.RequestedHeartbeat设置为较小的值(秒)