2012-03-26 14 views
12

'dan çıkın. Python'da kod çalıştırarak, iş parçacığına izin veremediğim başka bir uygulamadan RabbitMQ kuyruğundan gönderip alabilirsiniz. Bu çok yeni bir soru ama mesajın olup olmadığını kontrol etmek için bir olasılık var mı? Böyle bir görev için temel "Merhaba dünya" örneğini nasıl değiştirmeliyim? Şu anda bir mesaj alıp almamayı bırakmayı başarabildim, ancak eğer mesaj yoksa() yöntemim alır() beklemeye devam ediyor. Mesaj yok mu beklememeli? Ya da sadece belirli bir süre için bekleyebilir miyim?RabbitMQ Varsa bir ileti tüketin ve

import pika 

global answer 

def send(msg): 
    connection = pika.BlockingConnection(pika.ConnectionParameters()) 
    channel = connection.channel() 
    channel.queue_declare(queue='toJ') 
    channel.basic_publish(exchange='', routing_key='toJ', body=msg) 
    connection.close() 

def receive(): 
    connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost')) 
    channel = connection.channel() 
    channel.queue_declare(queue='toM') 
    channel.basic_consume(callback, queue='toM', no_ack=True) 
    global answer 
    return answer 

def callback(ch, method, properties, body): 
    ch.stop_consuming() 
    global answer 
    answer = body 
+0

yakut API kuyruğunun uzunluğunu kontrol etmek için bir yöntem .. Eğer piton docs kontrol ettikten vardır? –

cevap

15

Tamam, şu çözüm buldum:

def receive(): 
    parameters = pika.ConnectionParameters(RabbitMQ_server) 
    connection = pika.BlockingConnection(parameters) 
    channel = connection.channel() 
    channel.queue_declare(queue='toM') 
    method_frame, header_frame, body = channel.basic_get(queue = 'toM')   
    if method_frame.NAME == 'Basic.GetEmpty': 
     connection.close() 
     return '' 
    else:    
     channel.basic_ack(delivery_tag=method_frame.delivery_tag) 
     connection.close() 
     return body 
+0

Ayrıca, method_frame öğesinin Yok olup olmadığını kontrol etmek de önemlidir. Sırada başka ileti yoksa, channel.basic_get (sıra = 'toM') None-s ile geri döner. – balas