Skip to content

📻 Lightweight & Reliable MongoDB Pub/Sub Messenger

Notifications You must be signed in to change notification settings

Clouke/mongo-pubsub

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

90 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Mongo-PubSub: A MongoDB Pub/Sub Messenger Written in Java

Add Mongo-PubSub to your own build

Maven

<repository>
  <id>mongo-pubsub</id>
  <url>https://raw.github.com/Clouke/mongo-pubsub/repository/</url>
</repository>

<dependency>
  <groupId>gg.clouke</groupId>
  <artifactId>mongo-pubsub</artifactId>
  <version>1.0.0</version>
</dependency>

Recommended

Since MongoDB is not primarily made for Pub/Sub messaging I recommend using Bridge - A Redis Pub/Sub Wrapper written in Java

Usage Examples

Building your client

NOTE: flushing is set to 5 seconds by default, if you wish to disable flushing, use disableFlushing()

Simple builder with URI

MongoPubSubClient client = MongoPubSubClient.newBuilder()
  .flushAfterWrite(10L, TimeUnit.SECONDS)
  .uri("mongodb://mongodb0.example.com:27017")
  .database("my_database")
  .build();

Compact builder

 MongoPubSubClient client = MongoPubSubClient.newBuilder()
  .flushAfterWrite(10L, TimeUnit.SECONDS)
  .host("localhost")
  .port(27017)
  .username("admin")
  .password("admin")
  .database("my_database")
  .build();

Subscribing

Functional subscriber

client.subscribers()
  .listenDirectly("my-listener", // <-- the target
    payload -> {
      String rawValue = payload.getRawValue("key"); // returns value <- key
      SerializableTestObject serializableValue = payload.getValueAs("SerializedObject", SerializableTestObject.class); // deserializes into object
      payload.close(); // close the payload
    });

Creating and registering a subscriber

@Identifier("my-listener") // <-- the target - @Identifier is required for implementations
public class MyListener implements Subscriber {
  @Override
  public void onMessage(Payload payload) {
    System.out.println("Received payload " + payload);
    payload.close(); // close the payload
  }
}
client.subscribers().addListener(new MyListener());

Queueing a message

client.enqueue("my-listener", Payload.empty() // <-- target identifier, payload
  .withRawParameter("key", "value") // simple key-value pair
  .withSerializableParameter("SerializedObject", new SerializableTestObject("Jonathan", 20))); // serializable objects

Contributing

Contributions are highly appreciated! If you feel your pull request is useful, go ahead! Before creating a pull request, make sure your changes works as it should and give a description on what it provides.

About

📻 Lightweight & Reliable MongoDB Pub/Sub Messenger

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages