Skip to content

PostgreSQL to AMQP, forward PostgreSQL notifications to an AMQP queue.

Notifications You must be signed in to change notification settings

FGRibreau/postgresql-to-amqp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

32 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

⚠️ 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 Slack

⛴ 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