我们有一个场景,在使用消息驱动 Bean 处理传入消息 A 之后,我们将后续消息 B 写入另一个队列。我们使用的是 Glassfish 3.1。
在这种情况下,一个目标是发布消息 B 可以异步进行,并且不需要是可靠的——也就是说,如果在处理完消息 A 之后我们尝试发布消息 B 并且它失败了,我们不会回滚对消息 A 的处理.
第二个目标是发布消息 B 不应阻塞或扩展覆盖消息 A 的事务的范围。我们希望覆盖消息 A 的事务尽快关闭,而不是在处理消息 B 时保持打开状态。
一个想法是为此目的创建一个带有@Asynchronous 标记的方法的特殊EJB,并在onMessage() 的末尾查找并调用该EJB。但是,我们不确定这是否是这种情况下的最佳做法。
我们对引入一个额外的编排解决方案(例如 ESB)不感兴趣,它可以处理这种情况和更复杂的情况。