Проблема с сервисом REST Camel при параллельных вызовах
Я создал REST-сервис с Apache Camel (REST DSL), работающим на контейнере Karaf, который принимает список элементов и возвращает их доступность. Проблема в том, что если служба вызывается параллельно, она не возвращает правильные результаты. Например, предположим, что у нас есть два следующих вызова:
Вызов 1: пункт1, пункт2 Вызов 2: пункт3, пункт 4
Я ожидал следующих двух ответов
Ответ 1: доступность 1, доступность 2 Ответ 2: доступность 3, доступность 4
Но вместо этого я получаю два ответа со смешанными возможностями
Ответ 1: доступность 1, доступность 2, доступность 3, доступность 4, ответ 2: доступность 1, доступность 2, доступность 3, доступность 4
Вероятно, эта проблема возникает из-за связанного компонента, который у меня есть для службы, но позвольте мне дать вам обзор того, что я сделал в контексте Camel.
<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>
Как вы можете заметить, когда сервис вызывается, он идет по прямому маршруту, который выполняет свою работу. Я использую availableabilitiesBean для инициализации объекта ответа (List), затем для каждого элемента запроса я получаю доступность из базы данных и помещаю результат в объект ответа, который был ранее инициализирован (buildResponse), и в конце я возвращаю этот объект с помощью метода getResponse.
Проблема в том, что бин имеет одноэлементную область видимости, а это означает, что для обоих вызовов используется один и тот же бин. Итак, вызов 1 записывает ответ для item1 и item2, но в то же время вызов 2 добавляет в ответ также item3 и item 4.
Есть ли возможность создать бин области действия запроса? Или следовать другому подходу, чтобы преодолеть эту проблему?
Большое спасибо!