как мы можем создать объект клиента из класса клиента в класс читателя потребителя - PullRequest
0 голосов
/ 11 июля 2019

Я работаю над проектом потребительского клиента. Мне нужно создать клиентский класс, потребительский читательский класс, потребительский писательский класс, конфигурационный класс и основной класс.

Это должно работать так, как у main будет вся логика управления для всех остальных классов.

Я застрял в классе читателей. Класс client создает объект client с подключением 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_reader согласно соединению и каналу, созданному в классе Consumer_client

Класс читателя-потребителя должен уметь выполнять требуемые действия с помощью соединения, а канал создается клиентским классом-потребителем.

...