gpt4 book ai didi

java - JMSListener - 动态选择器

转载 作者:太空宇宙 更新时间:2023-11-04 12:15:19 33 4
gpt4 key购买 nike

我目前有一个 JMSListener,如下所示。它使用属性文件中的值选择器。这工作得很好。

 @JmsListener(destination = "myQueueDest",
selector = MyHeaders.SELECTOR_KEY + " = '${myapp.selector_val}'")
private void consumeData(MyCustomObj mycustomObj) { }

我现在需要使用具有内存中值的动态选择器,而不是 spring 属性。有没有办法使用 JMSListener (或其他一些监听器机制)来从 ActiveMQ 队列中进行选择?

更新:

可以为我的 @JMSListener 分配一个 ID,然后从我的 JmsListenerEndpointRegistry bean 中检索它。通过 ID 获取监听器容器,将其转换为 DefaultMessageListenerContainer,然后调用 setMessageSelector(),尽管我不完全确定这是否有效。

这需要将我的 DefaultJmsListenerContainerFactory bean 设置为具有 CACHE_SESSION 的缓存级别。

但这似乎不起作用,因为无论我将消息选择器设置为什么,监听器都会拾取所有消息。

最佳答案

JMS 规范规定在创建使用者时必须提供选择字符串。所以答案是否定的。消费者必须关闭并使用不同的选择字符串重新创建,才能接收匹配不同选择标准的消息。

如果您的项目不需要使用 JMS API,那么您可以探索使用 Active MQ 的 native API。我确信 API 将有办法在每次调用接收时指定不同的选择字符串。 IBM MQ 的 native API 提供了这样的功能。

关于java - JMSListener - 动态选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39472329/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com