RabbitMQ는 가장 널리 배포된 오픈소스 메시지 브로커입니다. MQTT, AMQP, HTTP및 WebSockets등 다양한 메시지 통신을 지원하며, 메시지 통신을 쉽게 관리할 수 있는 매니지먼트 페이지도 제공합니다. 저는 MQTT의 메시지 통신을 위한 브로커가 필요해 RabbitMQ를 이용하였습니다.
1.RabbitMQ 설치
RabbitMQ를 이용하기 위해서는 먼저 설치를 진행하여야 합니다. 운영체제마다 설치방법이 다르고 다양한 방법이 있으니 자세한 내용은 다운로드 페이지를 참조 바랍니다. 저는 Windows운영체제에 Chocolatey를 이용하여 설치하였습니다. cmd창을 여시고 아래 명령어를 입력하면 자동으로 설치됩니다.
choco install rabbitmq
2.로컬호스트 통신 테스트
RabbitMQ가 잘 설치되었는지 로컬호스트를 통해 'AMQP 0-9-1' 프로토콜로 테스트해볼 수 있습니다. 상단 내비게이션의 'Get Started → RabbitMQ Tutorials → 1"Hello World!"' 에서 다양한 언어의 샘플 코드를 사용하실 수 있습니다. 저는 간단한 테스트를 위해 pika 라이브러리를 활용한 파이썬 예제로 테스트를 진행하였습니다. 해당 글에 대한 링크는 아래서 확인하실 수 있습니다.
RabbitMQ용 Pika libraries 사용법
python -m pip install pika --upgrade
send.py
#!/usr/bin/env python
import pika
connection = pika.BlockingConnection(
pika.ConnectionParameters(host='localhost'))
channel = connection.channel()
channel.queue_declare(queue='hello')
channel.basic_publish(exchange='', routing_key='hello', body='Hello World!')
print(" [x] Sent 'Hello World!'")
connection.close()
receive.py
#!/usr/bin/env python
import pika, sys, os
def main():
connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
channel = connection.channel()
channel.queue_declare(queue='hello')
def callback(ch, method, properties, body):
print(" [x] Received %r" % body)
channel.basic_consume(queue='hello', on_message_callback=callback, auto_ack=True)
print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()
if __name__ == '__main__':
try:
main()
except KeyboardInterrupt:
print('Interrupted')
try:
sys.exit(0)
except SystemExit:
os._exit(0)
https://www.rabbitmq.com/tutorials/tutorial-one-python.html
2개의 cmd창을 여신 후 한개의 cmd에서 receive.py 프로그램을 실행시킨 후, 다른 cmd에서 send.py프로그램을 실행시키면 receive.py에 데이터가 전송됨을 확인하실 수 있습니다.
3.포트포워딩 및 방화벽 포트 접속 허용
RabbitMQ에서 제공하는 기능들에 접근할 수 있게 포트포워딩 및 방화벽 포트 접속을 허용해야 합니다. 자세한 방법은 아래 링크에서 확인하실 수 있습니다.
https://bigenergy.tistory.com/entry/ipTIME-공유기-포트포워딩-하는-방법
저는 'AMQP, MQTT, Management' 시스템을 사용하기 위해서 5672(AMQP), 1883(MQTT), 15672(Management)에 대해 위와 같은 작업을 진행하였습니다.
4.서버PC를 통한 MQTT 통신 테스트
클라이언트 PC에서 파이썬으로 MQTT 메시지를 송신 → 서버PC의 MQTT브로커 → 클라이언트 PC의 유니티가 MQTT 메시지를 수신
파이썬과 유니티를 통해 MQTT 통신 시스템을 구축하였습니다. 파이썬의 경우 paho 라이브러리를 이용하였으며, 유니티의 경우 MQTTnet 플러그인을 사용하였습니다. 유니티 수신측에서는 '#'문자를 수신하도록 하여 모든 태그를 수신하도록 하였습니다.
paho-mqtt 라이브러리
https://pypi.org/project/paho-mqtt/
MQTTnet 플러그인
https://github.com/chkr1011/MQTTnet
현재 데카웨이브 MDEK1001의 DWM1001 Gateway를 통한 UWB tag추적 시스템의 데이터를 유니티로 수신받도록 구성하였습니다.