Skip to content

RabbitMQ Exchange that publishes messages received from PostgreSQL Notifications.

License

Notifications You must be signed in to change notification settings

gmr/pgsql-listen-exchange

Repository files navigation

PostgreSQL LISTEN Exchange

A RabbitMQ exchange type that translates PostgreSQL NOTIFY messages to AMQP messages and publishes them to bound queues. The PostgreSQL NOTIFY message channel is used as the routing key for the message using direct exchange style routing mechanics.

Build Status

Example

To publish Postgres notifications as AMQP messages into queues bound to a x-pgsql-listen exchange with a binding key of test, run the following command in psql:

postgres=# NOTIFY test, 'This is a test';

Installation

Extract the contents of the release zip file into your RabbitMQ plugins directory. Once extracted, run rabbitmq-plugins enable pgsql_listen_exchange.

Configuration

Argument Based Configuration

To connect to PostgreSQL using something other than the default pgsql://postgres@localhost:5432/postgres connection, you can add arguments when declaring the exchange:

Setting Description Data Type
x-host The PostgreSQL server hostname String
x-port The port to connect on Number
x-dbname The database name to connect to String
x-user The user to connect as String
x-password The password to use when connecting String

Policy Based Configuration

To apply configuration via a policy, the following settings are available:

Setting Description Data Type
pgsql-listen-host The PostgreSQL server hostname String
pgsql-listen-port The port to connect on Number
pgsql-listen-dbname The database name to connect to String
pgsql-listen-user The user to connect as String
pgsql-listen-password The password to use when connecting String

Configuration in rabbitmq.config

You can also change the default connection values in the rabbitmq.config file:

Setting Description Data Type Default Value
host The PostgreSQL server hostname list "localhost"
port The port to connect on integer 5432
dbname The database name to connect to list "postgres"
user The user to connect as list "postgres"
password The password to use when connecting list ""

Example rabbitmq.config

[{pgsql_listen_exchange,
  [
    {host, "localhost"},
    {port, 5432},
    {dbname, "postgres"},
    {user, "postgres"},
    {password, ""}
  ]}
].

Message Properties

The exchange will automatically add the following properties to messages:

Property Value
app_id pgsql-listen-exchange
headers See "Headers Properties Values" table below
timestamp The UNIX epoch timestamp of the publishing server

Headers Property Values

The following table details the values of the headers property that is set on each message.

Key Value
pgsql-channel The PostgreSQL notification channel
pgsql-server The host and port of the PostgreSQL server
source-exchange The pgsql-listen-exchange that the notification was received by

Specifying Other Properties

In addition to the automatically set message properties, the exchange can set configured message properties. To set one of the supported message properties, specify the property name and value when binding to the exchange. For example, to set the content_type property, specify content_type and the value it should be set to when binding a queue to the exchange. The following message properties are supported:

Property Data Type
content_encoding String
content_type String
delivery_mode Number
priority Number
reply_to String
type String

Building

Steps to custom build a version of the pgsql-listen-exchange plugin follow the development environment instructions at https://www.rabbitmq.com/build-server.html#prerequisites and then run the following:

make tests
make dist
zip -r pgsql-listen-exchange.zip plugins/epgsql-* plugins/pgsql-listen-exchange-*

Unzip that file into the plugins directory for RabbitMQ and enable as you would any other plugin.