MQTT broker install and examples - githeim/windheim_archive GitHub Wiki

Introduce how to install MQTT broker and MQTT pub/sub examples

Install MQTT broker(mosquitto)

Eclipse Mosquitto is open source MQTT broker& library.

$ sudo apt update
$ sudo apt install mosquitto mosquitto-clients libmosquitto-dev

MQTT test

## start moquitto MQTT broker
mosquitto

Start subscriber

mosquitto_sub -h localhost -t test/topic00 -q 1

Start publisher

mosquitto_pub -h localhost -t test/topic00 -m "Hell Wolrd" -q 1
-h – the host to connect to
-t – the topic of a message
-m – the message
-q – the quality of service

Simple Pub/Sub Test

$ mosquitto_sub -h localhost -t test/topic00 -q 1
$ mosquitto_pub -h localhost -t test/topic00 -m "Hell Wolrd" -q 1
Hell Wolrd

MQTT QoS

About MQTT QoS - IBM Document

μ΅œλŒ€ ν•œ 번

QoS=0

λ©”μ‹œμ§€λŠ” μ΅œλŒ€ ν•œ 번 μ „λ‹¬λ˜κ±°λ‚˜ μ „ν˜€ μ „λ‹¬λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 이 λ„€νŠΈμ›Œν¬ κ°„ 전달은 μˆ˜μ‹ ν™•μΈλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ©”μ‹œμ§€λŠ” μ €μž₯λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. ν΄λΌμ΄μ–ΈνŠΈ 연결이 λŠμ–΄μ§€κ±°λ‚˜ μ„œλ²„κ°€ μ‹€νŒ¨ν•˜λŠ” 경우 λ©”μ‹œμ§€λŠ” 손싀될 수 μžˆμŠ΅λ‹ˆλ‹€. QoS=0은 κ°€μž₯ λΉ λ₯Έ 전솑 λͺ¨λ“œμž…λ‹ˆλ‹€. 이 λͺ¨λ“œλŠ” "μ‹€ν–‰ ν›„ μ‚­μ œ"라고도 ν•©λ‹ˆλ‹€. MQTT protocol μ—μ„œλŠ” QoS=0 의 λ°œν–‰μ„ ν΄λΌμ΄μ–ΈνŠΈμ— μ „λ‹¬ν•˜κΈ° μœ„ν•΄ μ„œλ²„κ°€ ν•„μš”ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ„œλ²„κ°€ λ°œν–‰λ¬Όμ„ μˆ˜μ‹ ν•  λ•Œ ν΄λΌμ΄μ–ΈνŠΈ 연결이 λŠμ–΄μ§€λŠ” 경우 μ„œλ²„μ— 따라 λ°œν–‰λ¬Όμ„ μ œκ±°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ν…”λ ˆλ©”νŠΈλ¦¬(MQXR) μ„œλΉ„μŠ€μ—μ„œλŠ” QoS=0으둜 μ†‘μ‹ λœ λ©”μ‹œμ§€λ₯Ό μ œκ±°ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. ν•΄λ‹Ή λ©”μ‹œμ§€λŠ” 비지속 λ©”μ‹œμ§€λ‘œ μ €μž₯되고 큐 κ΄€λ¦¬μžκ°€ μ€‘μ§€λ˜λŠ” κ²½μš°μ—λ§Œ μ œκ±°λ©λ‹ˆλ‹€.

μ΅œμ†Œ ν•œ 번

QoS=1

QoS=1은 κΈ°λ³Έ 전솑 λͺ¨λ“œμž…λ‹ˆλ‹€. λ©”μ‹œμ§€λŠ” 항상 μ΅œμ†Œ ν•œ 번 μ „λ‹¬λ©λ‹ˆλ‹€. μ†‘μ‹ μžκ°€ μˆ˜μ‹ ν™•μΈμ„ μˆ˜μ‹ ν•˜μ§€ μ•ŠλŠ” 경우, λ©”μ‹œμ§€λŠ” μˆ˜μ‹ ν™•μΈμ΄ μˆ˜μ‹ λ  λ•ŒκΉŒμ§€ DUP ν”Œλž˜κ·Έκ°€ μ„€μ •λ˜μ–΄ λ‹€μ‹œ μ†‘μ‹ λ©λ‹ˆλ‹€. λ”°λΌμ„œ μˆ˜μ‹ μžμ—κ²Œ λ™μΌν•œ λ©”μ‹œμ§€κ°€ μ—¬λŸ¬ 번 μ „μ†‘λ˜κ³  이λ₯Ό μ—¬λŸ¬ 번 μ²˜λ¦¬ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. λ©”μ‹œμ§€κ°€ 처리될 λ•ŒκΉŒμ§€ μ†‘μ‹ μžμ™€ μˆ˜μ‹ μžλŠ” λ©”μ‹œμ§€λ₯Ό λ‘œμ»¬μ— μ €μž₯ν•΄μ•Ό ν•©λ‹ˆλ‹€. λ©”μ‹œμ§€λŠ” 처리된 후에 μˆ˜μ‹ μžλ‘œλΆ€ν„° μ‚­μ œλ©λ‹ˆλ‹€. μˆ˜μ‹ μžκ°€ 브둜컀인 경우, λ©”μ‹œμ§€λŠ” κ΅¬λ…μžμ—κ²Œ λ°œν–‰λ©λ‹ˆλ‹€. μˆ˜μ‹ μžκ°€ ν΄λΌμ΄μ–ΈνŠΈμΈ 경우 λ©”μ‹œμ§€λŠ” κ΅¬λ…μž μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—κ²Œλ‘œ μ „λ‹¬λ©λ‹ˆλ‹€. λ©”μ‹œμ§€κ°€ μ‚­μ œλœ ν›„ μˆ˜μ‹ μžλŠ” μ†‘μ‹ μžμ—κ²Œ μˆ˜μ‹ ν™•μΈμ„ μ†‘μ‹ ν•©λ‹ˆλ‹€. μˆ˜μ‹ μžλ‘œλΆ€ν„° μˆ˜μ‹ ν™•μΈμ„ λ°›κ³  λ‚˜λ©΄ μ†‘μ‹ μžλ‘œλΆ€ν„° λ©”μ‹œμ§€κ°€ μ‚­μ œλ©λ‹ˆλ‹€.

