Exemple #1
0
        def on_amqpstorm_message_received(amqpstormMessage: amqpstorm.Message):
            # Create custom message object and call cbf of subscription
            on_message_received(
                Message.from_amqpstorm_message(amqpstormMessage))

            # Acknowledge the message
            amqpstormMessage.ack()
Exemple #2
0
    def __call__(self, message: amqpstorm.Message):
        """Process the Payload.
        :param Message message:
        :return:
        """
        try:
            message.ack()
            message = json.loads(message.body)
            self.message_handler.handle(message)
        except json.JSONDecodeError:
            self.logger.error("Expected JSON Message")

        except Exception as error:
            self.logger.error(error.__repr__())
Exemple #3
0
 def __call__(self, message: Message) -> None:
     """Process the message body."""
     try:
         self.handle_message(message)
     except (ValidationError, Exception) as error:
         try:
             self._error_message(message, f"Exception occurred: {error}")
         except ValidationError:
             LOG.error(
                 "Could not validate the error message. Not properly formatted."
             )
         except Exception as error:
             LOG.error(f"Exception occurred: {error}")
         finally:
             message.reject(requeue=False)
     else:
         message.ack()
Exemple #4
0
 def callback_impl(self, message: AMQPStormMessage):
     """
     callback function, which will be called
     everytime a new message is consumed by the pika/amqp library
     """
     LOGGER.debug('body: %s' % message.body)
     if len(message.body) <= 0:
         message.ack()  # ignore empty messages
         return
     new_message: Message = Message(
         message.body,
         message.channel,
         message.delivery_tag
     )
     if self.callback is not None:
         LOGGER.debug('invoking registered callback method')
         # start_new_thread(self._start_callback_thread, (new_message, ))
         self._start_callback_thread(new_message)
Exemple #5
0
    def _on_message(self, handler: type, queue: str, msg: amqpstorm.Message):
        self._logger.info("Received Message from %s." % queue)

        payload = msg.body
        # If the message is of a known Content-Type, decode it automatically.
        if msg.content_type == "application/json":
            payload = Message.from_json(msg.body)

        self._logger.debug("Message Content: %s" % str(payload))

        try:
            self._logger.debug("Dispatching message to %s." % handler.__name__)

            self._logger.info(self._injector)
            impl = self._injector.get(handler)

            assert isinstance(impl, Handler)

            impl.handle_message(payload)

            self._logger.info("%s completed without error, ACKing message." %
                              handler.__name__)

            msg.ack()
        except RollbackException as e:
            self._logger.info("%s failed: %s." % (handler.__name__, str(e)))

            self._logger.info("%s failed, Rolling back..." % handler.__name__)

            if e.rollback_strategy == RollbackStrategy.NONE:
                raise
            elif e.rollback_strategy == RollbackStrategy.RETRY_NOW:
                msg.nack(requeue=True)
            elif e.rollback_strategy == RollbackStrategy.RETRY_LATER:
                msg.reject(requeue=True)
            elif e.rollback_strategy == RollbackStrategy.QUARANTINE:
                raise NotImplementedError("RollbackStrategy.QUARANTINE")
            else:
                raise Exception("no rollback stragy")
        except Exception as e:
            self._logger.info("%s failed: %s." % (handler.__name__, str(e)))

            msg.reject(requeue=True)