微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 JMS 队列侦听器 onMessage 方法中运行异步代码

如何解决在 JMS 队列侦听器 onMessage 方法中运行异步代码

在我的应用程序中,我将 JMS 消息发布到代表要执行的任务的队列中。当调用监听器的onMessage方法时,我需要执行的任务会自动运行在自己的线程中,所以是异步的。

应用程序是在 Spring Boot 上编写的,我使用 Kubernetes 进行容器编排,以便动态调整工作进程的数量

我见过实现这种工作队列和 JMS 侦听器模式的示例,并且我总是看到在 onMessage 方法内部调用同步方法

所以,我的问题是:等待异步操作完成后再返回 onMessage 回调是否更好?

谢谢

解决方法

在侦听器线程上执行异步处理通常不是一个好主意。

如果您想增加并发性,请改为增加容器的并发性(以创建多个消费者)。

如果您出于某种原因必须进行异步,则应暂停侦听器线程直到进程完成,以避免在发生故障时丢失消息。

此外,如果您退出侦听器,您可能会在当前消息完成之前收到一条新消息。即使使用 CLIENT_ACKNOWLEDGE,您也可能无序确认消息,或者您必须跟踪未确认的消息。

通常,在侦听器线程上进行工作会更简单。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。