activemq、jms主题和带有选择器的订阅服务器

activemq、jms主题和带有选择器的订阅服务器,jms,activemq,publish-subscribe,Jms,Activemq,Publish Subscribe,我需要一些关于主题和选择器的帮助 我有一个场景,主题有多个持久订阅者(每个订阅者都有一个选择器) 并非所有进入主题的消息都不会被消费者阅读——因为选择器不匹配 这是正确的行为 但是,当不匹配的消息达到某个数量阈值时,就会出现问题,因为此时没有其他消息传递给使用者 activemq尝试分派那些旧的不匹配消息,但由于没有用于它们的使用者,所以一切都被卡住了 有人能帮忙吗 我的设置是ActiveMq 5.5 是否有一些配置选项,或者它只是一个有缺陷的设计?我认为这是一个有缺陷的设计,因为ActiveM

我需要一些关于主题和选择器的帮助

我有一个场景,主题有多个持久订阅者(每个订阅者都有一个选择器) 并非所有进入主题的消息都不会被消费者阅读——因为选择器不匹配

这是正确的行为

但是,当不匹配的消息达到某个数量阈值时,就会出现问题,因为此时没有其他消息传递给使用者 activemq尝试分派那些旧的不匹配消息,但由于没有用于它们的使用者,所以一切都被卡住了 有人能帮忙吗

我的设置是ActiveMq 5.5


是否有一些配置选项,或者它只是一个有缺陷的设计?

我认为这是一个有缺陷的设计,因为ActiveMQ中有更好的替代方案,也许还有一个bug

第一个问题:您的制作人是否正在发布此主题,并在这些消息上设置JMSExpiration头

如果是的话,我要做的第一件事就是详细说明上面描述的场景,因为ActiveMQ将继续保留并继续发送没有选择器应用的消息似乎是不正确的

至于有缺陷的设计,当你听到自己说“我需要持久订户”并且正在使用ActiveMQ时,你应该立即转而使用虚拟目的地。虚拟目的地具有主题的优点,因为生产者可以向目的地发送消息,并将该消息传播到N个其他目的地以供使用,但不具有主题上具有持久订阅者所带来的缺点。阅读更多关于

这看起来确实像一个bug(或者至少有点不方便),但是使用它还是有一个解决办法的

引述:

请注意,将主题设为虚拟主题会在以下情况下增加少量CPU开销: 向主题发送消息,但该主题相当小。从版本 5.4,可以将虚拟主题分派到订阅队列 选择Oraware,使其仅显示与其中一条现有消息相匹配的消息 订户实际上已被分派。使用此选项可防止 当exclusive使用选择器时,生成不匹配的消息 消费者


这与ActiveMQ处理稀疏选择器的方式有关。当前的实现没有分页到存储中以查找消息匹配的稀疏选择器,因此您需要进行一些配置更改以尝试解决此问题。您可以在配置的目标策略中设置maxBrowsePageSize,默认值为400。看这个

ActiveMQ中的虚拟目的地可能是更好的选择,在考虑使用持久订户时几乎总是这样。但是,如果使用ActiveMQ 5.6的快照版本,则可以向消息中添加一些消息过期,并将策略配置为使非活动持久订阅服务器上的消息过期