动态 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。

只要上游流量正确,您所拥有的应该可以正常工作。

您需要展示申请的其余部分。