首先澄清一下:我是Spring-integration的新手。
我想通过pop3频道接收邮件。我知道并且(这么认为)了解轮询机制。但我也希望通过客户端事件触发新邮件的问题。这可以通过网关或事件或特殊服务定位器来完成吗?
谢谢勇敢的助手!
答案 0 :(得分:2)
不想找到我之前展示的类似解决方案,即使是在SO上也是如此。 但正如你所说你是新手,所以我只是为你提供解决方案。
好吧,现在你有这样的事情:
<int-mail:inbound-channel-adapter store-uri="pop3:foo"
channel="channel">
<int:poller fixed-rate="60000"/>
</int-mail:inbound-channel-adapter>
在配置为Pop3MailReceiver
提供bean的背景下。
要获得解决方案,您应该将<int-mail:inbound-channel-adapter/>
更改为此配置:
<beans:bean id="pop3MailReceiver" class="org.springframework.integration.mail.Pop3MailReceiver"/>
<int:inbound-channel-adapter channel="getEmailsChannel" expression="''">
<int:poller fixed-rate="60000"/>
</int:inbound-channel-adapter>
<int:service-activator input-channel="getEmailsChannel" output-channel="processEmailsChannel"
expression="@pop3MailReceiver.receive()"/>
Pop3MailReceiver
<int:inbound-channel-adapter>
会触发您的Pop3MailReceiver
,因为您的案例已经在调用<int:service-activator>
<int:service-activator>
反过来只是来自POP3的民意调查邮件。要注意的一点是,MailReceiver#receive()
会返回一组邮件消息,因此可能需要在收到后将其拆分,以便与<int-mail:inbound-channel-adapter/>
保持一致。