Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Consume Postgres LISTEN/NOTIFY messages in your JVM applications using RxJava, and the standard Postgres JDBC driver.

License

Notifications You must be signed in to change notification settings

ayedo/PostgresNotifyFlowable

Repository files navigation

Postgres Notify Flowable

Consume Postgres LISTEN/NOTIFY messages in your JVM applications using RxJava, and the standard Postgres JDBC driver.

  • Enables RxJava's rich API for asynchronous processing
  • Requires only a single database connection for as many subscribers as you want
  • Uses standard Postgres JDBC driver
  • Minimizes polling overhead by centralizing it

About

The Postgres JDBC driver has built in support for retrieving LISTEN/NOTIFY messages. The provided API is pretty basic. This code is an adapter from this basic API to RxJava to allow for a much richer asynchronous processing API.

Further, Postgres requires a dedicated connection to call LISTEN on. One has to be careful not to be too wasteful with database connections. This code enables you to ergonomically share a single such connection for multiple usages in your application by making use of the reactive extensions share() functionality.

The idea is that you create a single PostgresNotifyFlowable, providing it all channels you would like to LISTEN on, and then you can subscribe to this Flowable as many times as you want sharing a single database connection across your application.

The standard Postgres JDBC driver API is built around polling to retrieve LISTEN/NOTIFY messages. This might be wasteful in some scenarios, but at the same time one might not want to forgo the advantages of using the standard driver over a non-standard non-polling based one. This code helps you minimize the overhead by making it simple to have centralized polling over a single connection.

Setup

Add JitPack to your repositories:

repositories {
 maven { url 'https://jitpack.io' }
}

Add the dependency:

dependencies {
 implementation 'com.github.ayedo:PostgresNotifyFlowable:v1.2.0'
}

How to use

Kotlin

val channels = PostgresNotifyFlowable.forChannels(
 jdbcUrl = db.jdbcUrl,
 user = db.username,
 password = db.password,
 channels = listOf("test"))
channels
 .filter({ it.name == "test" })
 .subscribe({ notification: PGNotification ->
 println("${it.name} ${it.parameter}")
 })

Java

Flowable<PGNotification> notifications = PostgresNotifyFlowable.INSTANCE.forChannels("url", "user", "password", List.of("test"));
notifications.filter(notification -> notification.getName().equals("test"))
 .subscribe(notification -> System.out.println(notification.getName() + " " + notification.getParameter()));

About

Consume Postgres LISTEN/NOTIFY messages in your JVM applications using RxJava, and the standard Postgres JDBC driver.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

AltStyle によって変換されたページ (->オリジナル) /