Set up your rabbit instance using a declarative yaml file.
Project description
RoboRabbit
RoboRabbit is a simple to use, opinionated, asynchronous abstraction over amqp/RabbitMQ (using aio_pika) and configuration CLI.
Features
- Create/assert Queues, Exchanges, and Bindings on connection
- Declarative Queue, Exchange, Binding, and Connection configuration using YAML
- Very straight forward async message handling
- Command line interface for bootstrapping rabbit from your roborabbit yaml config file.
Installation
pip
$ pip install roborabbit
poetry
$ poetry add roborabbit
Handle queue messages
The simplest worker possible. Connection information is in the roborabbit.yaml
file. The method run()
takes an dictionary with a key/value pair:
- key:
queue
- string, the name of the queue to listen to - value:
handler
- function, the callback function messages will be sent to
Notes
- Dead letter exchanges/queues are created and bound for you. (default is {queue_name}_dlq and {queue_name}_dlx)
- Messages are
reject
ed and pushed into the dead letter queue when an exception is thrown. - Messages are
nack
ed and returned to queue when disconnected (asyncio.CancelledError). - Messages are
ack
ed automatically after the callback has run without exception. - Multiple queues can be listened to at the same time.
- Connection is honored in the following order
- The
Connection()
class - Connection parameters defined in your roborabbit.yaml file
- Environment variables (see environment variables section)
- Default RabbitMQ connection values
- The
environment variables
RABBIT_HOST
default 'localhost'RABBIT_USER
default 'guest'RABBIT_PASS
default 'guest'RABBIT_PORT
default 5432RABBIT_VIRTUALHOST
default '/'RABBIT_PREFETCH
default 10
Basic Example
from roborabbit.roborabbit import RoboRabbit
from pathlib import Path
config_path = Path('roborabbit.yaml')
robo = RoboRabbit(config_path)
async def queue_handler(msg):
print(msg) # your logic here
await robo.run({'queue_1', queue_handler})
Explicit connection example
If you want control over the configuration, you can pass in the roborabbit connection object.
from roborabbit.connection import Connection
from roborabbit.roborabbit import RoboRabbit
from pathlib import Path
config_path = Path('roborabbit.yaml')
connection = Connection(
host='not.localhost.com',
username='bob',
password='pas123',
port=4499,
virtualhost='/')
robo = RoboRabbit(config_path, connection)
async def queue_handler(msg):
print(msg) # your logic here
async def work():
await robo.run({'queue_1', queue_handler})
Command
roborabbit --config path/to/roborabbit.yaml
info
Usage: roborabbit [OPTIONS]
import yaml config file and creates a dictionary from it
Options:
--config TEXT Path to rabbit config yaml file
--host TEXT RabbitMQ host
--port TEXT RabbitMQ port
--virtualhost TEXT RabbitMQ virtualhost
--username TEXT RabbitMQ username
--password TEXT RabbitMQ password
--help Show this message and exit.
Override environment variables
RABBIT_USER=guest
RABBIT_PASS=guest
RABBIT_HOST=localhost
RABBIT_PORT=5672
RABBIT_VHOST=/
Example yaml files
Simple declare queue, exchange, and bind
host: localhost
username: guest
password: guest
virtualhost: /
port: 5672
exchanges:
- name: exchange_1
type: topic
queues:
- name: queue_1
bindings:
- from:
type: exchange
name: exchange_1
to:
type: queue
name: queue_1
routing_keys:
- records.created
Header exchange declaration and binding
host: localhost
username: guest
password: guest
virtualhost: /
port: 5672
exchanges:
- name: exchange_2
type: headers
queues:
- name: queue_2
bindings:
- from:
type: exchange
name: exchange_2
to:
type: queue
name: queue_1
bind_options:
- x-match: all
hw-action: header-value
All Values Available
# Connection info
host: localhost
username: guest
password: guest
virtualhost: /
port: 5672
# Exchange declarations
exchanges:
- name: string
type: topic|headers|direct|fanout # topic is default
durable: false # default
auto_delete: true # default
# queue declarations
queues:
- name: string
type: quorum # Not required. This is the default and currently only option available (For us, all our queues are quorum. We manually create the queue that needs other requirements). MR welcome
dlq: string # default {queue_name}_dlq
dlx: string # default {queue_name}_dlx
durable: true # default
robust: true # default
auto_delete: false # default
exclusive: false # default
auto_delete_delay: 0 # default
arguments: # rabbit specific key/value pairs
key_1: value_1
key_2: value_2
# bindings
bindings:
- from:
type: exchange
name: string
to:
type: exchange|queue
name: string
routing_keys:
- record.created # list of string, required, unless bind_options is defined
bind_options: # list of `x-match` and `header-key`, required if binding to a header exchange
- x-match: all|any # header type of matcher
header-key: string # header topic to be matched
Planned features:
- Simple message publishing
- Expose the underlying channel so you can drop right into aio_pika if you want.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
roborabbit-0.3.0.tar.gz
(11.2 kB
view details)
Built Distribution
File details
Details for the file roborabbit-0.3.0.tar.gz
.
File metadata
- Download URL: roborabbit-0.3.0.tar.gz
- Upload date:
- Size: 11.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.10 CPython/3.9.7 Darwin/20.6.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ada9b4c1a9a46db7590c7598227ff4a2d43db83470dc885dc7eb4a9bb1e83fef |
|
MD5 | 8ca833a99dd06893902de050bc8d0f59 |
|
BLAKE2b-256 | 622b77db2c86d88ed3fafb1057ce8d38f1104383ab372b5b09c94915246f2d5b |
File details
Details for the file roborabbit-0.3.0-py3-none-any.whl
.
File metadata
- Download URL: roborabbit-0.3.0-py3-none-any.whl
- Upload date:
- Size: 11.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.10 CPython/3.9.7 Darwin/20.6.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 44ca3c15acac0e5393a3724ad2dbf3a6f045389bfc7e24181bb14136f7da53cd |
|
MD5 | d12e3cdcfc631dddc8bd5e1f2549ec3f |
|
BLAKE2b-256 | 54faa07494dbf61a89eec98260117cde68a7a7b0326c8c66b2fa2e75f28b67cd |