Activemq STOMP:检测和清除已死亡的非持久订户

Activemq STOMP:检测和清除已死亡的非持久订户,activemq,stomp,Activemq,Stomp,我有以下影响我们的ActiveMQ 5.8代理的情况 Windows工作站上的几个Perl脚本使用STOMP连接到ActiveMQ,并订阅(非持久性)各种主题。工作站上的电源出现故障 使用Web控制台,我可以看到ActiveMQ仍然认为这些订阅者是连接的,这取决于显示的使用者数量和使用的高温消息存储。我设置了无生产者流控制,并设置了内存限制,所以我认为我看到的是ActiveMQ正在将所有消息假脱机到磁盘,因为它认为死气沉沉的订阅者仍在连接,并可能最终读取它们。已经30天了,ActiveMQ仍然没

我有以下影响我们的ActiveMQ 5.8代理的情况

Windows工作站上的几个Perl脚本使用STOMP连接到ActiveMQ,并订阅(非持久性)各种主题。工作站上的电源出现故障

使用Web控制台,我可以看到ActiveMQ仍然认为这些订阅者是连接的,这取决于显示的使用者数量和使用的高温消息存储。我设置了无生产者流控制,并设置了内存限制,所以我认为我看到的是ActiveMQ正在将所有消息假脱机到磁盘,因为它认为死气沉沉的订阅者仍在连接,并可能最终读取它们。已经30天了,ActiveMQ仍然没有意识到这些订阅者不再连接


是否有办法配置ActiveMQ,以便最终自动清除此类“不死”订户连接?

尽管Stomp 1.1+支持,但Active MQ目前不支持Stomp。(通常通过wireFormat.maxInactivityDuration实现)


不过ActiveMQ支持Openwire使用它。i、 e在配置的持续时间之后,消费者将被视为死亡

虽然前面的答案基本正确,但ActiveMQ确实为代理到心跳连接上的STOMP传输提供了解决方案,即使客户端使用STOMP v1.0连接。我在前一段时间ActiveMQV5.6发布时了解到了这一点,请参阅有关STOMP1.0默认心跳配置的部分。另一个选项是为传输设置tcp keepAlive,并调整操作系统以使用较短的默认检查间隔,默认检查间隔通常为两小时左右

我读了你的博客文章,其中最突出的部分是连接器应该配置likestomp://0.0.0.0:0?transport.defaultHeartBeat=5000,0在完成之前的评论之前,我被打断了。连接器URI,如
stomp://0.0.0.0:0?transport.defaultHeartBeat=5000,0应使空闲时间超过5000毫秒的连接超时。我要试试这个。如果可行,这正是我所希望的解决方案。我尝试了上面的建议,但似乎不起作用。我将
activemq.xml
中的连接器修改为
,并重新启动了activemq。然后我启动了一个Perl脚本,订阅一些通配符主题。我说,正如我所预期的那样,相关主题的消费者数量有所增加。根据web控制台,我收到的消费者咨询很慢,内存使用也在增长。但20分钟后,消费者的数量没有下降,我的内存使用率仍然很高。内存使用率仍然很高,因为ActiveMQ保留了关于这些主题的消息,因为它假设订阅Perl脚本最终将读取消息,而它不会。我杀死了Perl脚本,用户数量减少了;它只是睡很长时间。
Be Careful:
These values are currently not supported but are planned for a later release