MQTT (mosquitto broker 오픈소스)

서버|2016. 11. 2. 10:56

우분투에서 MQTT 테스트 하는 방법에 대해서 정리

Broker 서버로 사용하게될 오픈 소스는 mosquitto 이다.


다음과 같이 설치하고

1. wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key

2. sudo apt-key add mosquitto-repo.gpg.key

3. sudo wget http://repo.mosquitto.org/debian/mosquitto-wheezy.list

4. sudo apt-get install mosquitto


[Mosquitto 서버 시작]

vagrant@vagrant:~$ mosquitto -c /etc/mosquitto/mosquitto.conf


[Subscriber 등록한다.]

vagrant@vagrant:~/tools/mqtt$ mosquitto_sub -d -t test1


[Publisher 에서 메세지를 전송]

vagrant@vagrant:~/tools/mqtt$ mosquitto_pub -d -t test1 -m "hello world"


[Java에서 메세지를 전송하는 방법]

<repository>

<id>paho-mqtt-client</id>

<name>Paho MQTT Client</name>

<url>https://repo.eclipse.org/content/repositories/paho-releases/</url>

</repository>


<dependency>

<groupId>org.eclipse.paho</groupId>

<artifactId>mqtt-client</artifactId>

<version>0.4.0</version>

</dependency>


@Test
public void test() {
	try {
		MqttClient client = new MqttClient("tcp://localhost:1883", "clientID");
		client.connect();
		MqttMessage message = new MqttMessage();
		message.setPayload("send my message!!".getBytes());
		client.publish("test1", message);
		client.disconnect();
	} catch (MqttException e) {
		e.printStackTrace();
	}
}


[동작 원리]

  1. mosquitto 서버 구동
  2. Subscriber 등록
    • 등록이 되면 mosquitto(broker) 서버와 TCP 커넥션을 맺고 유지한다.
    • 커넥션을 유지하는 동안 지속적으로 health check 진행
  3. Publisher 는 mosquitto 서버에 TCP 연결한 후 메세지 전송. 메세지를 전송 후 TCP 연결을 해제한다. 
  4. Publisher로부터 메세지를 전달 받은 mosquitto(broker) 서버는 등록되어 있는 Subscriber에게 메세지를 전송한다. (일치하는 topic에 한해서만)
    • 여기서 topic은 유니크 key와 같은 개념이다. 예를들어 Subscriber가 test 라는 topic만 구독하고 싶을 때 Publisher가 test topic을 지정하고 broker서버에 메세지를 보내면 broker서버는 test 토픽을 구독하는 Subscriber에게만 메세지를 전송하게 된다.


'서버' 카테고리의 다른 글

kubernetes 정리  (2) 2017.01.12
Kubernetes 설치  (6) 2017.01.12
Docker 정리  (2) 2017.01.04
리눅스 컨테이너 (LXC)  (0) 2017.01.04
tomcat 구동 시 /dev/random 블로킹 이슈  (6) 2016.08.25
Nginx  (0) 2016.07.15
Apache worker 파일에 template 적용하기  (0) 2016.01.22
tomcat7 소스 빌드  (0) 2015.09.07

댓글()