【问题标题】:Spring JMS with ActiveMQ: How to asynchronously read selective messagesSpring JMS with ActiveMQ:如何异步读取选择性消息
【发布时间】:2013-09-06 19:08:43
【问题描述】:

我使用 Spring JMS 和 ActiveMQ 作为代理并在 Tomcat 上运行应用程序。我见过许多使用receiveSelected(..) 与指定消息选择器同步接收消息的示例。但是我找不到任何方法来动态指定 jms:listener-container 上的消息选择器以异步接收消息。选择器仅在运行时才知道。

我能想到的唯一方法是改用 DefaultMessageListenerContainer 并在每次需要新选择器时创建一个新实例。但我不确定这是否是正确的方法和这样做的最佳实践。例如,与选择器关联的 listenerContainer 是否应该被缓存?什么时候应该关机等?

如果有人能指出一个例子或概述处理这种情况的策略,我将不胜感激。

提前致谢!

【问题讨论】:

    标签: activemq spring-jms


    【解决方案1】:

    您不能在容器运行时更​​改选择器(可以,但只有新的侦听器线程会使用它)。您可以停止容器,修改选择器以包含新条件,然后重新启动容器。

    【讨论】:

    • 我需要并发消费者运行,每个消费者都使用来自不同选择器的消息。例如,我的选择器是一个帐户 ID,每个消费者负责处理该帐户的消息。如果我使用单个容器,其他选择器帐户的消息会丢失对吗?
    • 这可能无法很好地扩展 - 尤其是对于很多帐户 - 如果您需要以不同的方式处理不同帐户的请求,您可能需要考虑使用 Spring Integration 并使用基于(无论如何)标准。如果您真的想要为每个帐户创建一个容器(我对此表示怀疑),那么您必须为每个帐户启动一个新容器。
    • 谢谢加里!我简要研究了 SI 路由,它看起来对我的用例很有希望。我试试看。
    猜你喜欢
    • 2015-06-16
    • 2020-01-16
    • 1970-01-01
    • 2015-02-05
    • 2014-09-27
    • 2016-07-09
    • 1970-01-01
    • 2010-12-12
    • 2014-11-24
    相关资源
    最近更新 更多