메일 알림 서비스를 개발하여 고객에게 주문 승인을 보내려고합니다. 주문 데이터는 비정규 화 된보기 (질의 측면)에 있으며 메일 템플릿에 채워야합니다. 그런 다음 메일 알림 서비스를 통해 html 문자열 형식으로 이메일을 전송합니다. 하지만 주문 상태는 '주문 승인 이메일 발송 됨'으로 변경해야합니다.CQRS의 비정규화된보기 메일 알림
또한 마이크로 서비스 아키텍처에서 CQRS, ES 및 DDD 개념을 구현하려고합니다. 이 절차가 정확하고 개념과 여전히 일치합니까?
- 명령 단계에서 명령 상태를 변경할 수 있도록 승인 메일을 보내려면 HTTP POST API를 개발하십시오.
- 명령 측에서 "처리 된 주문 승인 메일"이벤트를 생성합니다.
- 이벤트 프로세서가 이벤트를 처리합니다. 쿼리 측/비정규 화 된 뷰에서 주문 데이터를 가져와야합니다.
- 이벤트 프로세서는 데이터에서 승인 메일을 생성하고 데이터를 템플릿에 채 웁니다.
- 페이로드에 메일 본문 (html 형식)이있는 메일 알림 서비스에 대한 HTTP POST를 호출합니다.
- 이벤트 프로세서가 주문 서비스 (명령 측)로 HTTP PUT을 호출하여 주문 상태를 "주문 승인 메일 발송"으로 변경합니다.
그러나이 절차를 적용하면 사용자가 "메일을 보낸"응답을 실시간으로 가져올 수 없습니다. 메일이 성공적으로 전송되었음을 클라이언트/프런트 엔드 측에서 트리거하는 방법은 무엇입니까? 따라서 클라이언트 측에서는 API 호출을 새로 고치거나 다시 시도 할 필요가 없습니다.
감사합니다.
내가 얼마 전에이 주제에 대한 게시물을 작성했습니다
주문 승인 전자 메일은 사람의 개입을 통해 전송됩니까? 나는. 인간 사회자가 전자 메일을 보내는 UI에서 버튼을 누르십니까? 첫 번째 이벤트, 즉 '주문 승인 메일 처리'의 필요성을 알지 못합니다. –
예. 사람이 확인하고 승인 메일을 고객에게 보내기 위해 버튼을 클릭합니다. '주문 승인 메일 처리 '이벤트를 만들 필요가 없다면, 명령 측에서 주문 상태를 변경하고 구체화 된보기에서 전자 메일을 생성하기 위해 쿼리 측으로 이동하는 트리거는 무엇입니까? 메일이 성공적으로 전송 된 것으로 판단되는 이벤트는 무엇입니까? 이 문제를 해결할 더 좋은 방법이 있습니까? – Benedict
우려를 분리해야합니다. 도메인 관점에서'AnnounceCustomer'는'CustomerAnnounced' 이벤트를 내보내고 내부 상태와 뷰를 업데이트해야합니다.그런 다음 사가/청취자가 인프라를 기반으로 이메일을 보내거나 다른 제한된 컨텍스트를 전송합니다. 그런 다음 인프라 (메일 발신자)는 UI 또는 모든보기를 신호로 보낼 수있는 MailSent 및/또는 MailDelivered 이벤트를 방출해야합니다. 나는 컴퓨터에있을 때 답을 쓸 것이다. –