Move messages from one source to another one.
Project description
Payl[oad Spoo]ler
Send your payload now, treat it later.
What is this?
Payler is an asyncio-based Python application intended to provide a way of delaying message execution. The goal of this program is to reduce the workload on your existing message broker solution (Only RabbitMQ is currently supported, but other message-brokers can be easily implemented) by putting the payloads in a storage backend which will then be polled to re-inject payloads in the corresponding destination.
Installation
Through pypi:
$ pip install payler
Through poetry:
$ git clone https://github.com/tbobm/payler
$ cd payler
$ poetry install
How to use this
Using the command line:
- Specify the input and output URLs for your drivers (see configuration)
- (optional) Customize the configuration to suit your needs currently the example configuration is the only valid one
- Run payler
payler --config-file configuration.yaml
Using the docker image:
- Pull the docker image
docker pull ghcr.io/tbobm/payler:latest
- (optional) Customize the configuration to suit your needs currently the example configuration is the only valid one (mount the configuration file into the volume at
/configuration.yaml
) - Run the docker image and provide environment variables
docker run -d --name payler -e BROKER_URL="amqp://payler:secret@my-broker/" -e MONGODB_URL="mongodb://payler:secret@my-mongo/payler" ghcr.io/tbobm/payler
Configuration
In order to configure the different workflows, payler uses a configuration file (see configuration.yml).
Example config file:
---
workflows:
- name: "Fetch payloads from RabbitMQ and store them in MongoDB"
location: "payler"
callable: "client.process_queue"
- name: "Re-injects payloads to RabbitMQ"
callable: "client.watch_storage"
The workflows[].name
attribute is currently unused, but will offer a more human-friendly way of getting informed about a workflow's state.
The workflows[].location
corresponds to the package where the workflows[].callable
can be found. It defaults to payler
, but can this is a way of offering a dumb and simple plugin mechanism by creating function matching the following signature:
async def my_workflow(loop: asyncio.AbstractEventLoop) -> None:
"""My user-defined workflow."""
# configure your driver(s)
input_driver.serve()
Features
- Listen to a Broker Queue
- Store messages with a duration or date as metadata
- Re-inject the messages after the duration in the default Exchange
- Output failed messages to global output
Testing
This project has unittests with pytest. A wrapper script is available at run-tests.sh.
Contributing
Feel free to open new issues for feature requests and bug reports in the issue page and even create PRs if you feel like it.
This project is linted with pylint
with some minor adjustments (see the setup.cfg).
Note
This side-project is born from the following:
- I wanted to experiment with Python's
asyncio
- A friend of mine had issues with delaying lots of messages using RabbitMQ's delayed exchange plugin
- I was looking for a concrete use-case to work with Github Actions.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file payler-0.2.0.tar.gz
.
File metadata
- Download URL: payler-0.2.0.tar.gz
- Upload date:
- Size: 10.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.4 CPython/3.9.1 Linux/5.4.0-1039-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0103bbe176283798ce7a895e08b2281e2b38033b6804143a37bd6915549249bd |
|
MD5 | 6f3a0ea7c115eb33a45794bdadc6a924 |
|
BLAKE2b-256 | 039f72384865be9a929f0b675685f4456b7a16c2821408176010169c6bb362b7 |
File details
Details for the file payler-0.2.0-py3-none-any.whl
.
File metadata
- Download URL: payler-0.2.0-py3-none-any.whl
- Upload date:
- Size: 12.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.4 CPython/3.9.1 Linux/5.4.0-1039-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 834a55a894ac0ad0c7f8b04e767590bcfdd611c2cbbe751938c9004bc147a513 |
|
MD5 | a18fa9ebe92282eea05ee17aa58c6a17 |
|
BLAKE2b-256 | 0713ff19f6a82297e2bd624003c58132490dad5b7942dee575329d931e399d5b |