0

我们有一个场景,在使用消息驱动 Bean 处理传入消息 A 之后,我们将后续消息 B 写入另一个队列。我们使用的是 Glassfish 3.1。

在这种情况下,一个目标是发布消息 B 可以异步进行,并且不需要是可靠的——也就是说,如果在处理完消息 A 之后我们尝试发布消息 B 并且它失败了,我们不会回滚对消息 A 的处理.

第二个目标是发布消息 B 不应阻塞或扩展覆盖消息 A 的事务的范围。我们希望覆盖消息 A 的事务尽快关闭,而不是在处理消息 B 时保持打开状态。

一个想法是为此目的创建一个带有@Asynchronous 标记的方法的特殊EJB,并在onMessage() 的末尾查找并调用该EJB。但是,我们不确定这是否是这种情况下的最佳做法。

我们对引入一个额外的编排解决方案(例如 ESB)不感兴趣,它可以处理这种情况和更复杂的情况。

4

1 回答 1

0

你试过了吗?

我的理解是 MDB 在他们自己的事务中。所以B的问题不会让A回滚。这应该是默认行为。

于 2011-05-06T16:52:32.097 回答