2012-03-26 26 views
12

छोड़ देता है मैं एक अन्य एप्लिकेशन से खरगोश एमक्यू कतार से भेजने और प्राप्त करने के लिए पायथन पर कोड चला रहा हूं जहां मैं थ्रेडिंग की अनुमति नहीं दे सकता। यह बहुत ही नौसिखिया सवाल है, लेकिन क्या यह जांचने की संभावना है कि संदेश है या नहीं और यदि कोई नहीं है तो बस सुनना छोड़ दें? इस तरह के कार्य के लिए मुझे बुनियादी "हैलो वर्ल्ड" उदाहरण कैसे बदलना चाहिए? वर्तमान में मैंने संदेश प्राप्त करने में मदद करने में कामयाब रहा है, लेकिन अगर कोई संदेश नहीं है तो मेरी विधि प्राप्त होती है() बस प्रतीक्षा जारी रखें। अगर कोई संदेश नहीं है तो इंतजार न करें? या शायद केवल समय के लिए प्रतीक्षा करें?खरगोश एमक्यू मौजूद होने पर एक संदेश का उपभोग करता है और

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

रूबी एपीआई कतार की लंबाई की जाँच करने के लिए एक विधि .. आप अजगर डॉक्स की जाँच कर ली है? –

उत्तर

15

ठीक है, मैं निम्नलिखित समाधान नहीं मिला:

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

यह भी जांचना महत्वपूर्ण होना चाहिए कि method_frame कोई नहीं है या नहीं। यदि कतार में कोई और संदेश नहीं है, तो channel.basic_get (queue = 'toM') किसी के साथ वापस नहीं आएगा। – balas