2015-05-19 1 views
2

Я пытаюсь преобразовать свой код, чтобы отправлять сообщения rabbitmq через Pika. У меня много проблем с пониманием того, как отправить простое сообщение, используя асинхронное соединение (например, SelectConnection).Как сделать простой Pika SelectConnection для отправки сообщения в python?

В моем старом коде, который я использую AMQP библиотеку я просто объявить класс как это:

import amqp as amqp 

class MQ(): 

    mqConn = None 
    channel = None 

    def __init__(self): 
     self.connect() 

    def connect(self): 
     if self.mqConn is None: 
      self.mqConn = amqp.Connection(host="localhost", userid="dev", password="dev", virtual_host="/", insist=False) 
      self.channel = self.mqConn.channel() 

     elif not self.mqConn.connected: 
      self.mqConn = amqp.Connection(host="localhost", userid="dev", password="dev", virtual_host="/", insist=False) 
      self.channel = self.mqConn.channel() 

    def sendMQ(self, message): 
     self.connect() 
     lMessage = amqp.Message(message) 
     self.channel.basic_publish(lMessage, exchange="DevMatrixE", routing_key="dev_matrix_q") 

А потом в другом месте в моем коде я называю sendMQ («это мое сообщение»), а затем код продолжается. Мне не нужно слушать подтверждения и т. Д.

Не могли бы вы написать простой класс, используя pika и SelectConnection, которые также будут работать, чтобы просто отправить сообщение с помощью sendMQ («это мое сообщение»)? Я посмотрел примеры pika, но я не знаю, как обойти ioloop и KeyboardInterrupt. Думаю, я просто не знаю, как заставить мой код продолжать работать без всех этих попыток/исключений ... Кроме того, не совсем точно, как я могу передать свое сообщение через все обратные вызовы ...

Любая помощь оценивается!

Спасибо.

ответ

-2

В качестве первого подхода я рекомендую вам начать с этого паба/вспомогательных примеров, представленных в конце сообщения. Как только вы поймете этот простой пример, начните с учебника, представленного прямо перед блоками кода в конце. Учебное пособие, которое имеет 6 различных вариантов использования, с примерами python. С помощью 5 первых шагов вы поймете, как это работает. У вас должна быть четкая концепция обмена (сущность, которая направляет сообщения в каждую очередь), ключ привязки (ключ, используемый для подключения обмена и очереди), ключ маршрутизации (ключ, который отправляется вместе с сообщением от издателя и используется обменом для маршрутизации сообщения в одну очередь или другую), а очередь (буфер, который может хранить сообщения, может иметь более 1 (или 1, если требуется) подписчик и может получать сообщения от более чем 1 обмена и основываться на разных ключи привязки). Кроме того, существует более одного типа обмена (разветвление, тема (эта, вероятно, та, которая вам нужна) ...).

Если все это звучит новое, пожалуйста, следуйте учебник, предоставленную RabbitMQ:

https://www.rabbitmq.com/tutorials/tutorial-one-python.html

pub.py:

#!/usr/bin/env python 
import pika 

connection = pika.BlockingConnection(pika.ConnectionParameters(
    host='localhost')) 
channel = connection.channel() 

channel.queue_declare(queue='hello') 

channel.basic_publish(exchange='', 
        routing_key='hello', 
        body='Hello World!') 
print " [x] Sent 'Hello World!'" 
connection.close() 

sub.py:

#!/usr/bin/env python 
import pika 

connection = pika.BlockingConnection(pika.ConnectionParameters(
    host='localhost')) 
channel = connection.channel() 

channel.queue_declare(queue='hello') 

print ' [*] Waiting for messages. To exit press CTRL+C' 

def callback(ch, method, properties, body): 
    print " [x] Received %r" % (body,) 

channel.basic_consume(callback, 
        queue='hello', 
        no_ack=True) 

channel.start_consuming() 
+1

Отлично, что вы пытаетесь помочь, но он спрашивал о адаптере SelectConnection. В примерах, которые вы упомянули, используется BlockingConnection. – eandersson

+0

Пример кода с помощью SelectConnection был бы более наглядным. – mprat

Смежные вопросы