如何允许单个方法使用多个 @JmsListener 目标
How can I allow multiple @JmsListener destinations for a single method
我目前正在将 IBM Webshere 应用程序迁移到 Spring Boot。
作为其中的一部分,有一个 MDB class 需要转换为 @JmsListener
。这个 MDB 有一个监听多个队列的方法。我想对多个目的地使用 @JmsListener
来做同样的事情。我看到了 this thread,但这不起作用。
这是当前的 MDB 配置:
豆一
<bean id="myAppabcResponseMDB" class="company.myApp.service.mdb.MyAppMessageListenerMDB"/>
<bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="jmsConnectionFactory"/>
<property name="destination" ref="myAppabcResponseDest"/>
<property name="messageListener" ref="myAppabcResponseMDB"/>
<property name="maxConcurrentConsumers" value="5"/>
<property name="sessionTransacted" value="true"/>
<property name="transactionManager" ref="transactionManager" />
<property name="taskExecutor" ref="myTaskExecutor" />
</bean>
<bean id="myAppabcResponseDest" name="jms/myAppESBResponse" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="jms/myAppabcResponse"/>
<property name="resourceRef" value="true"/>
</bean>
<bean id="myAppRequestMDB" class="company.myApp.service.mdb.MyAppMessageListenerMDB"/>
<bean id="jmsContainer2" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="jmsConnectionFactory"/>
<property name="destination" ref="myAppRequestDest"/>
<property name="messageListener" ref="myAppRequestMDB"/>
<property name="maxConcurrentConsumers" value="1"/>
<property name="sessionTransacted" value="true"/>
<property name="transactionManager" ref="transactionManager" />
<property name="taskExecutor" ref="myTaskExecutor" />
</bean>
<bean id="myAppRequestDest" name="jms/myAppRequest" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="jms/myAppRequest"/>
<property name="resourceRef" value="true"/>
</bean>
@JmsListener 是 Java8 上的可重复注释,因此您可以通过向其添加额外的@JmsListener 声明来将多个 JMS 目标与同一方法相关联。
https://docs.spring.io/spring/docs/current/spring-framework-reference/integration.html#jms-annotated
我目前正在将 IBM Webshere 应用程序迁移到 Spring Boot。
作为其中的一部分,有一个 MDB class 需要转换为 @JmsListener
。这个 MDB 有一个监听多个队列的方法。我想对多个目的地使用 @JmsListener
来做同样的事情。我看到了 this thread,但这不起作用。
这是当前的 MDB 配置:
豆一
<bean id="myAppabcResponseMDB" class="company.myApp.service.mdb.MyAppMessageListenerMDB"/>
<bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="jmsConnectionFactory"/>
<property name="destination" ref="myAppabcResponseDest"/>
<property name="messageListener" ref="myAppabcResponseMDB"/>
<property name="maxConcurrentConsumers" value="5"/>
<property name="sessionTransacted" value="true"/>
<property name="transactionManager" ref="transactionManager" />
<property name="taskExecutor" ref="myTaskExecutor" />
</bean>
<bean id="myAppabcResponseDest" name="jms/myAppESBResponse" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="jms/myAppabcResponse"/>
<property name="resourceRef" value="true"/>
</bean>
<bean id="myAppRequestMDB" class="company.myApp.service.mdb.MyAppMessageListenerMDB"/>
<bean id="jmsContainer2" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="jmsConnectionFactory"/>
<property name="destination" ref="myAppRequestDest"/>
<property name="messageListener" ref="myAppRequestMDB"/>
<property name="maxConcurrentConsumers" value="1"/>
<property name="sessionTransacted" value="true"/>
<property name="transactionManager" ref="transactionManager" />
<property name="taskExecutor" ref="myTaskExecutor" />
</bean>
<bean id="myAppRequestDest" name="jms/myAppRequest" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="jms/myAppRequest"/>
<property name="resourceRef" value="true"/>
</bean>
@JmsListener 是 Java8 上的可重复注释,因此您可以通过向其添加额外的@JmsListener 声明来将多个 JMS 目标与同一方法相关联。
https://docs.spring.io/spring/docs/current/spring-framework-reference/integration.html#jms-annotated