交易和聚合器

时间:2014-09-04 15:05:35

标签: spring-integration

我已经看过聚合器的代码,据我所知,它执行以下操作:

向群组添加消息 如果该组可以释放,那么:    完成组并将其发送到输出/回复通道    if(过期组)       从邮件存储中删除组和邮件    否则只删除消息

这里我需要一些ACID事务支持来做全部或全部,但在阅读文档后,我找不到如何做到这一点。你能告诉我是否有可能,如果可能,我怎么能实现这个目标?

提前致谢

方面 Guzman的

1 个答案:

答案 0 :(得分:0)

您可以将入站(直接)频道设置为聚合器事务...

<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="send" />
    </tx:attributes>
</tx:advice>

<aop:config>
    <aop:pointcut id="aggTx" expression="execution(* *.send(..)) &amp;&amp; bean(toAggChannel)" />
    <aop:advisor advice-ref="txAdvice" pointcut-ref="aggTx" />
</aop:config>

这将处理正常的交付和释放。

要使exipiring partial groups具有事务性,请使用MessageGroupStoreReaper并以类似方式对MessageGroupStore.expireMessageGroups()方法进行事务处理。

使用group-timeoutgroup-timeout-expression时,您目前无法使交易中的部分组失效。