В настоящее время у меня есть JMSListener, как показано ниже. Он использует селектор значения в файле свойств. Это прекрасно работает.JMSListener - динамический селектор
@JmsListener(destination = "myQueueDest",
selector = MyHeaders.SELECTOR_KEY + " = '${myapp.selector_val}'")
private void consumeData(MyCustomObj mycustomObj) { }
У меня теперь есть необходимость использовать динамический селектор со значением в памяти, а не свойство spring. Есть ли способ использовать JMSListener (или какой-либо другой механизм прослушивания), чтобы сделать выбор из очереди ActiveMQ?
Update:
Возможно присвоить идентификатор моей @JMSListener
, а затем извлечь его из моей JmsListenerEndpointRegistry
боба. Получите контейнер слушателя по ID, отбросите его до DefaultMessageListenerContainer
и позвоните по телефону setMessageSelector()
, хотя я не совсем уверен, что это будет работать.
Для этого требуется установить для моего компонента DefaultJmsListenerContainerFactory значение кэша CACHE_SESSION
.
Но это не работает, так как слушатель поднимает все сообщения, независимо от того, как я устанавливал селектор сообщений.
Как я могу закрыть и воссоздать нового потребителя? есть ли где-нибудь пример создания слушателя полностью программно, не используя @JmsListener? Благодарю. –
Пожалуйста, проверьте весеннюю документацию. Мои знания о Весне очень ограничены. – Shashi
javadoc для setMessageSelector говорит, что он может быть установлен во время выполнения. http://docs.spring.io/spring-framework/docs/2.5.x/api/org/springframework/jms/listener/AbstractMessageListenerContainer.html#setMessageSelector(java.lang.String) –