我们有一个休息服务端点(Spring MVC),它将消息发布到mqtt代理。 我们计划缓存MqttClient,以便我们不必为每个请求创建它。
什么是最佳选择?将MqttClient存储在每个ThreadLocal对象中? 使用Apache Commons Pool等对象池?
对此有任何建议将不胜感激。此外,如果已经有Paho MqttClient的池实现可用吗?
答案 0 :(得分:0)
Paho mqtt客户端是一个有状态的客户端。换句话说,当它连接到代理时,TCP连接是有效的,直到某些方面决定断开连接或网络中存在一些丑陋的错误。
为每个线程(休息客户端)创建一个新的mqtt客户端并不是一个好主意,IMO。
您正在使用Spring,也许您可以使用单个方法@Bean
创建send()
对象(单例bean)。在那里,您可以根据需要创建任意数量的客户端。可能一个客户端没问题,但我不知道预期的负载是多少。然后,您@Controller
可以执行send()
方法...
另外,请注意同步。每个http请求都是“新”线程的一部分,并且您只有一个mqtt bean。