ali-sdk / ali-ons

Aliyun Open Notification Service Client
MIT License
151 stars 43 forks source link

MQProducer.close() 无法彻底关闭底层资源 #86

Open Chunlin-Li opened 5 years ago

Chunlin-Li commented 5 years ago

背景: 因为 Producer 并不会持续发送数据,所以希望在收到任务调度的时候,初始化 Producer 并处理异步任务进行发送,任务结束后,销毁 Producer 以免占用额外的资源(CPU,内存,socket 连接等)

问题: 使用 Producer 发送数据后,看到 socket 的建立以及周期任务的执行;但调用 .close() 方法后,日志显示已经 unregister producer 并且 producer close 了,但已建立的 socket 连接依然是 ESTAB 状态,且日志依然周期性的输出 mq 相关任务的执行

ali-one 版本: 3.6.5 node: 10.9.0

----------- 2019-06-19 22:23-------- 排查发现是因为 _producerTable 里面除了自己注册上去的 producer 外,还有一个 defaultProducer。 在 close 的时候,自己的 producer 移除掉了,但是 defaultProducer 还在, 导致 mq_client 不能关闭 mq_client_api.

是否可以考虑在 close 时检查当前是否只剩一个 defaultProducer,如果是的话就将其一并关掉,如果还有其他 Producer 或 Consumer 则继续保留。