0

我有以下消息消费者

@Service
public class BlockServiceConsumer {

public void blockService(PhoneServiceVO phoneServiceVO) throws Exception {

    // message processing

}

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

以类似于 EJB 世界中的消息驱动 Bean (MDB) 的方式,消息驱动 POJO (MDP) 充当 JMS 消息的接收者。MDP 的一个限制(但也请参见下面对 MessageListenerAdapter 类的讨论)是它必须实现 javax.jms.MessageListener 接口。另请注意,如果您的 POJO 将在多个线程上接收消息,请务必确保您的实现是线程安全的。

4

1 回答 1

2

该文档指的是当您以 a<bean/>或以编程方式连接侦听器容器时。

当使用<jms:listener-container/>命名空间时,解析器会连接一个MessageListenerAdapter从它的onMessage方法调用你的 POJO。

这在参考文档Section about JMS Namespace Support中进行了讨论。

于 2013-05-27T13:35:00.057 回答