A. 연결 설정 오류로 StreamLostError: ('Transport indicated EOF',) 등 에러가 발생한다.
래빗엠큐 AMQP 기본 port는 5672다. 그런데 엉뚱한 port를 입력한다면?
import pika
connection = pika.BlockingConnection(
pika.ConnectionParameters(host='localhost', port=3306))
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()
아래처럼 port를 3306으로 입력해보자.
아래처럼 pika.exceptions.IncompatibleProtocolError: StreamLostError: ('Transport indicated EOF',)란 에러가 발생한다.
% python send.py
Traceback (most recent call last):
File "send.py", line 3, in <module>
connection = pika.BlockingConnection(
File "/Users/taptorestart/workspace/playground/python/venv/lib/python3.8/site-packages/pika/adapters/blocking_connection.py", line 360, in __init__
self._impl = self._create_connection(parameters, _impl_class)
File "/Users/taptorestart/workspace/playground/python/venv/lib/python3.8/site-packages/pika/adapters/blocking_connection.py", line 451, in _create_connection
raise self._reap_last_connection_workflow_error(error)
pika.exceptions.IncompatibleProtocolError: StreamLostError: ('Transport indicated EOF',)
IncompatibleProtocolError란 3306 MySQL 포트니 AMQP 프로토콜이 아니라서 프로토콜이 안 맞다는 의미다.
엉뚱한 host를 입력한다면?
import pika
connection = pika.BlockingConnection(
pika.ConnectionParameters(host='192.168.0.1'))
channel = connection.channel()
아래처럼 pika.exceptions.AMQPConnectionError 연결 오류가 발생한다. 해당 호스트 자체로 연결이 안 되기 때문이다.
도커로 실행할 때 아래처럼 -p 5672:5672 \ 한 줄을 빼먹고 실행한 경우에도 마찬가지 오류가 발생한다. 해당 포트인 5672로 연결이 안 되기 때문이다.
docker run --name rabbitmq \
-p 15672:15672 \
-v /Users/taptorestart/rabbitmq:/var/lib/rabbitmq \
-d rabbitmq:3.11.10-management
이 때 아래처럼 port를 15672로 한다면 어떻게 될까?
import pika
connection = pika.BlockingConnection(
pika.ConnectionParameters(host='localhost', port=15672))
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()
앞에서 확인한 pika.exceptions.IncompatibleProtocolError: StreamLostError: ('Transport indicated EOF',) 오류가 발생한다.
그 이유는 15672 포트는 RabbitMQ 웹관리페이지라 HTTP 프로토콜을 지원하지 AMQP 프로토콜을 지원하지 않기 때문이다.