mqtt실습(2). java로 구현해보기(publisher)

2tsumo·2022년 7월 21일
0

mqtt

목록 보기
3/4

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를 작성하지 않았다.

코드로 돌아가서 메인을 실행시키면

보낸메세지가 위에 사진과 같이 정상적으로 온다면 통신에 성공한 것이다.

profile
👨‍💻

0개의 댓글