我是Spring集成的新手,我的要求是我将获得一个http请求到我的spring集成然后我需要按照以下步骤。
1)获取Http请求 2)发送给第三方(MQ) 3)将收到MQ的响应 4)处理消息并发回客户端。
我完成了这个应用程序并且工作正常,但是如果我同时收到多个请求,我面临的问题就像,在向Thridaprty发送请求时,我正在我的标题中构建一些UUID和correlID并保留在我的本地缓存,所以如果多个请求同时出现,我的代码就会创建相同的correlID。
我怀疑在同一毫秒时有多个请求存在问题。
请指导我出错的地方。
这是我的configuraiton,它适用于单个请求。
<int-http:inbound-gateway id="requestGateway"
supported-methods="GET"
request-channel="requestChannel"
reply-channel="replyChannel"
path="${cuteRequestURL}"
reply-timeout="${cuteRequestTimeout}"
>
</int-http:inbound-gateway>
<int:channel id="requestChannel"/>
<bean id="mapToSI" class="aero.sita.fw.cutelvihttp.helper.TransformLinkedMultiValueMapToSIMsg"/>
<int:transformer id="abc"
input-channel="requestChannel"
output-channel="Map"
ref="mapToSI"
method="transformLinkeMapToSpringIntegrationMessage" />
<int:channel id="Map"/>
<bean id="constructRequiredParams" class="SomeParamLogic">
<constructor-arg name="Value1" value="A" />
<constructor-arg name="Value2" value="B" />
<constructor-arg name="Value3" value="C" />
</bean>
<int:transformer id="constructMessageHeaderVendor"
input-channel="Map"
output-channel="inputRequestChannel"
ref="constructRequiredParams"
method="amend" />
<int:channel id="inputRequestChannel" />
<int:service-activator input-channel="inputRequestChannel"
output-channel="responseValidatorChannel"
method="xyz"
ref="serviceActivator"/>
<int:channel id="responseValidatorChannel"/>
<bean id="serviceActivator" class="ServiceActivator"/>
<int:channel id="replyChannel"/>
<int:channel id="dataChannel" />
<int:service-activator input-channel="dataChannel"
ref="destinationQueue"
method="transform"/>
<bean id="destinationQueue" class="XYZ">
<property name="requestQueue" value="ProducerName" />
<property name="replyQueue" value="Replier" />
</bean>
<int-xml:validating-filter discard-channel="errorChannel"
id="jmsInValidator"
input-channel="dataChannel"
output-channel="nullChannel"
schema-location="ThirdParty.xsd"
schema-type="xml-schema"
throw-exception-on-rejection="true" />
<int-xml:validating-filter discard-channel="errorChannel"
id="jmsInValidator"
input-channel="responseValidatorChannel"
output-channel="replyChannel"
schema-location="classpath:Client.xsd"
schema-type="xml-schema"
throw-exception-on-rejection="true" />
答案 0 :(得分:0)
将评论复制到答案以便正确解决问题。
您应该考虑使用现有的uuid算法来避免冲突。还有锁存障碍来保护资源免受并发访问。任何方式问题都与Spring Integration完全相同。
现在我想了解线程安全
是的,确实如此。由于大多数Spring Integration组件都是无状态的,因此没有任何线程冲突。只有聚合器具有MessageStore
的某种状态,但它经过了很好的测试。因此,尝试在自己的代码中找到瓶颈。