如何在处理入站消息后异步发布新的 JMS 消息?

发布于 2024-11-05 04:52:00 字数 403 浏览 7 评论 0原文

我们有一个场景,在使用消息驱动 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

魂ガ小子 2024-11-12 04:52:00

你尝试过吗?

我的理解是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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文