2

我有以下弹簧集成邮件配置。我的版本 1.0.4

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:mail="http://www.springframework.org/schema/integration/mail"
xmlns:int="http://www.springframework.org/schema/integration"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
    http://www.springframework.org/schema/integration/mail
    http://www.springframework.org/schema/integration/mail/spring-integration-mail-2.1.xsd 
    http://www.springframework.org/schema/util 
    http://www.springframework.org/schema/util/spring-util-2.0.xsd">


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

 <mail:inbound-channel-adapter id="imapAdapter"
                                  store-uri="imaps://user:pass@domain:993/inbox"                                    
                                  channel="recieveEmailChannel"
                                  auto-startup="true"                                      
                                  java-mail-properties="javaMailProperties">
    <int:poller> 
    <int:interval-trigger initial-delay="1000" interval="2000"
    fixed-rate="true"/>
    </int:poller>
</mail:inbound-channel-adapter>

<int:channel id="recieveEmailChannel">        
    <int:interceptors>
        <int:wire-tap channel="logger"/>
    </int:interceptors>
</int:channel>

<int:logging-channel-adapter id="logger" level="DEBUG"/>

<int:service-activator input-channel="recieveEmailChannel" ref="emailReceiverService" method="receive"/>

<bean id="emailReceiverService" class="com.mycompany.DefaultEmailReceiverUtilService">
</bean>

问题

Jboss 服务器的两个实例在不同的节点上运行,并且都指向同一个邮件服务器。我正在我的 DefaultEmailReceiverUtilService 类中插入一些数据库。是否可以在数据库中进行一封邮件双重输入?换句话说,相同的邮件将由两个 Jboss 处理。如果是,那么如何避免这种行为?

4

1 回答 1

2

是的,电子邮件不是交易资源。一种技术是确保一次只有一个适配器在运行,使用 JMX 等根据需要启动/停止适配器 - 将自动启动设置为“false”以防止它们在初始化期间启动并使用管理软件来控制它们. 如何使用另一个 Spring Integration 应用程序来管理另一个中的适配器的示例显示在“监控”示例应用程序(在中间文件夹中)中......

https://github.com/SpringSource/spring-integration-samples

如果您需要多个实例来处理工作负载,那么您可以使用 AMQP、JMS 等将工作分配给其他实例。

如果第二个实例只是为了弹性,那么您的管理应用程序可以监控这两个实例,如果一个实例出现故障,则在另一个实例中启动适配器。

于 2013-01-10T13:32:20.637 回答