我想在从FORWARD队列发送/接收消息时创建一个简单的测试。 收到消息后,应调用服务。
不幸的是,邮件是通过Message<?> message = MessageBuilder.withPayload(params); forwardGateway.sendPremMessage(message);
发送的,但未收到。
这是我的配置:
<!-- SENDER -->
<si:gateway id="forwardGateway"
service-interface="com.ucware.ucpo.forward.jms.MessageGateway"
default-request-channel="inputChannel"/>
<si:channel id="inputChannel"/>
<!-- Subscriber to a channel -->
<int-jms:outbound-channel-adapter
channel="inputChannel"
connection-factory="connectionFactory"
destination-name="FORWARD" />
<!-- RECEIVER -->
<int:channel id="jmsInChannel"/>
<!-- Subscriber to jmsInChannel. Used instead of inboud channel adapter -->
<int-jms:message-driven-channel-adapter id="messageDrivenAdapter"
channel="jmsInChannel" destination-name="FORWARD" connection-factory="connectionFactory"
concurrent-consumers="1" auto-startup="true" acknowledge="auto"/>
// This service should be invoked but it is not
<si:service-activator id ="activator"
input-channel="jmsInChannel"
ref="messageService"
method="process"/>
该服务定义为:
@MessageEndpoint
public class MessageService {
public void process(Message<?> message )
} 和网关:
public interface MessageGateway {
@Gateway
public void sendPremMessage(Message<?> message);
}
答案 0 :(得分:1)
您的配置对我来说非常好;我建议您打开TRACE级别日志记录以查看双方的消息流。 (TRACE提供了接收方消息监听器容器活动的详细信息。)
如果您使用的是内存中的ActiveMQ,则需要注意时间 - 在容器启动之前不要发送消息。或者,请务必使用CachingConnectionFactory
。
<bean id="connectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
<property name="targetConnectionFactory">
<bean class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="vm://localhost"/>
</bean>
</property>
</bean>
这样,即使容器尚未启动,代理也会在发送后继续运行。