我们如何创建从客户端类到消费者阅读器类的客户端对象

时间:2019-07-11 14:11:48

标签: python python-3.x producer-consumer pika python-pika

我正在从事消费者客户项目。 我必须创建一个客户端类,一个消费者读者类,一个消费者作家类,一个配置类和一个主类。

这应该像main一样具有所有其他类的所有控制逻辑。

我迷上了消费者阅读器类。 客户端类创建具有pika连接的客户端对象,并打开一个通道。

我想在我的阅读器类中使用该对象,我想在该类中执行所有操作,例如声明交换队列消耗消息。

但是它表示尝试运行阅读器类时通道未打开。

我已经尝试过签入其他帖子,但没有任何帮助

class Consumer_client (object):

    def __init__(self, user_id, password, url, port):

        self.user_id = user_id
        self.password = password
        self.url = url
        self.port = port
        self.should_reconnect = False
        self.connection = None
        self.closing = False
        self.channel = None

    def connect(self):

        credentials = pika.PlainCredentials(self.user_id, self.password)
        parameters = pika.ConnectionParameters(self.url, self.port, '/', credentials)
        return pika.SelectConnection(
            parameters = parameters,
            on_open_callback=self.on_connection_open,    # These are the different arguments of select connection
            on_open_error_callback=self.on_connection_open_error,
            on_close_callback=self.on_connection_closed)

#The below reader class is there in another file
class Consumer_reader(Consumer_client):

    EXCHANGE = 'Exchange'
    EXCHANGE_TYPE = 'topic'
    QUEUE = 'Queue'
    connected = False
    def __init__(self, exchange, queue, routing_key, user_id, password, url, port):

        # Login details
        self.user_id = user_id
        self.password = password
        self.url = url
        self.port = port
        self.exchange = exchange
        self.queue = queue                   
        self.routing_key = routing_key         
        self._channel = None
        self.was_consuming = False
        self.consuming = False
        self._connection = None
        self.prefetch_count = 500
        self.cfg = super().__init__(user_id, password, url, port)

    def run(self):


        self._connection = super().connection
        self._channel =  super().channel
        self.channel_open()
        self._connection.ioloop.start()

    def channel_open(self):

        LOGGER.info('Channel opened')
        #super().add_on_channel_close_callback()
        self.setup_exchange()

问题是我无法使它按照Consumer_client类中创建的连接和通道来使用Consumer_reader类

消费者阅读器类应该能够在连接的帮助下完成所需的事情,并且通道由消费者客户端类创建。

0 个答案:

没有答案