2013-07-11 51 views
0

我已經寫了一個小型測試,在此將消息發送到現有的ActiveMQ FORWARD隊列。不幸的是,該消息被髮送到隊列,但沒有收到。下面你會發現我的兩次嘗試接收這條消息:通過MyMessageListener和MessageService。兩種方法均失敗。 這裏是我的測試:使用服務或偵聽器在ActiveMQ中使用消息

Map<Parameter, String> params = new HashMap<Parameter, String>(); 

    params.put(key1, "601"); 
    params.put(key2, "3000"); 

    Map<String,String> headers = Collections.singletonMap("method-name","prepareHotDrink"); 
    Message<?> msg = MessageBuilder.withPayload(params) 
    .copyHeaders(headers) 
    .build(); 

    boolean i = inputChannel.send(msg); 

這是我的配置文件:

<bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> 
<property name="brokerURL" value="${jms.primary.server}"/> 
</bean> 


<!-- spring integration beans --> 

<int-jms:channel id="inputChannel" queue-name="FORWARD" 
    connection-factory="connectionFactory" auto-startup="true"> 
</int-jms:channel> 

<!-- Consumers -->  
<int-jms:message-driven-channel-adapter 
    id="jmsIn" 
    container="messageListenerContainer" 
    channel="inputChannel" 
    extract-payload="true" /> 


<int:service-activator input-channel="inputChannel" 
        ref="messageService" 
        method="processMessage"/> 


<bean id="messageListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">  
    <property name="connectionFactory" ref="connectionFactory"/>  
    <property name="destination" ref="requestQueue"/> 
    <property name="exposeListenerSession" value="false"/> 
    <property name="messageListener" ref="messageListener" /> 
</bean> 

<bean id="messageListener" class="com.ucware.ucpo.forward.mess.MyMessageListener"/> 
<bean id="messageService" class="com.ucware.ucpo.forward.jms.MessageService"/> 

<bean id="requestQueue" class="org.apache.activemq.command.ActiveMQQueue"> 

<constructor-arg name="name" value="FORWARD"/> 
</bean> 
+0

檢查你正在編寫,並從同一隊列中讀取消息/。 –

+0

爲什麼你有一個jms支持的通道和一個消息驅動的適配器在同一個隊列上監聽?嘗試用''替換jms支持的頻道。 JMS支持的通道用於提供持久性,您不應該使用它來向JMS發送/接收任意消息。 –

+0

我可以將郵件發送到FORWARD隊列,但我無法收到它們。 – luksmir

回答

0

原來的ActiveMQ不支持渠道。所以我必須定義一個<jms:lintener-container><jms:listener>才能夠使用這些消息。另外,我創建了一個消息生成器,將消息發送到現有的ActiveMQ隊列。

<!-- RECEIVER --> 
<bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory" p:brokerURL="${jms.primary.server}"/> 

<bean id="messageListener" class="com.ucware.ucpo.forward.jms.ProductMessageListener"/> 

<jms:listener-container connection-factory="connectionFactory" concurrency="2" acknowledge="auto"> 
    <jms:listener destination="FORWARD" ref="messageListener" method="onMessage"/> 
</jms:listener-container> 

<!-- SENDER --> 

<!-- A cached connection to wrap the ActiveMQ connection --> 

<bean id="cachedConnectionFactory" 
    class="org.springframework.jms.connection.CachingConnectionFactory" 
    p:targetConnectionFactory-ref="connectionFactory"  
    p:sessionCacheSize="10" /> 

<!-- A destination in ActiveMQ --> 

<bean id="destination" 
    class="org.apache.activemq.command.ActiveMQQueue"> 
<constructor-arg value="FORWARD" /> 
</bean> 

<!-- A JmsTemplate instance that uses the cached connection and destination --> 

<bean id="producerTemplate" 
    class="org.springframework.jms.core.JmsTemplate" 
    p:connectionFactory-ref="cachedConnectionFactory" 
    p:defaultDestination-ref="destination" /> 
</beans> 
相關問題