Example #1
0
    async def test_check_route_registry_full_options(self):
        expected_routes = ["/asgard/counts/ok"]
        expected_vhost = "/"

        @self.app.amqp.consume(
            expected_routes,
            vhost=expected_vhost,
            options=AMQPRouteOptions(bulk_size=1024, bulk_flush_interval=120),
        )
        async def _handler(message):
            return 42

        self.assertIsNotNone(self.app.routes_registry)
        expected_registry_entry = AMQPRoute(
            type=RouteTypes.AMQP_RABBITMQ,
            routes=expected_routes,
            handler=_handler,
            default_options={},
            vhost=expected_vhost,
            options={
                "bulk_size": 1024,
                "bulk_flush_interval": 120,
                Events.ON_SUCCESS: Actions.ACK,
                Events.ON_EXCEPTION: Actions.REQUEUE,
            },
        )
        route = self.app.routes_registry.route_for(_handler)
        self.assertEqual(expected_registry_entry, route)
        self.assertEqual(42, await route["handler"](None))
Example #2
0
    async def test_on_success_requeue(self):
        @self.app.amqp.consume(
            ["queue"], options=AMQPRouteOptions(on_success=Actions.REQUEUE))
        async def _handler(messages):
            return 42

        route = self.app.routes_registry.amqp_routes[0]
        consumer = Consumer(route, *self.connection_parameters)

        await consumer.on_queue_message(msg=self.mock_message)
        self.mock_message.reject.assert_awaited_once_with(requeue=True)
Example #3
0
    async def test_register_action_on_exception(self):
        @self.app.amqp.consume(
            ["my-queue"], options=AMQPRouteOptions(on_exception=Actions.ACK))
        async def _handler(message):
            return 42

        self.assertIsNotNone(self.app.routes_registry)
        self.assertEqual(
            Actions.ACK,
            self.app.routes_registry[_handler]["options"][Events.ON_EXCEPTION],
        )
Example #4
0
    async def test_register_action_on_success(self):
        @self.app.amqp.consume(
            ["my-queue"], options=AMQPRouteOptions(on_success=Actions.REJECT))
        async def _handler(message):
            return 42

        self.assertIsNotNone(self.app.routes_registry)
        self.assertEqual(
            Actions.REJECT,
            self.app.routes_registry[_handler]["options"][Events.ON_SUCCESS],
        )
Example #5
0
    async def test_on_exception_ack_message(self):
        @self.app.amqp.consume(
            ["queue"], options=AMQPRouteOptions(on_exception=Actions.ACK))
        async def _handler(messages):
            raise Exception("BOOM!")

        route = self.app.routes_registry.amqp_routes[0]
        consumer = Consumer(route, *self.connection_parameters)
        with self.assertRaises(Exception):
            await consumer.on_queue_message(msg=self.mock_message)

        self.mock_message.ack.assert_awaited_once()
Example #6
0
    async def test_register_bulk_size(self):
        expected_bulk_size = 1024

        @self.app.amqp.consume(
            ["my-queue"],
            options=AMQPRouteOptions(bulk_size=expected_bulk_size))
        async def _handler(message):
            return 42

        self.assertIsNotNone(self.app.routes_registry)
        route = self.app.routes_registry.amqp_routes[0]
        self.assertEqual(expected_bulk_size, route["options"]["bulk_size"])
        self.assertEqual(42, await route["handler"](None))
Example #7
0
    async def test_on_exception_requeue_message(self):
        """
        Confirma que em caso de exceção, será feito `message.reject(requeue=True)`
        """
        @self.app.amqp.consume(
            ["queue"], options=AMQPRouteOptions(on_exception=Actions.REQUEUE))
        async def _handler(messages):
            raise Exception("BOOM!")

        route = self.app.routes_registry.amqp_routes[0]
        consumer = Consumer(route, *self.connection_parameters)

        with self.assertRaises(Exception):
            await consumer.on_queue_message(msg=self.mock_message)
        self.mock_message.reject.assert_awaited_once_with(requeue=True)
Example #8
0
    async def test_register_bulk_flush_timeout(self):
        expected_bulk_flush_interval = 120

        @self.app.amqp.consume(
            ["my-queue"],
            options=AMQPRouteOptions(
                bulk_flush_interval=expected_bulk_flush_interval),
        )
        async def _handler(message):
            return 42

        self.assertIsNotNone(self.app.routes_registry)
        route = self.app.routes_registry.amqp_routes[0]
        self.assertEqual(
            expected_bulk_flush_interval,
            route["options"]["bulk_flush_interval"],
        )
        self.assertEqual(42, await route["handler"](None))
Example #9
0
from datetime import datetime
from typing import List

from asyncworker import App
from asyncworker.connections import AMQPConnection
from asyncworker.rabbitmq import RabbitMQMessage, AMQPRouteOptions

amqp_conn = AMQPConnection(
    hostname="127.0.0.1", username="******", password="******", prefetch=1024
)

app = App(connections=[amqp_conn])


@app.amqp.consume(
    ["queue"],
    options=AMQPRouteOptions(bulk_size=1024 * 8, bulk_flush_interval=10),
)
async def _handler(msgs: List[RabbitMQMessage]):
    print(f"Recv {len(msgs)} {datetime.now().isoformat()}")


@app.run_every(1)
async def produce(app: App):
    await amqp_conn.put(data={"msg": "ok"}, routing_key="queue")


app.run()
"""

amqp_conn = AMQPConnection(hostname="127.0.0.1",
                           username="******",
                           password="******")

amqp_conn_2 = AMQPConnection(hostname="172.17.0.2",
                             username="******",
                             password="******")

app = App(connections=[amqp_conn, amqp_conn_2])


@app.amqp.consume(["queue"],
                  connection=amqp_conn,
                  options=AMQPRouteOptions(bulk_size=64))
async def _handler_broker_1(msgs: List[RabbitMQMessage]):
    print(f"Broker 1 ({amqp_conn.hostname}): Recv: {len(msgs)}")
    for m in msgs:
        await amqp_conn_2["/"].put(serialized_data=m.serialized_data,
                                   routing_key="queue")


@app.amqp.consume(["queue"],
                  connection=amqp_conn_2,
                  options=AMQPRouteOptions(bulk_size=128))
async def _handler_roker_2(msgs: List[RabbitMQMessage]):
    print(f"Broker 2 ({amqp_conn_2.hostname}): Recv: {len(msgs)}")


@app.run_every(1)