2010-06-25 3 views
4

У меня есть это:Spring - Асинхронные очереди для отправки почты

<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" /> 

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

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

Приветствия

+0

В вопросе есть опечатка (obvioulsy). – iwein

ответ

3

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

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

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

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

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