Notifiche ricorrenti in un'architettura di microservizio

0

Il mio problema riguarda due servizi: NotificationService (dovrebbe essere usato da più di un semplice SurveyService), SurveyService.

Desidero inviare all'utente notifiche ricorrenti per chiedere la partecipazione a un sondaggio. Questi devono essere inviati in un determinato intervallo fino al raggiungimento del numero massimo di notifiche o fino a quando l'utente non ha partecipato al sondaggio.

Senza la parte ricorrente lo farei in questo modo: SurveyService invia un evento "UserAddedToSurvey" che viene elaborato dal NotificationService che in risposta notifica all'utente.

Ma con le notifiche ricorrenti devo considerare se l'utente ha partecipato e quando è stata inviata l'ultima notifica / quanti sono stati inviati riguardo questo argomento.

Se capisco che l'idea alla base dei microservizi è che non dovrebbero avere alcuna conoscenza reciproca. Ma ho bisogno di informazioni da entrambi i servizi per decidere se informare di nuovo l'utente.

La mia unica idea a riguardo sarebbe un cronjob in SurveyService che invia regolarmente un evento UserStillNotParticipatedInSurvey e consente a NotificationService di decidere se inviare o meno una notifica in base all'ultima data di notifica e al numero totale di notifiche riguardanti questo argomento.

Sarebbe una soluzione appropriata? O ci sono modi migliori / più semplici per risolvere questo problema?

    
posta Maurice Döpke 11.06.2018 - 15:37
fonte

2 risposte

1

Sembra che tu abbia tre responsabilità qui:

  • Completa il sondaggio
  • Determina se ricordare all'utente di eseguire il sondaggio
  • Ricorda all'utente

Ciò significa che teoricamente potresti avere tre microservizi. Your SurveyService invia un evento UserParticipated a un nuovo servizio, chiamiamolo ReminderService. Il ReminderService è a conoscenza se il sondaggio è stato completato e quando è stato inviato l'ultimo promemoria. Ogni intervallo controlla gli utenti che non hanno ancora completato il sondaggio e inviano un evento di notifica. Il cronjob che hai menzionato potrebbe attivare ReminderService, ma potresti anche implementare la pianificazione nel tuo ReminderService. Questo ti dà un po 'più di controllo, ad es. per diffondere le notifiche riducendo i carichi di picco sul servizio di notifica.

    
risposta data 12.06.2018 - 12:04
fonte
1

Non è necessario avere un cron job qui. Dovrei semplicemente inviare un UserStartedSurvey all'inizio di un sondaggio e un UserCompletedSurvey alla fine di un sondaggio da SurveyService a NotificationService. NotificationService quindi sa quando interrompere l'invio di inviti all'utente e può persino inviare notifiche per ricordare all'utente di completare un sondaggio se lo si desidera.

In questo modo SurveyService conosce l'interfaccia di NotificationService, che è valida. Non sa che cosa fa NotificationService con queste informazioni, né ha bisogno di sapere.

    
risposta data 12.06.2018 - 09:50
fonte

Leggi altre domande sui tag