연결 지향적 (Connection Oriented)
브로커를 통한 통신
QoS(Quality of Service)
0
: 보낸 다음 잊어버림
1
: 확인 응답을 거치는 전달
2
: 보장된 전달
TCP/IP 데이터 전송의 처리에 영향을 주지 않으며, MQTT 송신자와 수신자 간에만 사용
글자 수 제한이 없으므로, 긴 메시지나 JSON 포맷 또는 파일 전송 가능
0에 가까울수록 메시지 처리에 대한 부하가 줄어들고, 메시지 손실의 위험이 높음.
메시지 유형
다양한 개발언어의 다양한 클라이언트 지원
sudo apt install mosquitto mosquitto-clients
sudo systemctl status mosquitto
결과 예시 : ● mosquitto.service - Mosquitto MQTT Broker
Loaded: loaded (/lib/systemd/system/mosquitto.service; enabled; preset: enabled)
Active: active (running) since Thu 2025-01-23 19:41:01 GMT; 12s ago
Docs: man:mosquitto.conf(5)
man:mosquitto(8)
Process: 724 ExecStartPre=/bin/mkdir -m 740 -p /var/log/mosquitto (code=exited, status=0/SUCCESS)
Process: 731 ExecStartPre=/bin/chown mosquitto /var/log/mosquitto (code=exited, status=0/SUCCESS)
Process: 733 ExecStartPre=/bin/mkdir -m 740 -p /run/mosquitto (code=exited, status=0/SUCCESS)
Process: 735 ExecStartPre=/bin/chown mosquitto /run/mosquitto (code=exited, status=0/SUCCESS)
Main PID: 736 (mosquitto)
Tasks: 1 (limit: 4443)
CPU: 17ms
CGroup: /system.slice/mosquitto.service
└─736 /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf
Jan 23 19:41:01 raspberrypi systemd[1]: Starting mosquitto.service - Mosquitto MQTT Broker...
Jan 23 19:41:01 raspberrypi systemd[1]: Started mosquitto.service - Mosquitto MQTT Broker.
/etc/mosquitto
경로에 mosquitto 관련 설정 파일이 있습니다. 브로커를 실행하기 위해서는 해당 경로로 들어가서 해당 설정 파일에 있는 내용에 맞게 실행해야 되므로 경로를 바꾸고 브로커를 실행합니다.
단 그냥 접속 시, Error: Connection refused
를 볼 수있습니다. 따라서 다음과 같이 수정을 해줍니다.
sudo vi /etc/mosquitto/mosquitto.conf
를 통해 설정 파일을 vi editor로 열어줍니다.
다음 내용을 해당 파일 제일 마지막에 추가해줍니다.
port 1883
allow_anonymous true
cd /etc/mosquitto # 경로 변경
sudo /etc/init.d/mosquitto stop # 실행 중인 브로커 중지
sudo mosquitto -c mosquitto.conf -v # 설정 파일에 맞게 브로커 실행
이렇게 실행하면 The 'port' option is now deprecated and will be removed in a future
라고 해서 port 관련 설정을 준 것이 deprecated 되었다고 경고가 뜨는데, 지금은 크게 신경쓸 필요는 없습니다.
mosquitto_sub -h [MQTT 브로커 접속주소(IP)] -p [통신포트 : 기본값 1883] -t [구독할 토픽 : "#"는 모든 토픽을 구독]
참고로 [MQTT 브로커 접속주소(IP)]
는 라즈베리파이에서 ifconfig
로 확인할 수 있는 그 IP로 접속하면 됩니다.
mosquitto_pub -h [MQTT 브로커 접속주소(IP)] -p [통신포트 : 기본값 1883] -t [발행할 메시지의 토픽] -m [발행할 메시지]
mosquitto_sub -h [MQTT 브로커 접속주소(IP)] -p 1883 -t "#"
# #은 topic에 해당하는 하위 항목 모두 다 포함
# mosquitto_pub 입력마다 Hello 출력
mosquitto_pub -h [MQTT 브로커 접속주소(IP)] -p 1883 -t "test" -m "Hello"