Apache Camel - Маршрутизация сообщений в конечную точку JPA - хранение заказов, но разделение на пулы на основе заголовка категории - PullRequest
0 голосов
/ 17 октября 2011

У нас есть простой проект, который принимает несколько сообщений от нескольких конечных точек (агентов).Все эти агенты выводят одно и то же сообщение в формате (объектный объект для размещения в базе данных).Все агенты пишут в одну очередь, и мы используем их и отправляем в базу данных через JPA.

Таким образом, по сути, в системе имеется коллекция производителей, пишущих сообщения в одну очередь.Очередь однопоточна и просто принимает сообщения по мере их поступления и сбрасывает их в базу данных.

Проблема в том, что этот метод медленный.Есть ли какая-либо функциональность в Camel (например, повторное секвенирование), которую мы могли бы использовать, чтобы разделить эти сообщения на основе их источника.Таким образом, хотя сообщения от Агента1 необходимо сохранять в порядке их создания, сообщения от Агента2 являются отдельными, поэтому им не следует ждать порядка сообщений Агента1.Для двух агентов это простая проблема, поскольку мы просто создаем две очереди, по одной для каждого агента.У нас есть несколько агентов, поэтому нам нужно решение, которое можно масштабировать.

Существуют ли какие-либо закономерности для достижения этой цели на верблюде?Мы могли бы написать нашу собственную очередь удержания, которая синхронизируется с именем агента и только когда-либо передает одно сообщение в многопоточную очередь записи JPA, но это было бы немного обходным способом сделать вещи, поскольку мы должны были бы либонастроить обратный вызов из очереди в jpa camel route, иначе мы не будем использовать верблюда и просто сделаем это через нашего собственного менеджера (не то чтобы это было сложно, но было бы здорово, если бы мы могли сделать все это с использованием Camel или чего-то еще)и не надо изобретать велосипед так сказать).

1 Ответ

1 голос
/ 17 октября 2011

Если вы используете очередь сообщений JMS, посмотрите на группы сообщений

Apache ActiveMQ документацию об этом здесь: http://activemq.apache.org/message-groups.html

и этот FAQ http://activemq.apache.org/how-do-i-preserve-order-of-messages.html

Как правило, вы можете использовать свойство JMSXGroupID JMS для маркировки идентификатора агента, например, agent1, agent2 и т. Д.

Тогда в очереди сообщений JMS могут быть параллельные потребители, которые могут работать параллельно на основе JMSXGroupID. Но все же сохраняйте порядок в каждой группе. Это означает, что вы можете параллельно записывать в JPA agent1, agent2, ... agentN.

...