SpringJMS与ActiveMQ:如何异步读取选择性消息

SpringJMS与ActiveMQ:如何异步读取选择性消息,activemq,spring-jms,Activemq,Spring Jms,我使用SpringJMS和ActiveMQ作为代理,并在Tomcat上运行应用程序。我见过许多使用receiveSelected(..)与指定的消息选择器同步接收消息的示例。但是我找不到任何方法动态地指定jms:listener容器上的消息选择器以异步接收消息。只有在运行时才知道选择器 我能想到的唯一方法是使用DefaultMessageListenerContainer,并在每次需要新选择器时创建一个新实例。但我不确定这是否是正确的方法和这样做的最佳实践。例如,是否应该缓存与选择器关联的lis

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

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

如果有人能给我举个例子或概述一个应对这种情况的策略,我将不胜感激


提前谢谢

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

我需要同时运行使用者,每个使用者使用来自不同选择器的消息。例如,我的选择器是一个帐户id,每个消费者负责处理该帐户的消息。如果我使用一个容器,其他选择器帐户的消息会丢失吗?这可能不会很好地扩展——特别是对于很多帐户——如果您需要以不同的方式处理不同帐户的请求,那么您可能需要考虑使用Spring集成并使用基于(任何)标准的路由器。如果你真的希望每个帐户都有一个容器(我对此表示怀疑),那么你必须为每个帐户启动一个新容器。谢谢Gary!我简要地研究了SI路由,对于我的用例来说,它确实很有希望。我要试一试。