2014-10-15 1 views
0

알림 시스템의 디자인 패턴을 찾고 있습니다. 알림은 전화, SMS 또는 이메일이 될 수 있으며 이는 1 명의 많은 사용자가 특정 시간에 발생합니다. 알림 프로세스는 내부 이벤트에 의해 트리거됩니다. 많은 수의 일정을 예약하기위한 디자인 패턴

After the event is triggered... 

Call - person A at 03:00:00 (attempt 1) 
Call - person B at 03:00:05 (attempt 1) 
Call - person C at 03:01:00 (attempt 1) 
Call - person A at 03:05:00 (attempt 2) 
Call - person B at 03:05:05 (attempt 2) 
Call - person C at 03:06:00 (attempt 2) 
... 
Person A answered on attempt 3. Cancel all pending notifications for the event. 

디자인 # 1.1

알림에 대한 정보를 포함하는 테이블 유무 : 같은 일반적인 시나리오가 보일 것이다. 이벤트가 트리거 된 후 각 사용자에 대한 첫 번째 시도에 대한 모든 알림이 미리 예약되어 테이블에 삽입됩니다. 서비스는 테이블을 계속 쿼리하여 현재 처리해야하는 알림을 가져옵니다. 알림을 처리해야 할 경우 테이블에서 삭제되고 다음 알림 시도가 테이블에 삽입됩니다. 이 서비스는 작업을 다른 서비스로 오프로드하여 알림을 수행합니다. 이벤트에 대한 보류중인 알림은 테이블에서 삭제하여 취소 할 수 있습니다.

장점 :

  • 표가 지속적으로 쿼리 :

    • 심플한 디자인
    • 서비스는

    단점 경량입니다. 그렇게하는 것이 가장 효율적인 방법 인 것 같지 않습니다.

주 :

  • 추가 제안 레무스 Rusanu

다른 디자인과 의견을 주시면 감사하겠습니다.

답변

0

모든 알림을 미리 예약하지 마십시오. 다음 통지 만 미리 예약하면됩니다. 알림을 처리하는 과정에서 다음 시도를 예약합니다. 이렇게하면 보류중인 알림을 삭제할 필요가 없으며 더 중요한 것은 처리 지연을 가능하게합니다. 10 분 동안 서비스가 중단되었다가 다시 시작하면 어떻게 될지 생각해보십시오. 무엇을합니까? 사람 A 시도 2 ​​ 사람 A가 모두 연체되었으므로 시도 3을 호출합니까?

표는 지속적으로 데이터베이스를 처리 할 수 ​​있도록 설계되어 무엇

를 쿼리됩니다. 쿼리가 효율적인지 확인해야합니다. Using Tables as Queues과 특별히 보류중인 큐에 관한 부분을 읽어 보시기 바랍니다. 상태와 이벤트를 혼합하지 말고 상태가 아닌 이벤트 만 큐를 유지하십시오.

+0

답장을 보내 주셔서 감사합니다. – user3811205