Объедините несколько каналов в Spring Integration
У меня интенсивно загруженный (множество внешних вызовов) поток интеграции, который использует PriorityQueue перед входом в основной активатор службы. Я хочу добавить канал исполнителя, чтобы улучшить загрузку системы, но я не вижу простых способов объединить эти каналы.
<int:channel id="monitorInPriorityUpdate">
<int:priority-queue/>
</int:channel>
<int:transformer id="monitorLogTransformerStub"
input-channel="monitorInPriorityUpdate" output-channel="monitorInUpdate"
expression="payload" />
<int:channel id="monitorInUpdate">
<int:dispatcher task-executor="monitorExecutor"/>
</int:channel>
Мне нужно было создать 2 дополнительных компонента, чтобы это работало, но есть ли способ объединить несколько каналов интеграции Spring в один, без добавления новых компонентов?
1 ответ
На самом деле, похоже, что не ebough info. Но я пытаюсь угадать. Ты нуждаешься в этом:
<int:channel id="priorityChannel">
<int:priority-queue/>
</int:channel>
<int:bridge input-channel="priorityChannel" output-channel="executorChannel">
<int:poller fixed-rate="100"/>
</int:bridge>
<int:channel id="executorChannel">
<int:dispatcher task-executor="threadPoolExecutor"/>
</int:channel>
Здесь вы используете мост для перемещения сообщений с одного канала на другой.
Или это:
<int:channel id="priorityChannel">
<int:priority-queue/>
</int:channel>
<int:service-activator input-channel="priorityChannel" ref="service">
<int:poller fixed-rate="100" task-executor="threadPoolExecutor"/>
</int:service-activator>
Здесь вы просто помещаете свои сообщения из priorityChannel в taskExecutor с помощью Poller.
Нестандартно смешивать проблемы в одном канале. Каждый тип канала играет свою конкретную роль. То, чего вы хотите добиться, - это не просто минимизировать ввод текста, но даже если это окажется решением для вас, оно будет очень сложным и не надежным.