본문 바로가기

서버

RabbitMQ 브로커 설정

반응형

RabbitMQ는 가장 널리 배포된 오픈소스 메시지 브로커입니다. MQTT, AMQP, HTTP및 WebSockets등 다양한 메시지 통신을 지원하며, 메시지 통신을 쉽게 관리할 수 있는 매니지먼트 페이지도 제공합니다. 저는 MQTT의 메시지 통신을 위한 브로커가 필요해 RabbitMQ를 이용하였습니다.

 

 

Messaging that just works — RabbitMQ

Developer Experience Deploy with BOSH, Chef, Docker and Puppet. Develop cross-language messaging with favorite programming languages such as: Java, .NET, PHP, Python, JavaScript, Ruby, Go, and many others.

www.rabbitmq.com

 

 

1.RabbitMQ 설치

RabbitMQ를 이용하기 위해서는 먼저 설치를 진행하여야 합니다. 운영체제마다 설치방법이 다르고 다양한 방법이 있으니 자세한 내용은 다운로드 페이지를 참조 바랍니다. 저는 Windows운영체제에 Chocolatey를 이용하여 설치하였습니다. cmd창을 여시고 아래 명령어를 입력하면 자동으로 설치됩니다.

 

choco install rabbitmq

 

 

 

Downloading and Installing RabbitMQ — RabbitMQ

Downloading and Installing RabbitMQ The latest release of RabbitMQ is 3.8.17. See change log for release notes. See RabbitMQ support timeline to find out what release series are supported. Experimenting with RabbitMQ on your workstation? Try the community

www.rabbitmq.com

 

 

 

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추적 시스템의 데이터를 유니티로 수신받도록 구성하였습니다.

반응형