2013-05-27 98 views
0

我有以下消息消費者爲什麼JMS監聽器工作不落實一個MessageListener

@Service 
public class BlockServiceConsumer { 

public void blockService(PhoneServiceVO phoneServiceVO) throws Exception { 

    // message processing 

} 

,並在與jms:listener-containerconnectionFactoryqueue定義Spring配置

<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將在多個線程中接收消息的情況下,確保您的實現是線程安全的非常重要。

回答

2

該文檔指的是您將聽衆容器作爲<bean/>或以編程方式連接起來。

當使用<jms:listener-container/>命名空間時,解析器連接了一個MessageListenerAdapter,它將從其onMessage方法中調用POJO。

這在參考文件Section about JMS Namespace Support中討論。

+0

因此,我所做的平均實現是完全有效的?即不執行'MessageListener' –

+0

這是正確的。 –

+0

感謝@Gary指出Spring Reference文檔 –