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.
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';
Extract the contents of the release zip file into your RabbitMQ plugins directory. Once extracted, run rabbitmq-plugins enable pgsql_listen_exchange
.
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, ""}
]}
].
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 |
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 |
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 |
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.