paho라이브러리를 사용해서 구현해보겠다
나는 스프링 프로젝트가 아닌 java프로젝트로 구현할 것이기 때문에 dependency를 추가하는 형태가 아닌 library를 직접 다운받아서 추가해줬다
maven에서 https://repo1.maven.org/maven2/org/eclipse/paho/org.eclipse.paho.client.mqttv3/1.2.2/
다운받아서 이클립스나 인텔리제이 실행 시켜서 추가 해주면된다.
나는 인텔리제이로 작업했기 때문에
ctrl+shift+alt+s로 창을 열고 추가해주면 된다.
broker 서버에 1초마다 한번씩 총 5번을 보내는 publisher를 만들어서 확인해 보겠다.
package basic;
/*
MQTT통신을 통해서 메세지를 broker로 전송하기 위한 객체
1. broker에 접속
2. broker로 메세지를 전송
*/
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
public class MyMqtt_Pub_Client {
//MQTT통신에서 publisher와 Subscriber의 역할을 하기 위한 기능을 가진 객체
private MqttClient client;
public MyMqtt_Pub_Client(){
try {
//broker와 MQTT통신을 하며 메세지를 전송할 클라이언트 객체를 만들고 접속
client = new MqttClient("tcp://ip:1883", "myId"); //broker 서버
client.connect();//broker접속
} catch (MqttException e) {
e.printStackTrace();
}
}
//메세지 전송을 위한 메소드
public boolean send(String topic, String msg){
try {
//broker로 전송할 메세지 생성 -MqttMessage
MqttMessage message = new MqttMessage();
message.setPayload(msg.getBytes()); //실제 broker로 전송할 메세지
client.publish(topic,message);
} catch (MqttException e) {
e.printStackTrace();
}
return true;
}
//종료
public void close(){
if(client != null){
try {
client.disconnect();
client.close();
} catch (MqttException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
MyMqtt_Pub_Client sender = new MyMqtt_Pub_Client();
new Thread(new Runnable() {
@Override
public void run() {
int i = 1;
String msg ="";
while (true){
if(i == 5) break;
else {
if(i % 2 == 1) msg = "led_on";
else msg= "led_off";
}
sender.send("iot",msg);
i++;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
sender.close();//작업완료되면 종료하기
}
}).start();
}
}
코드를 작성했으면 broker를 실행시킨다
지난번에 브로커로 mosquitto를 설치했기때문에
mosquitto -v 하면 broker가 실행된다.
broker를 통해 메세지를 받기 위해서 subscriber를 실행 시키겠다
위에 코드에서 topic을 iot로 등록했기 때문에
mosquitto_sub -t iot로 실행시켜주겠다.
나는 broker와 subscriber가 같은 pc여서 따로 ip를 작성하지 않았다.
코드로 돌아가서 메인을 실행시키면
보낸메세지가 위에 사진과 같이 정상적으로 온다면 통신에 성공한 것이다.