动态jms出站网关

时间:2015-08-11 05:24:56

标签: spring spring-integration

如何使用spring-integration创建动态jms出站网关?我的应用程序具有以下架构,

request -> appA -> activemq -> appB -> activemq -> appA -> response

我想创建一个可以向多个activemq实例发送消息的服务。我已经完成了@ https://github.com/spring-projects/spring-integration-samples/tree/master/advanced/dynamic-ftp描述的动态ftp示例。但我想了解如何创建动态出站网关。

<bean id="jmsSecureConnectionFactory" class="org.apache.activemq.spring.ActiveMQConnectionFactory">
    <property name="brokerURL" value="${brokerUrl}" />
</bean>

<bean id="jmsPooledConnectionFactory" class="org.apache.activemq.jms.pool.PooledConnectionFactory">
    <property name="connectionFactory" ref="jmsSecureConnectionFactory" />
    <property name="createConnectionOnStartup" value="false" />
    <property name="maxConnections" value="1" />
    <property name="maximumActiveSessionPerConnection" value="1" />
    <property name="idleTimeout" value="10" />
</bean>

<int:channel id="clientGatewayChannel" />

<int:gateway id="jmsMessageServiceGateway"
    service-interface="com.abc.JmsMessageServiceGateway"
    default-request-channel="clientGatewayChannel" />

<int-jms:outbound-gateway request-channel="clientGatewayChannel"
    request-destination-expression="'REQUEST.' + payload.processor"
    reply-destination-expression="'RESPONSE.' + payload.processor"
    extract-request-payload="true" connection-factory="jmsPooledConnectionFactory" />

<bean id="jmsChannelResolver" class="com.abc.JmsChannelResolver" />

<int:channel id="dynamicRouter" />

<int:router input-channel="dynamicRouter"
    expression="@jmsChannelResolver.resolve(payload.processor)" />

我可以看到请求消息已入队并出列,并且响应消息已入队并出列。但后来我得到了例外,

org.springframework.integration.support.channel.ChannelResolutionException: no output-channel or replyChannel header available

我该如何检索回复?

1 个答案:

答案 0 :(得分:1)

该错误意味着您发送给dynamicRouter的任何内容都不是来自设置replyChannel标头的组件(包含网关,入站网关和MessagingTemplate.sendAndReceive()方法的示例)

或者,在邮件到达dynamicRouter之前,某些内容已删除该标题。

只要上游流程正确,您所拥有的就应该正常工作。

您需要展示其余的应用程序。