コード例 #1
0
ファイル: message.py プロジェクト: linglan520/py-servicebus
 def call(self, target, msg, timeout=300):
     self.ensuer_connection()
     try:
         result = self.channel.queue_declare(exclusive=True)
         self.callback_queue = result.queue
         self.response = None
         self.corr_id = str(uuid.uuid4())
         self.channel.basic_publish(exchange=self.exchange_name,
             routing_key=str(target),
             properties=pika.BasicProperties(
                 reply_to=self.callback_queue,
                 correlation_id=self.corr_id,
             ),
             body=msg)
         self.channel.basic_consume(self.on_response, queue=self.callback_queue, no_ack=True)
         t_start = datetime.now()
         while self.response is None:
             if timeout:
                 pika.asyncore_loop(count=1, timeout=timeout)
             else:
                 pika.asyncore_loop(count=1)
             t_end = datetime.now()
             t_spend = (t_end - t_start).seconds
             logging.debug("Spend %s sec, timeout: %s" % (t_spend, timeout))
             if timeout and t_spend >= timeout:
                 raise TimeoutException("RPC Call Timeout")
         return self.response
     finally:
         # A call is finish delete the queue
         self.channel.queue_delete(queue=self.callback_queue)
コード例 #2
0
ファイル: message.py プロジェクト: linglan520/py-servicebus
 def loop(self):
     while self.connected:
         pika.asyncore_loop(count=1)
         # if no socket is available break the loop
         if utils.num_sockets() <= 0:
             break
     self.connected = False
     if utils.num_sockets() > 0:
         utils.close_sockets()
         logging.info("All connection closed!")
         return
コード例 #3
0
ファイル: message.py プロジェクト: linglan520/py-servicebus
 def receive_one(self):
     self.channel.basic_qos(prefetch_count=1)
     self.channel.basic_consume(self.__on_receive, queue=self.queue_name)
     pika.asyncore_loop(count=1)