MQTT๋
MQTT๋ M2M, IOT๋ฅผ ์ํ ํ๋กํ ์ฝ๋ก์ ์ต์ํ์ ์ ๋ ฅ๊ณผ ํจํท๋์ผ๋ก ํต์ ํ๋ ํ๋กํ ์ฝ
MQTT๋ HTTP, TCP ๋ฑ์ ํต์ ๊ณผ ๊ฐ์ด ํด๋ผ์ด์ธํธ-์๋ฒ ๊ตฌ์กฐ๋ก ์ด๋ฃจ์ด์ง ๊ฒ์ด ์๋ Broker, Publisher, Subscriber ๊ตฌ์กฐ๋ก ์ด๋ฃจ์ด์ ธ์๋ค.
MQTT ํน์ง
- Client
- MQTT์ broker์ ์ฐ๊ฒฐ๋ ๋ชจ๋ ๊ฒ์ ๋งํ๋ค.
- Broker
- Broker๋ ๋ชจ๋ ๋ฉ์ธ์ง๋ฅผ ์์ , ํํฐ๋ง, ๋ฉ์ธ์ง ๊ตฌ๋ ํ๋ ์ฌ๋์ ๊ฒฐ์ , ํด๋ผ์ด์ธํธ์๊ฒ ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ด๋ ์ญํ
- Subscribe
- topic์ ๊ตฌ๋ ํ์ฌ topic์ผ๋ก publish๋ ๋ฉ์ธ์ง๋ฅผ ๋ฐ๋๋ค.
- Topic
- MQTT์ topic์ ์ฌ๋์(/)๋ฅผ ๋ถ๋ฆฌ ๋ฌธ์๋ก ์ฌ์ฉํ์ฌ ํด๋ ๋ฐ ํ์ผ๊ณผ ์ ์ฌํ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ค.
- ex) /api/update/์น์ฃผ/๋น๋ฐ๋ฒํธ
- QoS(Quality of Service)
- 0: ์ต๋ 1ํ ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ธ๋ค. ๋ฉ์ธ์ง๊ฐ ์์ค๋ ์ ์๋ค.
- 1: ์ต์ 1ํ ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ธ๋ค. ๋ฉ์ธ์ง๊ฐ ์ค๋ณต๋ ์ ์๋ค.
- 2: ํธ๋์์ดํน ๊ณผ์ ์ผ๋ก ๋ฉ์ธ์ง๋ฅผ 1ํ ๋ณด๋ธ๋ค. ๋ฉ์ธ์ง๋ฅผ 1ํ ๋ณด๋ด๋ ๊ฒ์ ๋ณด์ฅํ์ง๋ง ์ฑ๋ฅ์ด ๊ฐ์ํ๋ค.
Message Queue
๋ฉ์์ง ํ๋ publisher ์๋น์ค์ ์ฌ๋ฌ consumer ์๋น์ค๋ก ๊ตฌ์ฑ๋๋ค.
์ด๋ค์ ๋๊ฐ ํ๋์ ๋ฐฉํฅ์ผ๋ก ํต์ ํ๋ฉฐ, publisher๋ consumer์๊ฒ ๋ช ๋ น์ ๋ด๋ฆฐ๋ค.
publisher ์๋น์ค๋ ์ผ๋ฐ์ ์ผ๋ก ๋ฉ์์ง๋ฅผ ํ์ ๋ฃ๊ณ , ๋จ์ผ consumer ์๋น์ค๊ฐ ์ด ๋ฉ์์ง๋ฅผ ์๋นํ๊ณ ๊ทธ์ ๋ฐ๋ฅธ ์์
์ ์ํํ๋ค.
๋ฉ์์ง ํ๋ ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ
์ฒ ๋ฐ ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ ๋๋ ์๋ฒ๋ฆฌ์ค ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ฐํ ๋ ์ธ๊ธฐ๊ฐ ์๋ค.
๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ฌ๋ฌ ๋ฉ์์ง ํ๋ฅผ ๋ฃ๋ ์๋น์ ์๋น์ค๋ฅผ ์ฌ๋ฌ ๊ฐ ์์ฑํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ํ์ฅํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฉ์์ง๊ฐ ์ฒ๋ฆฌ๋๋ฉด ํธ๋ํฝ์ด ์ต์ํ๋ ๋ ์๋น์ค๋ฅผ ์ข ๋ฃํ์ฌ ์ด์ ๋น์ฉ์ ์ ์ฝํ ์ ์๋ค.
Pub / Sub
pub/sub ๋ชจ๋ธ์ ๋ค์์ publisher์ ๋ค์์ subscriber ์ฌ์ด์ ๋ฉ์์ง ์ ๋ฌ์๋น์ค๋ก ๊ตฌ์ฑ๋๋ค.
ํน์ ์ฃผ์ (topic)์ ๊ด๋ จ๋ ๋ฉ์์ง๋ฅผ ๋ฐํํ๊ณ , ํด๋น ์ฃผ์ ์ ๊ด์ฌ์ ๊ฐ์ง๋ ๊ตฌ๋
์๋ ํด๋น ๋ฉ์์ง๋ฅผ ์์ ํ๋ค.
topic์ ์ผ์ข
์ ๋ฉ์์ง ์นดํ
๊ณ ๋ฆฌ ๋๋ ์ด๋ฒคํธ ์ ํ์ ๋ํ๋ด๋ฉฐ, ๋ฉ์์ง๋ฅผ ํํฐ๋งํ๊ณ ๊ตฌ๋
ํ ๋ ์ฌ์ฉ๋๋ค.
MQTT ๋ธ๋ก์ปค
- ์ข
๋ฅ
- Mosquitto
- HiveMQ
- Rabbit MQ
- IBM MQ
- Vertx
Mosquitto๋ก MQTT ํต์ ํ ์คํธ
Mosquitto๋ ๋ฌด๋ฃ ์คํ์์ค ๋ธ๋ก์ปค๋ก ๊ฐ์ฅ ๋ง์ด ์ฐ์ด๊ณ ์๋ค. ์ฐ๋ถํฌ์์ Mosquitto๋ก ๊ฐ๋จํ๊ฒ MQTT ํต์ ์ ํ ์ ์๋ค.
apt install mosquito
mosquito
์คํํ์ ๋ 1883 ํฌํธ๋ฅผ ์ฌ์ฉ์ค์ด๋ผ๋ฉด ์๋์ ๊ฐ์ด Kill ํด์ค์ผํ๋ค.
netstat -anlp | grep :1883
kill -9 <PID>
์ฐฝ์ 2๊ฐ ๋ ๋ฐ์์ ํ๋๋ Publish, ํ๋๋ Subscribeํ๋ค. mosquitto-clients๋ฅผ ์ค์นํด์ค๋ค.
apt install mosquitto-clients
ip ์ฃผ์๋ฅผ ํ์ธํด๋๊ณ
ip์ฃผ์๋ก subscribe ํด๋๊ณ
mosquitto_sub -h <๋ธ๋ก์ปค์ IP> -t <TOPIC>
publisher์์ ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ด๋ฉด (์ฌ๊ธฐ์ ํ ํฝ์ด ๋ค๋ฅด๋ฉด subscriber๊ฐ ๋ฉ์ธ์ง๋ฅผ ๋ฐ์ง ๋ชปํ๋ค.)
mosquitto_pub -h <๋ธ๋ก์ปค์ IP> -t <TOPIC> -m "<MESSAGE>"
subscriber๋ ๋ธ๋ก์ปค๋ฅผ ํตํด ๋ฉ์ธ์ง๋ฅผ ์ ๋ฌ๋ฐ์ ์ ์๋ค.
sub
broker
pub
5) Python ์ฝ๋๋ก MQTT ํต์
paho ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น
pip install paho-mqtt
subscriber ์ฝ๋
import paho.mqtt.client as mqtt
# subscriber callback
def on_message(client, userdata, message):
print("message received ", str(message.payload.decode("utf-8")))
print("message topic= ", message.topic)
print("message qos=", message.qos)
print("message retain flag= ", message.retain)
broker_address = "192.168.0.141"
client1 = mqtt.Client("client1")
client1.connect(broker_address)
client1.subscribe("์น์ฃผ/๊ฐ์ธ์ ๋ณด")
client1.on_message = on_message
client1.loop_forever()
publisher
import paho.mqtt.client as mqtt
mqttc = mqtt.Client("python_pub") # puclisher ์ด๋ฆ
mqttc.connect("192.168.0.141", 1883)
mqttc.publish("์น์ฃผ/๊ฐ์ธ์ ๋ณด", "์์ผ์ 1์ 1์ผ") # topic, message
Reference
'๋คํธ์ํฌ ์๋ฒ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Scalable Network Programming (3) | 2024.03.18 |
---|---|
[Django] Jump to Django (02/admin) (0) | 2022.06.30 |
[Django] Jump to Django (01/์ฑ ์์ฑ+DB ์์ฑ) (0) | 2022.06.29 |
[Django] Jump to Django (00/ํ๋ก์ ํธ ์์ฑ) (0) | 2022.06.29 |
[Python] ๐python ํ๊ฒฝ์ธํ (0) | 2022.06.27 |