2016-12-04 5 views
1

Я новичок в интеграции весной, мое требование - я получу один HTTP-запрос к моей интеграции с весной, тогда мне нужно будет следовать нижеуказанным шагам.Весенняя интеграция http входящего шлюза проблема соотечественника

1) получить HTTP Request 2) отправить ThirdParty (MQ) 3) будет Получать ответ от MQ 4) обработать сообщение и послать назад к клиенту.

Я закончил с этим приложением и работал нормально, но когда, если я получаю несколько запросов одновременно, я сталкиваюсь с проблемой, например, при отправке запроса в Thridaprty. Я создаю некоторые UUID и коррелид в своем заголовке и сохраняю в своем локальный кеш, поэтому, если несколько запросов поступают в одно и то же время, мой код создает одинаковые коррелированные идентификаторы.

Я подозреваю, что существует проблема с несколькими запросами за одни миллионы секунд.

любезно сообщите мне, что происходит не так.

Вот мой конфигуратор, который отлично работает для одного запроса.

<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

Не знаете, почему вы показываете конфигурацию интеграции, что вы подтверждаете, что состояние гонки в вашем коде генерирует эту uuid и корреляцию. Я думаю, вы должны показать это вместо этого. И еще лучше просто напишите какой-нибудь тест-тест, чтобы обнаружить состояние гонки. Otoh, вы должны думать, чтобы использовать существующие алгоритмы uuid, чтобы избежать столкновений. Кроме того, существуют «блокирующие» барьеры для защиты ресурса от одновременного доступа. В любом случае проблемы смотрятся далеко от Spring Integration –

+0

Спасибо Artem Bilan за ваш ответ. – user3749024

+0

Спасибо Artem Bilan за ваш ответ. Позвольте мне пересмотреть мой вопрос, интеграция Spring - это потокобезопасная? Я использую активатор службы для прослушивания ответа третьей стороны (запрос/ответ), как только я получаю ответ, отправляемый обратно клиенту HTTP. HTTP -> my applicaiton - это синхронный режим, а мое приложение -> MQ Applicaiotn - это Aysnchrouns, поэтому активатор службы будет поддерживать threadafety здесь, вот что я хотел бы спросить, любезно подсказать, согласно вашему предложению я изменил создание UUID его рабочего штрафа, который проблема решена, теперь я хочу знать о потоковом безопасном – user3749024

ответ

0

Копирование комментариев в ответ для правильного закрытия вопроса.

Вам следует подумать об использовании существующих алгоритмов uuid, чтобы избежать столкновений. Также существуют блокирующие барьеры для защиты ресурсов от одновременного доступа. В любом случае проблемы выглядят далеко от Spring Integration.

теперь я хочу знать о Потокобезопасной

Да, это так. Поскольку большинство компонентов Spring Integration являются апатридами, конфликт нитей не возникает. Только агрегатор имеет какое-то состояние с MessageStore, но он хорошо протестирован. Итак, попробуйте найти узкое место в вашем собственном коде.