我們有一個休息服務端點(Spring MVC),它將消息發佈到mqtt代理。 我們計劃緩存MqttClient,以便我們不必爲每個請求創建它。Eclipse Paho MqttClient對象池
什麼是最佳選擇?將MqttClient存儲在每個ThreadLocal對象中? 使用諸如Apache Commons Pool之類的對象池?
任何意見,將不勝感激。另外,如果已經有Paho MqttClient的池實現可用?
我們有一個休息服務端點(Spring MVC),它將消息發佈到mqtt代理。 我們計劃緩存MqttClient,以便我們不必爲每個請求創建它。Eclipse Paho MqttClient對象池
什麼是最佳選擇?將MqttClient存儲在每個ThreadLocal對象中? 使用諸如Apache Commons Pool之類的對象池?
任何意見,將不勝感激。另外,如果已經有Paho MqttClient的池實現可用?
Paho mqtt客戶端是一個有狀態的客戶端。換句話說,當它連接到代理時,TCP連接將處於活動狀態,直到某些方面決定斷開連接或者網絡中存在一些醜陋的錯誤。
爲每個線程(休息客戶端)創建一個新的mqtt客戶端不是一個好主意,IMO。
您正在使用Spring,也許您可以使用單一方法send()
創建@Bean
對象(singleton bean)。您可以根據需要創建儘可能多的客戶端。大概一個客戶可以,但我不知道預期的負載是多少。然後,從您的@Controller
您可以執行send()
方法...
此外,請注意同步。每個http請求都是「新」線程的一部分,並且您只有一個mqtt bean。
我知道MqttClient是有狀態的,因此覺得對象池是一個更好的選擇。想知道是否有人完成了MqttClient對象的對象池和任何陷阱? –