def test_send_without_confirmation(self): message = pika_drv_msg.PikaOutgoingMessage( self._pika_engine, self._message, self._context ) message.send( exchange=self._exchange, routing_key=self._routing_key, confirm=False, mandatory=self._mandatory, persistent=False, stopwatch=self._stopwatch, retrier=None ) self._pika_engine.connection_without_confirmation_pool.acquire( ).__enter__().channel.publish.assert_called_once_with( body=mock.ANY, exchange=self._exchange, mandatory=self._mandatory, properties=mock.ANY, routing_key=self._routing_key ) body = self._pika_engine.connection_without_confirmation_pool.acquire( ).__enter__().channel.publish.call_args[1]["body"] self.assertEqual( b'{"_$_request_id": 555, "_$_token": "it is a token", ' b'"msg_str": "hello", "msg_type": 1}', body ) props = self._pika_engine.connection_without_confirmation_pool.acquire( ).__enter__().channel.publish.call_args[1]["properties"] self.assertEqual(props.content_encoding, 'utf-8') self.assertEqual(props.content_type, 'application/json') self.assertEqual(props.delivery_mode, 1) self.assertTrue(self._expiration * 1000 - float(props.expiration) < 100) self.assertEqual(props.headers, {'version': '1.0'}) self.assertTrue(props.message_id)
def send_notification(self, target, ctxt, message, version, retry=None): if retry is None: retry = self._pika_engine.default_notification_retry_attempts def on_exception(ex): if isinstance(ex, (pika_drv_exc.ExchangeNotFoundException, pika_drv_exc.RoutingException)): LOG.warning("Problem during sending notification. %s", ex) try: self._declare_notification_queue_binding(target) except pika_drv_exc.ConnectionException as e: LOG.warning( "Problem during declaring notification queue " "binding. %s", e) return True elif isinstance(ex, (pika_drv_exc.ConnectionException, pika_drv_exc.MessageRejectedException)): LOG.warning("Problem during sending notification. %s", ex) return True else: return False if retry: retrier = tenacity.retry( stop=(tenacity.stop_never if retry == -1 else tenacity.stop_after_attempt(retry)), retry=tenacity.retry_if_exception(on_exception), wait=tenacity.wait_fixed( self._pika_engine.notification_retry_delay)) else: retrier = None msg = pika_drv_msg.PikaOutgoingMessage(self._pika_engine, message, ctxt) return msg.send( exchange=(target.exchange or self._pika_engine.default_notification_exchange), routing_key=target.topic, confirm=True, mandatory=True, persistent=self._pika_engine.notification_persistence, retrier=retrier)
def cast_all_workers(self, exchange, topic, ctxt, message, stopwatch, retrier=None): msg = pika_drv_msg.PikaOutgoingMessage(self._pika_engine, message, ctxt) try: msg.send(exchange=exchange, routing_key=self._pika_engine.get_rpc_queue_name( topic, "all_workers", retrier is None), mandatory=False, stopwatch=stopwatch, retrier=retrier) except pika_drv_exc.ExchangeNotFoundException: try: self._declare_rpc_exchange(exchange, stopwatch) except pika_drv_exc.ConnectionException as e: LOG.warning("Problem during declaring exchange. %s", e)
def send_notification(self, target, ctxt, message, version, retry=None): if retry is None: retry = self._pika_engine.default_notification_retry_attempts def on_exception(ex): if isinstance(ex, (pika_drv_exc.ExchangeNotFoundException, pika_drv_exc.RoutingException)): LOG.warn(str(ex)) try: self._declare_notification_queue_binding(target) except pika_drv_exc.ConnectionException as e: LOG.warn(str(e)) return True elif isinstance(ex, (pika_drv_exc.ConnectionException, pika_drv_exc.MessageRejectedException)): LOG.warn(str(ex)) return True else: return False retrier = retrying.retry( stop_max_attempt_number=(None if retry == -1 else retry), retry_on_exception=on_exception, wait_fixed=self._pika_engine.notification_retry_delay * 1000, ) msg = pika_drv_msg.PikaOutgoingMessage(self._pika_engine, message, ctxt) return msg.send( exchange=(target.exchange or self._pika_engine.default_notification_exchange), routing_key=target.topic, confirm=True, mandatory=True, persistent=self._pika_engine.notification_persistence, retrier=retrier)