2017-10-21 104 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對象的對象池和任何陷阱? –