PostgreSQL to AMQP, forward PostgreSQL notifications to an AMQP queue.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
src update lapin Jul 13, 2017
.gitignore feat(v0.1.0) Apr 4, 2017
Cargo.toml update lapin Jul 13, 2017
Dockerfile feat(docker): add docker support Apr 5, 2017
README.md Update README.md Jun 9, 2018
circle.yml

README.md

⚠️ 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 version Crates.io Crates.io Docker Automated build Docker Pulls Docker Stars

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