#!/usr/bin/python3 import rabbitpy import multiprocessing import json import utils import utils_event class RabbitMQServer(multiprocessing.Process): channel = None connection = None url: str = None queue_name: str = None exchange_name: str = None event_queue : multiprocessing.Queue = None def __init__(self): super().__init__() return def __repr__(self) -> str: return f'URL: {self.url} , queue: {self.queue_name}, exchange: {self.exchange_name}' def open(self): if self.url is None or self.queue_name is None or self.exchange_name is None: raise Exception('RabbitMQ server object parameters are not set.') try: self.start() except Exception as e: utils.log_error(e) def close(self): try: self.join() except Exception as e: utils.log_error(e) def run(self): for message in rabbitpy.consume(uri=self.url, queue_name=self.queue_name): # utils.log_verbose(message.body.decode('utf8')) message.ack() try: event = utils_event.CallEvent.parse_unified(message.body.decode('utf8')) if self.event_queue is not None and event is not None: utils.log_verbose(f'AMQP event: {event}') self.event_queue.put(event) except Exception as e: utils.log_error(e)