Spring - Async Queue для отправки почты - PullRequest
4 голосов
/ 25 июня 2010

У меня есть это:

 <si:poller max-messages-per-poll="10" id="defaultPoller" default="true">
  <si:interval-trigger interval="5000"/>
 </si:poller>
 <si:channel id="emailIn"/>
 <si:channel id="emailOut"/>

 <si:service-activator input-channel="emailIn" output-channel="emailOut" ref="mailService" method="recieveMessage"/>

 <si:gateway id="gateway" service-interface="com.blah.MailSender" default-request-channel="emailIn"/>

 <si:outbound-channel-adapter channel="emailOut" ref="mailService" method="recieveMessage" />

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

Я делаю это неправильно (конечно, да), но мне интересно, есть ли что-то, чего мне не хватает в этой конфигурации, или у меня просто неправильный подход?

Приветствия

1 Ответ

4 голосов
/ 28 июня 2010

По умолчанию все каналы в Spring Integration являются синхронными.Это сознательное проектное решение, которое поможет вам, например, сохранить границы транзакций и контексты безопасности.Если вы хотите выполнить асинхронную передачу обслуживания, вы должны добавить исполнителя задач в свой диспетчер или очередь в свой канал:

<channel>
  <dispatcher task-executor="pool"/>
</channel>

<channel>
  <queue capacity="10"/>
</channel>

Посмотрите на конфигурации канала в справочном руководстве для некоторыхподробности о диспетчерах и очередях.См. Также раздел в DirectChannel и раздел ExecutorChannel ниже этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...