我的集成应用程序中有一个HTTP入站网关,我将在一些保存操作期间调用它。就是这样。如果我有一个产品,我会调用一次API,如果我有多次,那么我会多次调用。问题是,对于单次调用,SI工作得很好。但是对于多个呼叫,请求和响应都搞砸了。我认为Spring Integration Channels就像MQ一样,但它不是?
让我解释一下。我们说我有2个产品。首先,我为产品A调用SI,然后为B.调用A的响应映射到请求B!它一直在发生。我不想使用一些肮脏的黑客,比如等待第一个响应来再次调用。这意味着系统必须等待很长时间。我想我们可以使用任务执行器在Spring Integration中完成它,但是在那里有所有基本样本,我找不到合适的样本。所以请帮我看看如何解决这个问题!
我的配置是:
<int:channel id="n2iMotorCNInvokeRequest" />
<int:channel id="n2iMotorCNInvokeResponse" />
<int:channel id="n2iInvoketransformerOut" />
<int:channel id="n2iInvokeobjTransformerOut" />
<int:channel id="n2iInvokegatewayOut" />
<int-http:inbound-gateway id="i2nInvokeFromPOS"
supported-methods="GET"
request-channel="i2nInvokeRequest"
reply-channel="i2nInvokeResponse"
path="/postProduct/{Id}"
mapped-response-headers="Return-Status, Return-Status-Msg, HTTP_RESPONSE_HEADERS"
reply-timeout="50000">
<int-http:header name="Id" expression="#pathVariables.Id"/>
</int-http:inbound-gateway>
<int:service-activator id="InvokeActivator"
input-channel="i2nInvokeRequest"
output-channel="i2nInvokeResponse"
ref="apiService"
method="getProductId"
requires-reply="true"
send-timeout="60000"/>
<int:transformer input-channel="i2nInvokeResponse"
ref="apiTransformer"
method="retrieveProductJson"
output-channel="n2iInvokeRequest"/>
<int-http:outbound-gateway request-channel="n2iInvokeRequest" reply-channel="n2iInvoketransformerOut"
url="http://10.xx.xx.xx/api/index.php" http-method="POST"
expected-response-type="java.lang.String">
</int-http:outbound-gateway>
<int:service-activator
input-channel="n2iInvoketransformerOut"
output-channel="n2iInvokeobjTransformerOut"
ref="apiService"
method="productResponse"
requires-reply="true"
send-timeout="60000"/>
i2nInvokeFromPOS网关是我们从Web应用程序调用的,它将创建所有产品。此Integration API将获取该数据,并将其发布到后端系统,以便它也可以更新到其他POS位置!
步骤:
我会将productId发送到i2nInvokeFromPOS。
apiTransformer - &gt; retrieveProductJson()方法将根据ID
使用http:outbound-gateway
从后端获取响应并更新在数据库中上传的产品状态。发生在apiService - &gt; productResponse()
收到A的响应后,我得到的全部是请求B的HTTP 500错误!但Backend API就好了。
答案 0 :(得分:0)
框架是完全线程安全的 - 如果您看到不同请求/响应之间的串扰,那么框架正在调用的一个(或多个)组件不是线程安全的。
您无法在字段中保留状态,例如,从服务激活器调用的代码。