Skip to content

RabbitMQ framework that works like http framework.

License

Notifications You must be signed in to change notification settings

shadrus/rabbitbus

Repository files navigation

PyPI - Python Version Build Status

RabbitBus

Feel RabbitMQ like HTTP

  • Custom CorrelationManagers
  • Regexp routes

Installation

RabbitBus requires Python 3.6 >, aioamqp.

Install the dependencies and library.

$ pip install rabbitbus

Example:

import asyncio
from rabbitbus.manager import DatabusApp, Configuration
from rabbitbus.acks.requests import AmqpRequest
from rabbitbus.acks.responses import AckResponse

async def my_view(request: AmqpRequest):
    # Write your code here
    return AckResponse(request)

def serve():
    loop = asyncio.get_event_loop()
    # Inherit from CorrelationManager for custom correlation storages
    app = DatabusApp(conf=Configuration())
    app.add_route(r'^CASH_REGISTER_EQUIPMENTS[a-zA-Z_]{4}$', my_view)
    app.start(loop)


if __name__ == '__main__':
    serve()

If message has reply_to property, you can make response like:

from rabbitbus.acks.requests import AmqpRequest
from rabbitbus.acks.responses import AckResponse

async def my_view(request: AmqpRequest):
    # Write your code here
    return AckResponse(request, data={"result": 1})

"reply_to" will be converted to the "routing_key" and message will be published to the app exchange. More about RPC you can read in RabbitMQ documentation

Sometimes you may need to pause consuming. Three method are to your needs:

app.pause_consuming()
app.continue_consuming()
app.is_paused() #bool to test if your app is paused

To send message from any view you can also use:

async def my_view(request: AmqpRequest):
    # Write your code here
    request.app.send_message(data={"test": True}, routing_key="TEST")
    return AckResponse(request)

About

RabbitMQ framework that works like http framework.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages