5 releases
Uses old Rust 2015
0.1.4-pre | Jul 23, 2017 |
---|---|
0.1.3 | Apr 5, 2017 |
0.1.2 | Apr 5, 2017 |
0.1.1 | Apr 5, 2017 |
0.1.0 | Apr 4, 2017 |
#1195 in Database interfaces
8KB
79 lines
⚠️ Discontinued
@subzerocloud took inspiration from this project and built pg-amqp-bridge which now has more options, use it instead 👍
🚇 PostgreSQL to AMQP gateway
Forward PostgreSQL pg_notify
notifications to an AMQP queue.
⛴ Cargo
cargo install postgresql-to-amqp
🐳 Docker
docker run --rm -it \
-e POSTGRESQL_URI=postgresql://username:password@domain.tld:port/database \
-e POSTGRESQL_CHANNEL=foo \
-e AMQP_URI=amqp://127.0.0.1:5672/ \
-e AMQP_QUEUE_NAME=queueName fgribreau/postgresql-to-amqp
⚙ Configuration
Configuration is done through environment variables:
- POSTGRESQL_URI: e.g.
postgresql://username:password@domain.tld:port/database
- POSTGRESQL_CHANNEL: e.g.
foo
- AMQP_URI: e.g.
amqp://127.0.0.1:5672/
- AMQP_QUEUE_NAME: e.g.
queueName
🎩 Usage
Start the forwarder:
POSTGRESQL_URI="postgresql://username:password@domain.tld:port/database" POSTGRESQL_CHANNEL="foo" AMQP_URI="amqp://127.0.0.1:5672/" AMQP_QUEUE_NAME="queueName" postgresql-to-amqp
Execute in psql:
SELECT pg_notify('foo', 'payload');
The forwarder will log and forward the notification to the amqp queue:
Forwarding Notification { process_id: 31694, channel: "foo", payload: "payload" } to queue "queueName"
👁 Philosophy
- Low memory consumption (1,9Mo)
- Single binary
- No dependency
- Predictable performance
🔫 Todo
I will happily accept PRs for this:
- AMQP connection string (AMQP authentication support) 👻
- Support JSON message
- Publish to exchange
- Add original channel as message property
- Add postgresql-to-amqp
version
as message property - Let environment variables specify additional message properties
- Handle AMQP disconnection/reconnection
- Handle PostgreSQL disconnection/reconnection
- Health check route
- Metric route
- Docker support
- Kubernetes support 😍
- Make a first major release with tests ☝️
Related work
- pgsql-listen-exchange - RabbitMQ Exchange that publishes messages received from PostgreSQL Notifications
Dependencies
~26MB
~592K SLoC