Skip to content

CSharp bridge between Postgres async notifications and NATS message bus.

Notifications You must be signed in to change notification settings

saboyle/dotnet-pg-nats-bridge

Repository files navigation

dotnet-pg-nats-bridge

Exploratory implementation of a .net Postgres to NATS bridge.

This is a .net version of an asyncio asyncpg python version (https://github.com/saboyle/asyncio-pg-nats-bridge).

A minor difference is the NOTIFY channel used in this example has been changed to exclude the period '.' as it seems to cause problems with the Npgsql package.

#### Database setup
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
-- CREATE TABLE fixtures (fixture_id uuid primary key, params json not null);
DROP TABLE fixtures;
CREATE TABLE fixtures (fixture_id int primary key, params int not null);


#### Create trigger with Notify on Create, Update or Delete
begin;

create or replace function tg_notify ()
 returns trigger
 language plpgsql
as $$
declare
  channel text := TG_ARGV[0];
begin
  PERFORM (
     with payload(key, params) as
     (
       select NEW.fixture_id, NEW.params as fixs
     )
     select pg_notify(channel, row_to_json(payload)::text)
       from payload
  );
  RETURN NULL;
end;
$$;

CREATE TRIGGER notify_fixtures
         AFTER INSERT
            ON fixtures
      FOR EACH ROW
       EXECUTE PROCEDURE tg_notify('fixtures');

commit;

-- To setup listeners to Async notify channel.
LISTEN fixtures;

-- Inserting a dummy record to test async notifications.
insert into fixtures values (4,1);

Usage:

c:>pg_nats_bridge.exe -h

Usage:  [options]

Options:
  -?|-h|--help                            Show help information
  -pgHost|--postgresHost <host>           Postgres host
  -pgPort|--postgresPort <port>           Postgres port
  -pgChannel|--postgresChannel <channel>  Postgres notification channel
  -pgDB|--postgresDBl <channel>           Postgres database
  -pgUser|--postgresUser <user>           Postgres user
  -pgPassword|--postgresPassword <user>   Postgres password
  -msgHost|--msgHost <host>               NATS Host
  -msgPort|--msgPort <host>               NATS Port
  -msgChannel|--msgChannel <channel>      NATS Channel
  
  C:>pg_nats_bridge.exe

Example execution

Bridging [Db localhost:5432 postgres (fixtures)] -> [NATS demo.nats.io:4222 (fixtures)]

03/04/2019 11:18:00: {"key":51,"params":150}

About

CSharp bridge between Postgres async notifications and NATS message bus.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages