class Daemon(ConsumerMixin): def __init__(self, config): self.connection = None self.exchange = None self.queues = [] self.config = config self._init_rabbitmq() self.gpio = Gpio(config) def _init_rabbitmq(self): """ connect to rabbitmq and init the queues """ self.connection = kombu.Connection(self.config.rabbitmq['broker-url']) exchange_name = self.config.rabbitmq['exchange-name'] exchange = kombu.Exchange(exchange_name, type="direct") queue_name = self.config.rabbitmq['queue-name'] logging.getLogger(__name__).info("listen following exchange: {exchange}, queue name: {queue}". format(exchange=exchange_name, queue=queue_name)) queue = kombu.Queue(queue_name, exchange=exchange, durable=True) self.queues.append(queue) def get_consumers(self, Consumer, channel): return [Consumer(queues=self.queues, callbacks=[self.process_task])] def handle_data(self, data): if data.IsInitialized(): self.gpio.manage_lights(data) else: logging.getLogger(__name__).warn("protobuff query not initialized") def process_task(self, body, message): # logging.getLogger(__name__).debug("Message received") # Here, add the receipt of protobuf data_message = stat_pb2.StatRequest() try: data_message.ParseFromString(body) #logging.getLogger(__name__).debug('query received: %s' % str(data_message)) except DecodeError as e: logging.getLogger(__name__).warn("message is not a valid " "protobuf task: {}".format(str(e))) message.ack() return try: self.handle_data(data_message) message.ack() except: logging.getLogger(__name__).exception("error while treating data.") message.requeue() time.sleep(10) def __del__(self): self.close() def close(self): if self.connection and self.connection.connected: self.connection.release() self.gpio.finalize()
class Daemon(ConsumerMixin): def __init__(self, config): self.connection = None self.exchange = None self.queues = [] self.config = config self._init_rabbitmq() self.gpio = Gpio(config) def _init_rabbitmq(self): """ connect to rabbitmq and init the queues """ self.connection = kombu.Connection(self.config.rabbitmq['broker-url']) exchange_name = self.config.rabbitmq['exchange-name'] exchange = kombu.Exchange(exchange_name, type="topic") queue = kombu.Queue('', exchange=exchange, routing_key='v1.journeys', durable=False, exclusive=True, auto_delete=True) logging.getLogger(__name__).info( "listen following exchange: {exchange}, queue name: {queue}". format(exchange=exchange_name, queue=queue.name)) self.queues.append(queue) def get_consumers(self, Consumer, channel): return [Consumer(queues=self.queues, callbacks=[self.process_task])] def handle_data(self, data): if data.IsInitialized(): self.gpio.manage_lights(data) else: logging.getLogger(__name__).warn("protobuff query not initialized") def process_task(self, body, message): # logging.getLogger(__name__).debug("Message received") # Here, add the receipt of protobuf data_message = stat_pb2.StatRequest() try: data_message.ParseFromString(body) #logging.getLogger(__name__).debug('query received: %s' % str(data_message)) except DecodeError as e: logging.getLogger(__name__).warn("message is not a valid " "protobuf task: {}".format( str(e))) message.ack() return try: self.handle_data(data_message) message.ack() except: logging.getLogger(__name__).exception("error while treating data.") message.requeue() time.sleep(10) def __del__(self): self.close() def close(self): if self.connection and self.connection.connected: self.connection.release() self.gpio.finalize()