如何在处理入站消息后异步发布新的 JMS 消息?
我们有一个场景,在使用消息驱动 Bean 处理传入消息 A 后,我们将后续消息 B 写入另一个队列。我们正在使用 Glassfish 3.1。
本例中的一个目标是发布消息 B 可以异步进行,并且不需要可靠 - 这意味着,如果在处理消息 A 后我们尝试发布消息 B 并且失败,我们不会回滚消息 A 的处理 第二个目标是发布消息 B 不应阻塞或扩展涵盖消息 A 的事务的范围。
我们希望涵盖消息 A 的事务尽快关闭,并且在处理消息 B 时不要保持打开状态。
一种想法是创建一个特殊的 EJB,并为此目的使用标记为 @Asynchronous 的方法,并在 onMessage() 末尾查找并调用该 EJB。但是,我们不确定这是否是本例中的最佳实践。
我们没有兴趣引入额外的编排解决方案(例如 ESB)来处理这种情况以及更复杂的情况。
We have a scenario where, after processing an incoming message A with a Message-Driven Bean, we write a follow-up message B to another queue. We are using Glassfish 3.1.
One goal in this case is that posting message B can take place asynchronously, and does not need to be reliable - meaning, if after processing message A we attempt to post message B and it fails, we do not roll back the processing for message A.
A second goal is that posting message B should not block or extend the scope of the transaction covering message A. We would like the transaction covering message A to be closed as soon as possible and not be held open while message B is being processed.
One idea is to create a special EJB with a method marked @Asynchronous for this purpose, and looking up and invoking that EJB at the end of onMessage(). We're not sure if that is the best practice in this case, however.
We aren't interested in bringing in an extra orchestration solution (e.g. ESB) that would handle this and more complex cases.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
你尝试过吗?
我的理解是MDB 是在它们自己的事务中。所以 B 的问题不会导致 A 回滚。这应该是默认行为。
Have you tried it?
My understanding is that MDB's are in their own transactions. So a problem with B isn't going to roll A back. This should be the default behavior.