2017-10-21 4 views
0

Nous avons un point de terminaison de service de repos (Spring MVC) qui publie des messages dans un courtier mqtt. Nous prévoyons de mettre en cache le MqttClient afin de ne pas avoir à le créer pour chaque requête.Pool d'objets Eclipse Paho MqttClient

Quelle est la meilleure option? Stockez le MqttClient dans chaque objet ThreadLocal? Utiliser un pool d'objets tel que Apache Commons Pool?

Un conseil à ce sujet serait apprécié. Aussi s'il y a déjà une mise en œuvre de Paho MqttClient disponible?

Répondre

0

Paho mqtt client est un client statefull. En d'autres termes, lorsqu'il se connecte au courtier, la connexion TCP est active jusqu'à ce que certains des côtés décident de se déconnecter ou qu'il y ait une erreur laide dans le réseau.

La création d'un nouveau client mqtt pour chaque thread (client de repos) n'est pas une bonne idée, IMO.

Vous utilisez Spring, peut-être vous pouvez créer l'objet @Bean (singleton bean) avec une seule méthode send(). Là, vous pouvez créer autant de clients que vous le souhaitez. Probablement un client est ok, mais je ne sais pas ce qui est attendu. Puis, à partir de @Controller vous pouvez exécuter la méthode send() ...

Faites également attention à la synchronisation. Chaque requête http fait partie d'un "nouveau" thread, et vous n'avez qu'un seul bean mqtt.

+0

Je sais que le MqttClient est à état et donc que le regroupement d'objets est une meilleure option. Vous voulez savoir si quelqu'un a fait la mise en commun des objets MqttClient et des gotchas? –