Example #1
0
    def test_get_producer(self, rabbit_config, confirms):
        amqp_uri = rabbit_config['AMQP_URI']
        producer_ids = []

        with get_producer(amqp_uri, confirms) as producer:
            producer_ids.append(id(producer))
            transport_options = producer.connection.transport_options
            assert isinstance(producer, Producer)
            assert transport_options['confirm_publish'] is confirms

        with get_producer(amqp_uri, confirms) as producer:
            producer_ids.append(id(producer))
            assert len(set(producer_ids)) == 1
Example #2
0
    def test_get_producer(self, rabbit_config, confirms):
        amqp_uri = rabbit_config['AMQP_URI']
        producer_ids = []

        with get_producer(amqp_uri, confirms) as producer:
            producer_ids.append(id(producer))
            transport_options = producer.connection.transport_options
            assert isinstance(producer, Producer)
            assert transport_options['confirm_publish'] is confirms

        with get_producer(amqp_uri, confirms) as producer:
            producer_ids.append(id(producer))
            assert len(set(producer_ids)) == 1
Example #3
0
 def publish(msg):
     with get_producer(amqp_uri) as producer:
         producer.publish(
             msg,
             serializer="json",
             routing_key=queue.name
         )
Example #4
0
 def publish(msg):
     with get_producer(amqp_uri) as producer:
         producer.publish(
             msg,
             serializer="json",
             routing_key=queue.name
         )
Example #5
0
    def test_confirms_disabled(self, rabbit_config):
        amqp_uri = rabbit_config['AMQP_URI']

        with get_producer(amqp_uri, False) as producer:
            producer.publish(
                "msg", exchange="missing", routing_key="key"
            )
Example #6
0
    def test_confirms_disabled(self, rabbit_config):
        amqp_uri = rabbit_config['AMQP_URI']

        with get_producer(amqp_uri, False) as producer:
            producer.publish(
                "msg", exchange="missing", routing_key="key"
            )
Example #7
0
    def test_confirms_enabled(self, rabbit_config):
        amqp_uri = rabbit_config['AMQP_URI']

        with pytest.raises(NotFound):
            with get_producer(amqp_uri) as producer:
                producer.publish(
                    "msg", exchange="missing", routing_key="key"
                )
Example #8
0
    def test_confirms_enabled(self, rabbit_config):
        amqp_uri = rabbit_config['AMQP_URI']

        with pytest.raises(NotFound):
            with get_producer(amqp_uri) as producer:
                producer.publish(
                    "msg", exchange="missing", routing_key="key"
                )
Example #9
0
    def test_pool_gives_different_producers(self, rabbit_config):
        amqp_uri = rabbit_config['AMQP_URI']
        producer_ids = []

        # get a producer
        with get_producer(amqp_uri, True) as confirmed_producer:
            producer_ids.append(id(confirmed_producer))
            assert len(set(producer_ids)) == 1

        # get a producer with the same parameters
        with get_producer(amqp_uri, True) as confirmed_producer:
            producer_ids.append(id(confirmed_producer))
            assert len(set(producer_ids)) == 1  # same producer returned

        # get a producer with different parameters
        with get_producer(amqp_uri, False) as unconfirmed_producer:
            producer_ids.append(id(unconfirmed_producer))
            assert len(set(producer_ids)) == 2  # different producer returned
Example #10
0
    def test_pool_gives_different_producers(self, rabbit_config):
        amqp_uri = rabbit_config['AMQP_URI']
        producer_ids = []

        # get a producer
        with get_producer(amqp_uri, True) as confirmed_producer:
            producer_ids.append(id(confirmed_producer))
            assert len(set(producer_ids)) == 1

        # get a producer with the same parameters
        with get_producer(amqp_uri, True) as confirmed_producer:
            producer_ids.append(id(confirmed_producer))
            assert len(set(producer_ids)) == 1  # same producer returned

        # get a producer with different parameters
        with get_producer(amqp_uri, False) as unconfirmed_producer:
            producer_ids.append(id(unconfirmed_producer))
            assert len(set(producer_ids)) == 2  # different producer returned
Example #11
0
    def republish(self, backoff_exc, message, target_queue):

        expiration = backoff_exc.next(message, self.exchange.name)
        queue = self.make_queue(expiration)

        # republish to appropriate backoff queue
        amqp_uri = self.container.config[AMQP_URI_CONFIG_KEY]
        with get_producer(amqp_uri) as producer:

            properties = message.properties.copy()
            headers = properties.pop('application_headers')

            headers['backoff'] = expiration
            expiration_seconds = float(expiration)

            # force redeclaration; the publisher will skip declaration if
            # the entity has previously been declared by the same connection
            # (see https://github.com/celery/kombu/pull/884)
            maybe_declare(queue,
                          producer.channel,
                          retry=True,
                          **DEFAULT_RETRY_POLICY)

            @retry(for_exceptions=UndeliverableMessage)
            def publish():
                try:
                    producer.publish(message.body,
                                     headers=headers,
                                     exchange=self.exchange,
                                     routing_key=target_queue,
                                     expiration=expiration_seconds,
                                     mandatory=True,
                                     retry=True,
                                     retry_policy=DEFAULT_RETRY_POLICY,
                                     declare=[queue.exchange, queue],
                                     **properties)
                except ChannelError as exc:
                    if "NO_ROUTE" in str(exc):
                        raise UndeliverableMessage()
                    raise
                try:
                    returned_messages = producer.channel.returned_messages
                    returned = returned_messages.get_nowait()
                except PyQueue.Empty:
                    pass
                else:
                    raise UndeliverableMessage(returned)

            publish()
Example #12
0
 def producer(self, get_producer):
     producer = get_producer().__enter__.return_value
     # make sure we don't raise UndeliverableMessage if mandatory is True
     producer.channel.returned_messages.get_nowait.side_effect = queue.Empty
     return producer
Example #13
0
 def producer(self, get_producer):
     producer = get_producer().__enter__.return_value
     # make sure we don't raise UndeliverableMessage if mandatory is True
     producer.channel.returned_messages.get_nowait.side_effect = queue.Empty
     return producer