我已经看过聚合器的代码,据我所知,它执行以下操作:
向群组添加消息 如果该组可以释放,那么: 完成组并将其发送到输出/回复通道 if(过期组) 从邮件存储中删除组和邮件 否则只删除消息
这里我需要一些ACID事务支持来做全部或全部,但在阅读文档后,我找不到如何做到这一点。你能告诉我是否有可能,如果可能,我怎么能实现这个目标?
提前致谢
方面 Guzman的
答案 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(..)) && bean(toAggChannel)" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="aggTx" />
</aop:config>
这将处理正常的交付和释放。
要使exipiring partial groups具有事务性,请使用MessageGroupStoreReaper
并以类似方式对MessageGroupStore.expireMessageGroups()
方法进行事务处理。
使用group-timeout
或group-timeout-expression
时,您目前无法使交易中的部分组失效。