2015-10-27 4 views
0

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

Существует очередь, когда сообщения из другого приложения становится толкнуло. Мое приложение потребляет сообщения из очереди, массирует некоторые данные, а затем выталкивает их в другую исходящую очередь. Цель состоит в том, чтобы обрабатывать сообщения одновременно.

Согласно моему пониманию, мы можем иметь 2 approaches-

1- Использование #Poller

<int:service-activator ref="messageProcessor" method="process" input-channel="incomingChannel"> 
    <int:poller fixed-rate="100" task-executor="executor" /> 
<int:service-activator/> 
<task:executor id="executor" pool-size="10"/> 

2- Использование #Dispatcher

<int:channel id="incomingChannel"> 
    <int:dispatcher task-executor="executor"/> 
</int:channel> 
<int:service-activator ref="messageProcessor" method="process" input-channel="incomingChannel" /> 

<task:executor id="executor" pool-size="10"/> 

Глядя на основе конфигурации Poller кажется что в пуле будет доступно несколько потоков, получение сообщений и обработка их одновременно. Концерн здесь -

i) Poller будет продолжать работать в фоновом режиме без необходимости (ресурс попал).

ii) Даже если сообщения есть на канале, будет растрачивать миллисекунды на основе фиксированной скорости (поскольку poller будет получать сообщения через каждые 100 секунд).

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

Если это регистру

мне нужно иметь несколько активаторов услуг, связанных с каналом ли?

Есть ли способ подключить несколько экземпляров конфигурации активатора службы динамически?

Предложите мне, что лучше всего подходит для решения этой проблемы. Благодарю.

ответ

0

(i) Опрос чрезвычайно легкий; даже с фиксированной скоростью 0, поток будет блокироваться в канале в течение 1 секунды (по умолчанию - receive-timeout); Я сомневаюсь, что вы бы даже измерили процессор, используемый простаивающим опроллером.

(ii) См. (I) - сокращение интервала опроса облегчит любую задержку.

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

Вместо этого используйте адаптер канала с управляемым сообщением и используйте его параметры параллелизма для увеличения количества потоков; затем используйте прямые каналы.

+0

Привет, Гарри, спасибо за быстрый ответ. Я использую jms-inbound-channel-adapter для извлечения сообщений из очереди. После извлечения я помещаю это сообщение в канал сообщения (для регистрации необработанного сообщения с помощью проводного подключения). Из этого канала сообщений я хочу, чтобы он обрабатывался одновременно. Я думаю, я пойду с подходом подольтера, это кажется прекрасным. – Sachin

+0

Я предлагаю вам перейти к адаптеру входящего канала, управляемому сообщениями, и использовать его параллелизм. –

Смежные вопросы