如何解决在 JMS 队列侦听器 onMessage 方法中运行异步代码
在我的应用程序中,我将 JMS 消息发布到代表要执行的任务的队列中。当调用监听器的onMessage
方法时,我需要执行的任务会自动运行在自己的线程中,所以是异步的。
应用程序是在 Spring Boot 上编写的,我使用 Kubernetes 进行容器编排,以便动态调整工作进程的数量。
我见过实现这种工作队列和 JMS 侦听器模式的示例,并且我总是看到在 onMessage
方法内部调用同步方法。
所以,我的问题是:等待异步操作完成后再返回 onMessage
回调是否更好?
谢谢
解决方法
在侦听器线程上执行异步处理通常不是一个好主意。
如果您想增加并发性,请改为增加容器的并发性(以创建多个消费者)。
如果您出于某种原因必须进行异步,则应暂停侦听器线程直到进程完成,以避免在发生故障时丢失消息。
此外,如果您退出侦听器,您可能会在当前消息完成之前收到一条新消息。即使使用 CLIENT_ACKNOWLEDGE,您也可能无序确认消息,或者您必须跟踪未确认的消息。
通常,在侦听器线程上进行工作会更简单。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。