multithreading - ActiveMQ 线程
问题描述
线程停止和退出需要多长时间ActiveMQConsumer
?关闭应用程序时出现分段错误。我发现这是由于 ActiveMQ 线程。如果我评论消费者,则问题不再存在。目前我cms::MessageConsumer
在activemq-cpp-library-3.9.4中使用。
我看到activemq::core::ActiveMQConsumer
hasisClosed()
函数可以用来确认消费者是否已关闭,然后继续删除对象,从而避免分段错误。我假设这将解决我的问题。但我想知道使用这些 ActiveMQ 对象避免线程问题的正确方法是什么?
我与消费者和生产者使用相同的会话,但是当代理停止并启动时,ActiveMQ 重新连接正在添加线程。我没有使用故障转移。
因此,我将会话分开发送和接收,并分别实例化了连接工厂、连接和会话。在由于上述分段错误而未清理应用程序内存之前,此设计没有问题。
这就是为什么我想知道什么时候应该使用cms::MessageConsumer
vs ActiveMQConsumer
?
解决方案
ActiveMQ 网站有包含 CMS 客户端示例的文档。我建议阅读这些并遵循示例代码,了解它如何在应用程序关闭之前关闭连接和库资源,以确保适当地清理资源。
与 JMS 一样,CMS 消费者实例与创建它的会话中的线程链接,因此,如果您要关闭一个好的规则,请遵循关闭会话以确保在您删除任何消费者实例之前停止消息传递。
推荐阅读
- excel - Excel VBA 进入每个工作表中的单元格并刷新(F2+Enter)
- docker - 打包预配置的 solace docker 镜像的推荐方法是什么
- javascript - 如何计算给定时间之前的小时数
- python-3.x - 我正在尝试将字典列表中的数据导出到数据框中,但我不断收到此错误:标量变量的索引无效
- swift - 如何使用 swift 修复 JSON-RPC 错误代码 591
- php - 如何在 Elastic Search 中进行多重排序
- javascript - 手风琴的 CSS 过渡动画顺序问题
- node.js - 如何在 Electron-Angular 项目中使用永远的监视器?
- php - Laravel - 如何获取外键并将其传递给控制器
- gatling - 使用元组的内容作为变量会话