Esempio n. 1
0
class StringApi(Microservice):
    name = "string_api"
    amqp = AMQPResource(
        outputs=[
            AMQPOutput(queue='upper_operator', codec=JsonCodec),
            AMQPOutput(queue='lower_operator', codec=JsonCodec)
        ]
    )
    string_api_http_server = HTTPServerResource()

    async def upper_handler(self, request):
        self.logger.info(f"Received request in upper endpoint: {request.body}")
        upper_operator_output = microservice.amqp.outputs.get('upper_operator')
        response = await upper_operator_output.request(request.body)
        self.logger.info(f"Sending response in upper endpoint {response}")
        return text(response)

    async def lower_handler(self, request):
        self.logger.info(f"Received request in lower endpoint: {request.body}")
        lower_operator_output = microservice.amqp.outputs.get('lower_operator')
        response = await lower_operator_output.request(request.body)
        self.logger.info(f"Sending response in lower endpoint {response}")
        return text(response)

    async def start(self):
        self.string_api_http_server.add_endpoint("/upper", self.upper_endpoint)
        self.string_api_http_server.add_endpoint("/lower", self.lower_endpoint)
        await super().start()
Esempio n. 2
0
async def test_input_request_async_iterator(aconnection, task_manager):
    queue = "cats"

    @AMQPRequestInput(queue=queue)
    async def consume_cats(message, response):
        await response.send_response(message)

    output = AMQPOutput(queue=queue)

    await aconnection.register(consume_cats, output)
    task_manager.start_task("consumer",
                            consume_cats.callback_trigger(task_manager))

    message = "test message"
    await asyncio.wait_for(output.request(message), 1)
Esempio n. 3
0
async def test_output_request_with_codec(aconnection, task_manager):
    queue = "cats"

    @AMQPRequestInput(queue=queue, codec=JsonCodec)
    async def consume_cats(message, response):
        await response.send_response(message)

    output = AMQPOutput(queue=queue, codec=JsonCodec)

    await aconnection.register(consume_cats, output)
    task_manager.start_task("consumer",
                            consume_cats.callback_trigger(task_manager))

    message = {"message": "test"}
    response = await output.request(message)
    assert response
Esempio n. 4
0
async def test_output_request(event_loop, aconnection, task_manager):
    queue = "cats"

    @AMQPRequestInput(queue=queue)
    async def consume_cats(message, response):
        await response.send_response(message)

    output = AMQPOutput(queue=queue)

    await aconnection.register(consume_cats, output)
    task_manager.start_task("consumer",
                            consume_cats.callback_trigger(task_manager))

    message = "test message"
    response = await output.request(message)
    assert response
Esempio n. 5
0
async def test_output_push(event_loop, aconnection, task_manager):
    message_received_future = asyncio.Future(loop=event_loop)
    queue = "cats"

    @AMQPPullInput(queue=queue)
    async def consume_cats(message):
        message_received_future.set_result(message)

    output = AMQPOutput(queue=queue)

    await aconnection.register(consume_cats, output)
    task_manager.start_task("consumer",
                            consume_cats.callback_trigger(task_manager))

    message = "test message"
    await output.push(message)
    await asyncio.wait_for(message_received_future, 1, loop=event_loop)
class MyMicroservice(Microservice):
    name = "amqp_example"
    extra_loggers_names = {name, "asyncio", "tamarco"}

    def __init__(self):
        super().__init__()
        self.settings.update_internal({
            "system": {
                "deploy_name": "test",
                "logging": {
                    "profile": "PRODUCTION"
                },
                "resources": {
                    "amqp": {
                        "host": "127.0.0.1",
                        "port": 5672,
                        "vhost": "/",
                        "user": "******",
                        "password": "******",
                        "connection_timeout": 10,
                    }
                },
            }
        })

    amqp = AMQPResource(
        inputs=[AMQPSubscriptionInput(queue="cows", codec=JsonCodec)],
        outputs=[AMQPOutput(queue="cows", codec=JsonCodec)],
    )

    @task
    async def produce_cows(self):
        cows_output = self.amqp.outputs["cows"]
        while True:
            await asyncio.sleep(1)
            message = {"cow": "MOOOO"}
            await cows_output.publish(message)
            self.logger.info(f"Sent message {message} to cows queue")

    @task
    async def consume_cows(self):
        cows_stream = self.amqp.inputs["cows"]
        async for message in cows_stream:
            self.logger.info(f"Consumed message from cows queue: {message}")
class MyMicroservice(Microservice):
    name = "amqp_example"
    extra_loggers_names = {name, "asyncio", "tamarco"}

    def __init__(self):
        super().__init__()
        self.settings.update_internal({
            "system": {
                "deploy_name": "test",
                "logging": {
                    "profile": "PRODUCTION"
                },
                "resources": {
                    "amqp": {
                        "host": "127.0.0.1",
                        "port": 5672,
                        "vhost": "/",
                        "user": "******",
                        "password": "******",
                        "connection_timeout": 10,
                    }
                },
            }
        })

    amqp = AMQPResource(outputs=[AMQPOutput(queue="cows", codec=JsonCodec)])

    @task
    async def produce_cows(self):
        cows_output = self.amqp.outputs["cows"]
        while True:
            await asyncio.sleep(1)
            message = {"cow": "MOOOO"}
            response = await cows_output.request(message)
            self.logger.info(
                f"Sent message to cows {message} with response {response}")

    @AMQPRequestInput(resource=amqp, queue="cows", codec=JsonCodec)
    async def consume_messages(self, message, response_handler):
        self.logger.info(f"Consumed message from cows queue: {message}")
        await response_handler.send_response({"cat": "MEOW"})