Skip to main content

Introduction

I had the initial curiosity to research notification systems as I've realized I barely touched it within my whole career. In PuMa (Push, Pull, Mail), the target is to create a reusable notification service which can be used by client-specific applications. The ff. are notification types these service will provide:

  • MAIL : (TBD)
  • Push : To limit the scope, Push notification is for web applications only.
  • Pull : Same as push, web applications only.

The idea is to:

  • Allow APIs to have a notification system that is not invasive to their existing flows
    • PUMA will be an Injectable RestTemplate client to the services.
    • I must also create a helper class for templating. (TBD)

Tech Used

  • Cassandra Database - for storing possibly large amounts of data (especially for push & pull notifications)
  • RabbitMQ - for messaging protocol across the services to allow non-blocking operations. (There is a mention of push notification usage in their documentation but I'm yet to dive with this concept).
  • Java 17 - cause why not.
  • Spring Websocket - utilizing Spring as WebSocket topic Publisher.

PUMA Sequence Diagram

Puma Sequence Diagram

In the above simple sequence diagram, I have created the ff:

  • puma-rest- RESTful API for external applications, to send their push notification to end user.
  • mail-svc - TBD for Mailing.
  • push-svc - Service consuming messages in MQ to publish to topics.
  • RabbitMQ - as Message Broker across puma-rest, push-svc, mail-svc.
  • Cassandra Database - for persisting notification for later retrieval. (such as pull, or a simple status).
  • puma-rest-client - is supposedly a helper library for puma-rest to enable faster message templating? but maybe all this was built-in with the existing libraries.