2011-08-05 43 views
2

我需要一些关于主题和选择器的帮助。activemq,jms主题和订阅者与选择器

我有一个具有多个持久订阅者(每个都带有选择器)的主题的场景 由于不匹配的选择器,并非所有消息都进入主题。

这是正确的行为。

然而,当无法比拟的信息达到一定的数量门槛,因为在这一点上没有其他的消息被传递到消费者 的ActiveMQ试图派遣那些老无可比拟的消息出现问题,但因为没有消费者对他们的一切卡住 任何人都可以帮忙吗?

我的设置是ActiveMQ的5.5

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

回答

3

我会说这是给有更好的选择,也许在ActiveMQ中的错误有缺陷的设计。

第一个问题:你是制片人发布到这个话题上设置这些消息的JMSExpiration头?

如果是,我会做的第一件事是create a Jira issue详细描述了上面描述的情况,因为ActiveMQ将继续保持并继续发送没有选择器应用的消息似乎不正确。

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

1

它似乎像一个错误,(或至少dashedly不方便),但有一个变通使用Virtual Destinations

报价:

注意,制作专题虚拟确实增加了一个小的CPU开销时 将消息发送到主题,但它是相当小的。从版本 5.4,从虚拟主题到订阅队列的分派可以是 selectorAware,使得只有与现有的 订户中的一个相匹配的消息才被实际分派。使用此选项可防止 消费者在使用选择器时生成不匹配的消息。

2

这涉及到ActiveMQ的处理稀疏选择的方式。当前的实现不会页面到商店寻找消息匹配稀疏选择器,所以你需要进行一些配置更改尝试和解决此问题。您可以在配置的目标策略中设置maxBrowsePageSize,默认值为400.请参阅此page。在ActiveMQ中

虚拟目的地可能是更好的选择,它几乎总是想着用持久订阅者时。但是,如果您使用SNAPSHOT版本的ActiveMQ 5.6,则可以将消息过期添加到您的消息中,并将策略配置为在不活动的持久订阅者上过期消息。