如何使用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
我该如何检索回复?
答案 0 :(得分:1)
该错误意味着您发送给dynamicRouter
的任何内容都不是来自设置replyChannel
标头的组件(包含网关,入站网关和MessagingTemplate.sendAndReceive()
方法的示例)
或者,在邮件到达dynamicRouter
之前,某些内容已删除该标题。
只要上游流程正确,您所拥有的就应该正常工作。
您需要展示其余的应用程序。