Почему прослушиватель JMS работает без реализации MessageListener

У меня есть следующий потребитель сообщений

@Service
public class BlockServiceConsumer {

public void blockService(PhoneServiceVO phoneServiceVO) throws Exception {

    // message processing

}

и следующая конфигурация spring с определением jms:listener-container connectionFactory и queue

<context:component-scan base-package="com.stealthgenie.scheduler" />
<context:annotation-config/>

<bean id="blockServiceQueue" class="org.apache.activemq.command.ActiveMQQueue">
    <constructor-arg value="BLOCK_SERVICE.QUEUE"/>
</bean>

<bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
    <property name="brokerURL">
        <value>tcp://localhost:61616</value>
    </property>
</bean>

<jms:listener-container acknowledge="auto"  connection-factory="connectionFactory" destination-type="queue" concurrency="10-20">
    <jms:listener destination="BLOCK_SERVICE.QUEUE" ref="blockServiceConsumer" method="blockService" />
</jms:listener-container>

Мой вопрос: почему эта установка отлично работает без реализации MessageListener, хотя в документации упоминается, что это необходимо. ПРИМЕЧАНИЕ. Я также не использовал MessageListenerAdapter

Подобно Message-Driven Bean (MDB) в мире EJB, Message-Driven POJO (MDP) действует как приемник для сообщений JMS. Единственное ограничение (но также см. ниже обсуждение класса MessageListenerAdapter) для MDP заключается в том, что он должен реализовывать интерфейс javax.jms.MessageListener. Также имейте в виду, что в случае, когда ваш POJO будет получать сообщения в нескольких потоках, важно убедиться, что ваша реализация является потокобезопасной.


person M. Atif Riaz    schedule 27.05.2013    source источник


Ответы (1)


Эта документация относится к тому, когда вы подключаете контейнер прослушивателя как <bean/> или программно.

При использовании пространства имен <jms:listener-container/> синтаксический анализатор подключает MessageListenerAdapter, который будет вызывать ваш POJO из своего метода onMessage.

Это обсуждается в справочном документе Раздел о поддержке пространства имен JMS.

person Gary Russell    schedule 27.05.2013
comment
так что означает, что реализация, которую я сделал, совершенно действительна? то есть без реализации MessageListener - person M. Atif Riaz; 27.05.2013