2017-10-21 57 views
0

我们有一个休息服务端点(Spring MVC),它将消息发布到mqtt代理。 我们计划缓存MqttClient,以便我们不必为每个请求创建它。Eclipse Paho MqttClient对象池

什么是最佳选择?将MqttClient存储在每个ThreadLocal对象中? 使用诸如Apache Commons Pool之类的对象池?

任何意见,将不胜感激。另外,如果已经有Paho MqttClient的池实现可用?

回答

0

Paho mqtt客户端是一个有状态的客户端。换句话说,当它连接到代理时,TCP连接将处于活动状态,直到某些方面决定断开连接或者网络中存在一些丑陋的错误。

为每个线程(休息客户端)创建一个新的mqtt客户端不是一个好主意,IMO。

您正在使用Spring,也许您可​​以使用单一方法send()创建@Bean对象(singleton bean)。您可以根据需要创建尽可能多的客户端。大概一个客户可以,但我不知道预期的负载是多少。然后,从您的@Controller您可以执行send()方法...

此外,请注意同步。每个http请求都是“新”线程的一部分,并且您只有一个mqtt bean。

+0

我知道MqttClient是有状态的,因此觉得对象池是一个更好的选择。想知道是否有人完成了MqttClient对象的对象池和任何陷阱? –