java - Spring Integration - 如果值为空则中断流程

标签 java spring spring-integration

所以我在 Spring Integration 中有如下配置:

POS -> 通过传递 ID 调用 SI -> 获取该 ID 的详细信息 -> 点击 API URL

现在我想要实现的是,

POS -> 通过传递 ID 调用 SI -> 获取该 ID 的详细信息 -> 如果不为 null(如果为 null,则中断流程) -> 点击 API URL

我的配置文件如下所示:

<int-http:inbound-gateway id="CNInvokeFromPOS" 
    supported-methods="GET"
    request-channel="CNInvokeRequest"
    reply-channel="CNInvokeResponse"
    path="/postToCN/{CNId}"
    mapped-response-headers="Return-Status, Return-Status-Msg, HTTP_RESPONSE_HEADERS"
    reply-timeout="10000" >
    <int-http:header name="CNId" expression="#pathVariables.CNId"/>
</int-http:inbound-gateway>

<int:service-activator id="motorCNInvokeActivator"
                input-channel="CNInvokeRequest"
                output-channel="CNInvokeResponse"
                ref="apiCNService"
                method="getCNDetailsById"
                requires-reply="true"
                send-timeout="10000"/>

<int:transformer input-channel="CNInvokeResponse"
        ref="apiCNTransformer"
        method="retrieveJson" 
        output-channel="CNInvokeRequest"/>

<int-http:outbound-gateway request-channel="CNInvokeRequest" reply-channel="CNInvoketransformerOut"
    url="http://someurl" http-method="POST"
    expected-response-type="java.lang.String">
</int-http:outbound-gateway>    

<int:service-activator 
            input-channel="CNInvoketransformerOut" 
            output-channel="CNInvokeobjTransformerOut"
            ref="apiCNService" 
            method="responseCN"
            send-timeout="10000"/>

我知道错误 channel ,但这里的问题是,如果返回值为空,我不想继续或重试!只要打破它并停止流动即可。有人可以指出我可能的方法吗?

最佳答案

返回 null 结束流程;尽管根据您的配置,入站网关线程将在超时之前等待 10 秒以获取回复,但不会采取进一步的操作。

然后向调用者返回 500 状态;您可以使用 reply-timeout-status-code-expression 更改该行为。

由于您仅使用直接 channel ,因此您可以安全地将回复超时设置为零 - 在线程返回网关之前计时器不会启动。

关于java - Spring Integration - 如果值为空则中断流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40837453/

相关文章:

java - Vlcj 无法打开 mrl

java - 为什么 Robot.delay(int ms) 限制为 1 分钟?

java - Elassandra - 错误 : Could not find or load main class org. apache.cassandra.stress.Stress

java - RestTemplate:无法从 START_OBJECT token 中反序列化 OBJECT 的实例

java - 以编程方式启动和停止 Spring Integration 中的某些 IntegrationFlows?

java - 使用 apachePOI 将 Long 类型值插入 Excel

spring - 如何在使用 Spring WebClient 时捕获 IOException?

java - 作业参数正在被缓存

java - 使用类类型作为 Java DSL 有效负载类型路由器中的键

Spring Integration - 以编程方式创建/拆卸 channel