Java 通过服务或侦听器使用ActiveMQ中的消息
我编写了一个小测试,向现有的ActiveMQ转发队列发送消息。不幸的是,消息已发送到队列,但未收到。下面您将看到我两次尝试接收此消息:通过MyMessageListener和MessageService。两种方法都失败了。 这是我的测试:Java 通过服务或侦听器使用ActiveMQ中的消息,java,spring,asynchronous,spring-integration,Java,Spring,Asynchronous,Spring Integration,我编写了一个小测试,向现有的ActiveMQ转发队列发送消息。不幸的是,消息已发送到队列,但未收到。下面您将看到我两次尝试接收此消息:通过MyMessageListener和MessageService。两种方法都失败了。 这是我的测试: Map<Parameter, String> params = new HashMap<Parameter, String>(); params.put(key1, "601"); params.put(key2,
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);
Map params=newhashmap();
参数put(键1,“601”);
参数put(键2,“3000”);
Map headers=Collections.singletonMap(“方法名”、“prepareHotDrink”);
Message msg=MessageBuilder.withPayload(参数)
.CopyHeader(标题)
.build();
布尔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>
结果是ActiveMQ不支持通道。所以我必须定义一个
和
来使用这些消息。此外,我还创建了一个消息生成器,将消息发送到现有的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>
检查您正在向/从同一队列写入和读取消息。为什么有jms支持的通道和消息驱动适配器侦听同一队列?尝试用
替换jms支持的通道。支持JMS的通道用于提供持久性。您不应该使用它向JMS发送/接收任意消息。我可以向转发队列发送消息,但无法接收它们。在这种情况下,我应该如何定义通道,以便1)它使用我的connectionFactory 2)它指向现有的转发队列?