微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

集群环境中的 imap-idle-channel-adapter

如何解决集群环境中的 imap-idle-channel-adapter

一个使用 Spring Integration (imap-idle-channel-adapter) 和 Spring Boot 的应用程序部署在一个 Weblogic 集群环境中(4 台服务器)。 如果 SI 适配器 imap-idle-channel-adapter 部署在一台服务器上,它可以很好地从 Exchange Server 中提取电子邮件。 但是,如果部署在集群中(4 台服务器),则电子邮件会处理 4 次(每台服务器一次)。

问题:在集群环境中部署此类应用程序是否有任何配置或良好做法?

使用:

  • Spring Boot 2.5.1
  • Spring 集成邮件 5.5.0
  • Weblogic 12c

在此博客之后创建了一个战争文件

https://o7planning.org/11901/deploy-spring-boot-application-on-oracle-weblogic-server

imap-idle-channel-adapter和mail属性的配置是这样的。

  <int-mail:imap-idle-channel-adapter id="customAdapter"
     store-uri="imaps://[username]:[password]@imap.gmail.com/INBox"
     channel="receiveChannel"
     auto-startup="true"
     should-delete-messages="false"
     auto-close-folder="false"
     simple-content="true"
     java-mail-properties="javaMailProperties"/>
  
  <util:properties id="javaMailProperties">
     <prop key="mail.imap.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop>
     <prop key="mail.imap.socketFactory.fallback">false</prop>
     <prop key="mail.store.protocol">imaps</prop>
     <prop key="mail.debug">false</prop>
  </util:properties>

解决方法

嗯,从技术上讲,它必须是这样,因为默认的 SearchTerm 是不拉取 DELETEDSEEN 的消息。如果您的邮件服务器不支持这些标志,则使用 USER。而且由于您没有指定某些自定义,因此在您的所有实例上始终相同 - spring-integration-mail-adapter

但是感觉 Exchange Server 以异步方式设置这些标志,因为您声称所有实例都收到相同的消息。

因此,另一种方法是通过共享元数据存储和幂等接收器在您的应用程序中使用一些人工的东西:https://docs.spring.io/spring-integration/docs/current/reference/html/messaging-endpoints.html#idempotent-receiver

您也可以自定义 SearchTermStrategy 以通过其他方式过滤来自邮箱的邮件,而不是我们尝试对默认邮件中的 SEENUSER 执行的操作:https://docs.spring.io/spring-integration/docs/current/reference/html/mail.html#imap-seen

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。