docs: def on_message(self, _, basic_deliver, properties, body):
          """Invoked by pika when a message is delivered from RabbitMQ.
  
          The channel is passed for your convenience. The basic_deliver object
          that is passed in carries the exchange, routing key, delivery tag
          and a redelivered flag for the message. The properties passed in is
          an instance of BasicProperties with the message properties and the
          body is the message that was sent.
  
          We'll json-decode the message body, and if that succeeds, call the
          handler that was given to us. Messages that contain invalid json
          will be discarded.
  
          :type _: pika.channel.Channel
          :type basic_deliver: pika.Spec.Basic.Deliver
          :type properties: pika.Spec.BasicProperties
          :type body: str|unicode
          """
          logger.debug('Received message # %s from %s: %s', basic_deliver.delivery_tag, properties.app_id, body)
          try:
              decoded = json.loads(body.decode('-utf-8'))
          except ValueError:
              logger.warning('Discarding message containing invalid json: %s', body)
          else:
              self._handler(decoded)
  
          self.acknowledge_message(basic_deliver.delivery_tag)