67 lines
1.6 KiB
Plaintext
67 lines
1.6 KiB
Plaintext
@startuml
|
|
title Notification
|
|
|Server|
|
|
partition Event {
|
|
start
|
|
:Article is modified;
|
|
:Send message to "notification" exchange (RabbitMQ);
|
|
:RabbitMQ send message to "push" and "email" queue;
|
|
stop
|
|
}
|
|
split
|
|
partition Email {
|
|
-[hidden]->
|
|
:Consume "email" queue<
|
|
repeat :get next notification;
|
|
:Get followers of article from DB;
|
|
while (loop on followers)
|
|
:Send email to the citizen>
|
|
endwhile
|
|
:ACK>
|
|
repeat while()
|
|
detach
|
|
}
|
|
splitagain
|
|
partition Push {
|
|
-[hidden]->
|
|
:Consume "email" queue<
|
|
repeat :get next notification;
|
|
:Get followers of article from DB;
|
|
while (loop on followers)
|
|
:Send notification message to redis>
|
|
endwhile
|
|
:ACK>
|
|
repeat while()
|
|
detach
|
|
}
|
|
splitagain
|
|
partition "Notification direct" {
|
|
-[hidden]->
|
|
|Client|
|
|
start
|
|
:Client arrive on the web site;
|
|
:Connect to the websocket;
|
|
|Server|
|
|
:Get citizen notification
|
|
from redis;
|
|
while (on each notifications)
|
|
:Send notification to websocket>
|
|
endwhile(no notification left)
|
|
|Client|
|
|
:show notification;
|
|
|Server|
|
|
:Subscribe to redis event;
|
|
repeat :On new notification;
|
|
:Get new notification from redis;
|
|
:Send notification to websocket>
|
|
|Client|
|
|
:show notification;
|
|
|Server|
|
|
repeat while (wait notification)
|
|
detach
|
|
}
|
|
endsplit
|
|
|
|
|
|
@enduml
|