def _detach_received(self, error): """Callback called when a link DETACH frame is received. This callback will process the received DETACH error to determine if the link is recoverable or whether it should be shutdown. :param error: The error information from the detach frame. :type error: ~uamqp.errors.ErrorResponse """ # pylint: disable=protected-access if error: condition = error.condition description = error.description info = error.info else: condition = b"amqp:unknown-error" description = None info = None self._error = errors._process_link_error(self.error_policy, condition, description, info) _logger.info( "Received Link detach event: %r\nLink: %r\nDescription: %r" "\nDetails: %r\nRetryable: %r\nConnection: %r", condition, self.name, description, info, self._error.action.retry, self._session._connection.container_id)
def _message_received(self, message): """Callback run on receipt of every message. If there is a user-defined callback, this will be called. Additionally if the client is retrieving messages for a batch or iterator, the message will be added to an internal queue. :param message: c_uamqp.Message """ # pylint: disable=protected-access message_number = self._receiver.last_received_message_number() if self._settle_mode == constants.ReceiverSettleMode.ReceiveAndDelete: settler = None else: settler = functools.partial(self._settle_message, message_number) try: wrapped_message = uamqp.Message( message=message, encoding=self.encoding, settler=settler, delivery_no=message_number) self.on_message_received(wrapped_message) except RuntimeError: condition = b"amqp:unknown-error" self._error = errors._process_link_error(self.error_policy, condition, None, None) _logger.info("Unable to settle message no %r. Disconnecting.\nLink: %r\nConnection: %r", message_number, self.name, self._session._connection.container_id) except KeyboardInterrupt: _logger.error("Received shutdown signal while processing message no %r\nRejecting message.", message_number) self._receiver.settle_modified_message(message_number, True, True, None) self._error = errors.AMQPClientShutdown() except Exception as e: # pylint: disable=broad-except _logger.error("Error processing message no %r: %r\nRejecting message.", message_number, e) self._receiver.settle_modified_message(message_number, True, True, None)