动态 jms 出站网关
Dynamic jms outbound-gateway
如何使用 spring-集成创建动态 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
我应该如何检索响应?
该错误意味着您发送到 dynamicRouter
的任何内容都不是来自设置 replyChannel
header 的组件(确实包括网关、入站网关和 MessagingTemplate.sendAndReceive()
方法)。
或者,在消息到达 dynamicRouter
之前,某些东西已经删除了 header。
只要上游流量正确,您所拥有的应该可以正常工作。
您需要展示申请的其余部分。
如何使用 spring-集成创建动态 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
我应该如何检索响应?
该错误意味着您发送到 dynamicRouter
的任何内容都不是来自设置 replyChannel
header 的组件(确实包括网关、入站网关和 MessagingTemplate.sendAndReceive()
方法)。
或者,在消息到达 dynamicRouter
之前,某些东西已经删除了 header。
只要上游流量正确,您所拥有的应该可以正常工作。
您需要展示申请的其余部分。