我有三种不同的系统。我正在使用Spring集成来同步所有这些系统中的数据。
系统1呼叫--->系统2通过http:入站网关
<int-http:inbound-gateway id="gateway"
path="/save" supported-methods="POST, PUT"
request-channel="requestChannel" reply-channel="replyChannel"
request-payload-type="com.model.Request"
mapped-request-headers="source" error-channel="errorChannel" />
系统2将调用service方法来持久化数据,如果请求有效则返回响应,否则抛出异常
<int:service-activator ref="serviceMethod"
method="saveIfValid" input-channel="requestChannel"
output-channel="serviceOutput" />
<int:recipient-list-router id="id1"
input-channel="serviceOutput">
<int:recipient channel="system1" />
<int:recipient channel="system3" />
</int:recipient-list-router>
只有在操作成功时才需要向系统1和系统3发送服务方法响应。 在调用服务方法之后,基于服务方法响应,将使用变换器生成对系统3的请求。变压器后,我将请求放入mq队列。
<int:transformer id="transformer1"
method="convert" input-channel="system3"
output-channel="jmsInput">
<bean
class="com.transformer.System3Transformer" />
</int:transformer>
<int-jms:outbound-channel-adapter id="adapter"
channel="jmsInput" destination-name="queueName">
</int-jms:outbound-channel-adapter>
更新了JMS出站代码
<int-jms:outbound-channel-adapter id="jms1"
channel="jmsIn" destination-name="queueName">
<int-jms:request-handler-advice-chain>
<bean
class="org.springframework.integration.handler.advice.ExpressionEvaluatingRequestHandlerAdvice">
<property name="onSuccessExpression" value="T(Boolean).TRUE" />
<property name="successChannelName" value="afterSuccessDeleteChannel" />
<property name="onFailureExpression" value="T(Boolean).FALSE" />
<property name="failureChannelName" value="afterFailRenameChannel" />
</bean>
</int-jms:request-handler-advice-chain>
</int-jms:outbound-channel-adapter>
我的问题是
答案 0 :(得分:0)
对于第一种情况,您应该真正依赖异常传播 - 流程停止并将错误作为HTTP响应发送到system1。
对于第二个(transformer
)案例,您应该查看ExpressionEvaluatingRequestHandlerAdvice
并将其与<request-handler-advice-chain>
<transformer>
一起使用。
如果你应该向system1承认,<int-jms:outbound-channel-adapter>
可以应用同样的效果。