2011-05-07 3 views
0

Pika library을 사용하여 RabbitMQ를 사용하는 Python 응용 프로그램을 작성하려고합니다. 최신 버전 인 0.9.5를 사용하고 있습니다. 내 문제는 파이썬 코드가 RabbitMQ 사용자 이름과 암호가 올바르지 않은 것을 감지 할 수 없다는 것입니다. Pika 콜백을 등록하는 방법을 알 수 없기 때문에 오류를 알려줍니다. 나는이 스크립트를 실행하면Python이 내 RabbitMQ 암호가 실패했음을 어떻게 감지합니까?

import pika 

class MyClient(object): 
    def __init__(self, host, username, password): 
     self.host = host 
     self.username = username 
     self.password = password 
     self.connection = None 

    def connect(self): 
     credentials = pika.PlainCredentials(self.username, self.password) 
     parameters = pika.ConnectionParameters(
      host=self.host, credentials=credentials, heartbeat=True, 
      ) 
     self.connection = pika.SelectConnection(
      parameters, self.on_connected, 
      ) 
     self.connection.add_on_close_callback(self.on_close) 
     self.connection.ioloop.start() 

    def on_connected(self, *args, **kw): 
     print 'I am connected!', args, kw 

    def on_close(self, *args, **kw): 
     print 'I am closed!', args, kw 

my_client = MyClient('...', '...', '...') 
my_client.connect() 

# (Good, I remembered to remove the username and password 
# before pasting to Stack Overflow!) 

, 다음 ioloop 삼초 위의 비트에 대한 실행 및 다음 프로그램이 종료 : 내 코드는 다음과 같이 연결하고있다. 콜백을 등록하는 방법, 죽은 연결의 상태를 간단히 검사하는 방법, 오류가 발생했는지 확인하는 방법 또는 잘못된 암호 오류라는 것을 알아내는 방법을 알아낼 수 없습니다. 피카 문서에서 중요한 것을 놓친 적이 있습니까?

피카 0.9.5 오류 처리가 어떻게 작동하는지 이해할 수 있습니까? 아니면 내가 0.935 파이크의 이전 버전을 사용하여 회피 해야하는 일종의 끔찍한 실험입니다. 이제는이 새로운 개발 라인이 막 다른 골목이되었다는 것을 나타내는 this email message을 발견했습니다.

도움 주셔서 감사합니다.

답변

1

처음에는 로그인에 실패하면 pika.exceptions.LoginError이 발생한다고 생각했습니다. 그러나 제공된 인증 유형이 AMQP 브로커에서 지원되지 않는 경우에만 발생합니다. 성공하지 못한 인증시 이 아닌이 발생합니다.

Pika 소스 (인바운드 프레임 인쇄 중)에서 일부 해킹을 수행 한 후 클라이언트가 Connection.StartOK (자격 증명 포함)을 보낸 후에 응답을받지 못하는 것으로 보입니다. 인 경우 수신 된 다음 프레임은 Connection.Tune입니다.

답변이 무엇인지 잘 모르겠습니다. 기본 'guest : guest'자격증 명으로 시도하십시오. 그들이 실패한다면 아마도 당신에게는 다른 문제가있을 것입니다. 기본 사용자 이름 : 암호로 코드 스 니펫이 작동됩니다.

+0

아무 곳이나 제기 된 예외가 보이지 않으므로이를 잡는 것이 분명히 문제가됩니다. 라이브러리를 숨기지 않고 예외를 공유하도록 라이브러리를 유도하는 방법을 찾으면 좋습니다. - 적어도 그것이 존재한다는 것을 알고 기꺼이! –

1

AMQP를 Python과 함께 사용하려면 라이브러리의 소스 코드 사본을 검색하고 찾아 볼 수 있어야합니다. API 문서 만 사용하면이 라이브러리에서 성공할 수 없습니다.

이 경우에는 예외가 잡히고 어딘가에서 무시되기 때문에 추적 표시가없는 것으로 가정합니다. 그렇지 않으면 추적 예외의 맨 아래에서 예외를 발견해야합니다. 예외는 객체이며 일부 라이브러리는 TypeError 또는 IOError 대신 socket.error와 같은 이름을 사용합니다.

except 문을 모두 찾아 코드를 찾아서 log.debug() 호출을 추가해야 할 수도 있습니다.

그리고 pika 코드를 수정 한 경우 패치를 제출해야합니다.

관련 문제