μ •ν™•νžˆ ν•œ 번

QoS=2

λ©”μ‹œμ§€λŠ” 항상 μ •ν™•νžˆ ν•œ 번만 μ „μ†‘λ©λ‹ˆλ‹€. λ©”μ‹œμ§€κ°€ 처리될 λ•ŒκΉŒμ§€ μ†‘μ‹ μžμ™€ μˆ˜μ‹ μžλŠ” λ©”μ‹œμ§€λ₯Ό λ‘œμ»¬μ— μ €μž₯ν•΄μ•Ό ν•©λ‹ˆλ‹€. QoS=2λŠ” κ°€μž₯ μ•ˆμ „ν•˜μ§€λ§Œ κ°€μž₯ 느린 전솑 λͺ¨λ“œμž…λ‹ˆλ‹€. λ©”μ‹œμ§€κ°€ μ†‘μ‹ μžμ—μ„œ μ‚­μ œλ˜κΈ° 전에 μ†‘μ‹ μžμ™€ μˆ˜μ‹ μž 사이에 μ΅œμ†Œ 두 쌍의 전솑이 λ°œμƒν•©λ‹ˆλ‹€. λ©”μ‹œμ§€λŠ” 첫 번째 전솑 후에 μˆ˜μ‹ μž μΈ‘μ—μ„œ 처리될 수 μžˆμŠ΅λ‹ˆλ‹€. 첫 번째 전솑 μŒμ—μ„œ μ†‘μ‹ μžλŠ” λ©”μ‹œμ§€λ₯Ό μ „μ†‘ν•˜κ³  μˆ˜μ‹ μžμ—κ²Œμ„œ λ©”μ‹œμ§€λ₯Ό μ €μž₯ν–ˆλ‹€λŠ” μˆ˜μ‹ ν™•μΈμ„ λ°›μŠ΅λ‹ˆλ‹€. μ†‘μ‹ μžκ°€ μˆ˜μ‹ ν™•μΈμ„ μˆ˜μ‹ ν•˜μ§€ μ•ŠλŠ” 경우, λ©”μ‹œμ§€λŠ” μˆ˜μ‹ ν™•μΈμ΄ μˆ˜μ‹ λ  λ•ŒκΉŒμ§€ DUP ν”Œλž˜κ·Έκ°€ μ„€μ •λ˜μ–΄ λ‹€μ‹œ μ†‘μ‹ λ©λ‹ˆλ‹€. 두 번째 전솑 μŒμ—μ„œ μ†‘μ‹ μžλŠ” μˆ˜μ‹ μžμ—κ²Œ λ©”μ‹œμ§€ β€œPUBRELβ€μ˜ 처리λ₯Ό μ™„λ£Œν•  수 μžˆλ‹€κ³  μ „λ‹¬ν•©λ‹ˆλ‹€. μ†‘μ‹ μžκ°€ β€œPUBREL” λ©”μ‹œμ§€μ˜ μˆ˜μ‹ ν™•μΈμ„ μˆ˜μ‹ ν•˜μ§€ μ•Šμ€ 경우 μˆ˜μ‹ ν™•μΈμ΄ μˆ˜μ‹ λ  λ•ŒκΉŒμ§€ β€œPUBREL” λ©”μ‹œμ§€κ°€ λ‹€μ‹œ μ†‘μ‹ λ©λ‹ˆλ‹€. μ†‘μ‹ μžλŠ” β€œPUBREL” λ©”μ‹œμ§€μ— λŒ€ν•œ μˆ˜μ‹ ν™•μΈμ„ μˆ˜μ‹ ν•˜λ©΄ μ €μž₯ν–ˆλ˜ λ©”μ‹œμ§€λ₯Ό μ‚­μ œν•©λ‹ˆλ‹€. λ©”μ‹œμ§€λ₯Ό λ‹€μ‹œ μ²˜λ¦¬ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” κ°€μ • ν•˜μ— μˆ˜μ‹ μžκ°€ 첫 번째 λ˜λŠ” 두 번째 λ‹¨κ³„μ—μ„œ λ©”μ‹œμ§€λ₯Ό μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μˆ˜μ‹ μžκ°€ 브둜컀인 경우 μ΄λŠ” λ©”μ‹œμ§€λ₯Ό κ΅¬λ…μžμ—κ²Œ λ°œν–‰ν•©λ‹ˆλ‹€. μˆ˜μ‹ μžκ°€ ν΄λΌμ΄μ–ΈνŠΈμΈ 경우 λ©”μ‹œμ§€λŠ” κ΅¬λ…μž μ• ν”Œλ¦¬μΌ€μ΄μ…˜μœΌλ‘œ μ „λ‹¬λ©λ‹ˆλ‹€. μˆ˜μ‹ μžλŠ” μ†‘μ‹ μžμ—κ²Œ λ©”μ‹œμ§€ μ²˜λ¦¬κ°€ μ™„λ£Œλ˜μ—ˆλ‹€λŠ” μ™„λ£Œ λ©”μ‹œμ§€λ₯Ό μ†‘μ‹ ν•©λ‹ˆλ‹€.