Как я могу разрешить несколько мест назначения @JmsListener для одного метода - PullRequest
0 голосов
/ 05 марта 2020

В настоящее время я работаю над переносом приложения IBM Webshere на Spring Boot.

Как часть этого есть класс MDB, который должен быть преобразован в @JmsListener. Этот MDB имеет единственный метод, который прослушивает несколько очередей. Я хотел бы сделать то же самое, используя @JmsListener с несколькими пунктами назначения. Я видел этот поток , но он не работает.

Это текущая конфигурация MDB:

Bean 1

<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>

1 Ответ

1 голос
/ 05 марта 2020

@ JmsListener - это повторяющаяся аннотация на Java 8, поэтому вы можете связать несколько JMS-адресов с одним и тем же методом, добавив к нему дополнительные объявления @JmsListener.

https://docs.spring.io/spring/docs/current/spring-framework-reference/integration.html#jms -annotated

...