2013-06-20 2 views
6

Pika과 함께 메시지가 배달되도록하려면 어떻게해야합니까? 기본적으로 메시지가 성공적으로 전달되지 않으면 오류를 제공하지 않습니다.메시지가 전달되도록하는 방법은 무엇입니까?

이 예에서는 pika가 연결이 끊어 졌음을 확인하기 전에 몇 가지 메시지를 보낼 수 있습니다. 당신은 메시지를 게시 시작

import pika 

connection = pika.BlockingConnection(pika.ConnectionParameters(
     host='localhost')) 
channel = connection.channel() 
channel.queue_declare(queue='hello') 
for index in xrange(10): 
    channel.basic_publish(exchange='', routing_key='hello', 
          body='Hello World #%s!' % index) 
    print('Total Messages Sent: %s' % x) 
connection.close() 

답변

10

channel.confirm_delivery() 플래그가 설정 될 필요가 Pika를 사용하기 전에. Pika가 다음 메시지를 보내기 전에 각 메시지가 성공적으로 전송되었음을 확인할 수 있도록하는 것이 중요합니다. 그러나 프로그램이 다음 메시지로 진행하기 전에 배달을 확인해야하므로 메시지를 RabbitMQ으로 보내는 데 걸리는 시간이 증가합니다.

channel.confirm_delivery() 

try: 
    for index in xrange(10): 
     channel.basic_publish(exchange='', routing_key='hello', 
           body='Hello World #%s!' % index) 
     print('Total Messages Sent: %s' % x) 
except pika.exceptions.ConnectionClosed as exc: 
    print('Error. Connection closed, and the message was never delivered.') 

basic_publish는 메시지를 보내거나되지 않은 경우 따라 Boolean를 반환합니다. 그러나 전송 중에 연결이 닫히고 적절하게 처리 할 수있는 경우 잠재적 인 예외를 포착하는 것이 중요합니다. 이러한 경우와 마찬가지로 예외로 인해 프로그램의 흐름이 중단됩니다.

+0

호기심에서 벗어나려면 channel.confirm_delivery()를 호출하기 위해 BlockingConnection()이 필요합니까? – Jeffrey04

+1

@ Jeffrey04 : 기본 채널 객체에 정의되어 있으므로 모든 연결 유형에서 지원되어야합니다. https://github.com/pika/pika/blob/f8c263f234cca6b0f573ac63268a4034e32bd3eb/pika/channel.py#L388 – eandersson

+0

해명 해 주셔서 감사합니다. (: – Jeffrey04

관련 문제