vahuja4
Notification Engine using Elixir
Hi Everyone,
I am new to Elixir (read the first seven chapters of Elixir in Action and completed some exercises). Programming in Elixir is certainly joyful :-)
Am working in the blockchain space and I need to develop a notification engine. Since this is my first time designing this kind of a system, I need some advice please. The requirement is as follows:
-
Whenever a transaction is done on a blockchain, like Hyperledger Fabric (HLF), an event can be emitted. In my specific case, the event is a JSON with multiple fields.
-
HLF has a nodejs SDK which provides the functionality to listen to these events.
-
These events have to be sent to a notification engine which can do things like below:
a. If an event has been generated with ‘quantity’ > 1000, then notify the ‘supplier’.
b. In a 24 hour window, how many orders have been shipped to me; notify the ‘receiver’.
c. In a 5 minute window, do something based on a ‘field’ or 'fields’ in the event JSON; notify a particular ‘person’ which is mentioned in the event JSON.
The basic design in my mind is below:
- Run one server per notification type.
2.Another server which manages all the notification servers. Basically, this server will maintain a map between the notification type and the notification server pid. This server will also receive the events from the nodejs HLF sdk.
Is this design reasonable? Another question I have is that the notifications have to be persisted as well. Should the database writes happen in a separate process/ task? Lastly, is ther ea good way to implement the notion of a time window in Elixir? Looking forward to some guidance. Thank you!
Trending in Questions
Other Trending Topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #elixirconf-us
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #metaprogramming
- #performance
- #security











Most Liked
tcoopman
Hi @vahuja4,
Welcome to ElixirForum!
What do you mean exactly by server here? Do you mean a GenServer? Reading along, it seems you mean indeed GenServer because you want to have a map to the notification pid.
It’s kind a hard to say if your design is reasonable or not. For these kind of things I would wonder about some guarantees first:
For the design of your code, I would recommend you to read this awesome blog The Erlangelist - To spawn, or not to spawn?.
As you can read there in the main points:
It sounds like you are using processes to split business logic, and that’s not what processes are for. It sounds like you probably want modules/functions for your different notifications types and processes to handle the way you handle messages. How you want to handle the messages depends a lot on how robust you want to be in handling the messages.
Last Post!
vahuja4
Thank you for your reply! I skimmed through the blog and will re-read it in detail. It is certainly helpful. Yes, in my post, when I say server I refer to GenServer (that is all I know today). The reason I was thinking of one server per notification type is that every event will have to be checked for the different patterns that could lead to a notification. In other words, an event could contribute towards multiple notifications. And this reasoning is based on the following statement in the ‘Elixir in Action’ book: Another way to look at server processes is to think of them as services. Each process is like a small service that’s responsible for a single task.