Я создал службу REST с Apache Camel (REST DSL), работающим в контейнере Karaf, который принимает список элементов и возвращает их доступность. Проблема в том, что если служба вызывается параллельно, она не возвращает правильные результаты. Например, предположим, что у нас есть два следующих вызова:
Звоните 1 : item1, item2
Звоните 2 : item3, item4
Я бы ожидал следующих двух ответов
Ответ 1 : доступность элемента 1, доступность элемента 2
Ответ 2 : доступность элемента 3, доступность элемента 4
Но вместо этого я получаю два ответа со смешанными возможностями
Ответ 1 : доступность элемента 1, доступность элемента 2, доступность элемента 3, доступность элемента 4
Ответ 2 : доступность 1, доступность 2, доступность 3, доступность 4
Возможно, эта проблема возникает из-за связанного компонента, который у меня есть для службы, но позвольте мне дать вам обзор того, что я сделал в контексте верблюда.
<camelContext>
<restConfiguration ... />
<rest path="/" consumes="application/json" produces="application/json">
<post uri="/availabilities" type="com.xxx.ArticleListReq">
<to uri="direct:availabilities"/>
</post
</rest>
<route id="route.Availabilities">
<from uri="direct:availabilities"/>
<bean ref="availabilitiesBean" method="init"/>
<split parallelProcessing="true">
<simple>${body.articles}</simple>
...
SQL calls for each item
<bean ref="availabilitiesBean" method="buildResponse"/>
</split>
<bean ref="availabilitiesBean" method="getResponse"/>
</route>
</camelContext>
Как вы можете заметить, когда служба вызывается, она идет по маршруту direct: наличный , который выполняет эту работу. Я использую availableabilitiesBean , чтобы инициализировать объект ответа (Список), затем для каждого элемента запроса я получаю доступность из базы данных и помещаю результат в объект ответа, который был ранее инициализирован ( buildResponse ) и в конце я возвращаю этот объект методом getResponse .
Проблема в том, что бин имеет одноэлементную область видимости, и это означает, что для обоих вызовов используется один и тот же бин. Итак, вызов 1 записывает ответ для item1 и item2, но в то же время вызов 2 добавляет в ответ также item3 и item 4.
Есть ли возможность создать бин области действия запроса? Или использовать другой подход, чтобы преодолеть эту проблему?
Большое спасибо!