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

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 inMQto publish totopics.RabbitMQ- as Message Broker acrosspuma-rest,push-svc,mail-svc.Cassandra Database- for persisting notification for later retrieval. (such aspull, or a simplestatus).puma-rest-client- is supposedly a helper library forpuma-restto enable fastermessage templating? but maybe all this was built-in with the existing libraries.