Объедините несколько каналов в 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.

Нестандартно смешивать проблемы в одном канале. Каждый тип канала играет свою конкретную роль. То, чего вы хотите добиться, - это не просто минимизировать ввод текста, но даже если это окажется решением для вас, оно будет очень сложным и не надежным.

Другие вопросы по тегам