2017-10-21 9 views
0

우리는 mqtt 브로커에 메시지를 게시하는 나머지 서비스 끝점 (Spring MVC)이 있습니다. 우리는 모든 요청에 ​​대해 MqttClient를 만들지 않아도되도록 MqttClient를 캐시 할 계획입니다.Eclipse Paho MqttClient 객체 풀

가장 좋은 옵션은 무엇입니까? 각 ThreadLocal 객체에 MqttClient를 저장 하시겠습니까? Apache Commons Pool과 같은 객체 풀을 사용 하시겠습니까?

이 문제에 대한 조언을 주시면 감사하겠습니다. 또한 이미 Paho MqttClient의 풀 구현이 가능한 경우?

답변

0

파호 mqtt 클라이언트는 statefull 클라이언트입니다. 즉, 브로커에 연결할 때 TCP 연결은 일부 연결이 끊어 지거나 네트워크 내에 추악한 오류가있을 때까지 작동합니다.

모든 스레드 (나머지 클라이언트)에 대해 새로운 mqtt 클라이언트를 만드는 것은 좋은 생각이 아닙니다.

당신은 봄을 사용하고 있습니다. 어쩌면 send()이라는 단일 메소드로 @Bean 객체 (싱글 톤 빈)를 생성 할 수 있습니다. 여기서 원하는만큼의 클라이언트를 생성 할 수 있습니다. 아마도 하나의 클라이언트는 괜찮지 만 예상로드가 무엇인지는 알 수 없습니다. 그런 다음 @Controllersend() 메서드를 실행할 수 있습니다 ...

또한 동기화에주의하십시오. 모든 http 요청은 "새로운"스레드의 일부이며 mqtt bean은 하나뿐입니다.

+0

MqttClient가 상태 저장이므로 개체 풀링이 더 나은 옵션이라고 생각합니다. 누군가 MqttClient 객체 및 임의의 객체 풀링을 수행했는지 알고 싶습니까? –