나는 명령이 아무것도 반환해서는 안된다는 것을 이해합니다.
그것은 하나의 견해이지만, 완전히 돌로 설정되지는 않았습니다. HTTP에서 쓰기 (PUT, POST, DELETE)를 고려하십시오. 이러한 모든 메시지는 자원 변경 상태를 요청하는 메시지이므로 응답을 리턴한다는 의미에서 명령입니다.
그렇다면 커맨드 버스 이외의 오류를 어떻게 처리합니까? (예를 들어, 동일한 사용자 이름 / 이메일로 1 초 전에 등록한 사용자).
해당 명령이 실패한 것을 어떻게 알 수 있으며 오류를 어떻게 알 수 있습니까?
따라서 명령 핸들러와 직접 통신하는 경우 리턴 된 메시지는 명령이 수신되어 처리되었음을 인식하는 데 매우 합리적인 방법입니다.
버스와 같이 대상과 직접 통신하지 못하게하는 미들웨어를 사용하는 경우 비동기 메시징 패턴을 살펴 보는 것이 좋습니다. 명령 처리기가 메시지를 다시 보내도록하는 방법은 무엇입니까? 방문객?
한 가지 아이디어는 명령의 결과를 구독하는 것입니다. 이것은 Hohpe의 엔터프라이즈 통합 패턴 (Enterprise Integration Patterns)의 아이디어 중 일부에서 나온 것입니다. 기본 아이디어는 클라이언트가 전송 된 명령 메시지에 익숙하기 때문에 명령 메시지의 결과로 게시 된 새 메시지를 구독 할 수있는 위치에 있다는 것입니다. 명령 처리기는 데이터를 레코드에 저장 한 후 변경이 성공했음을 알리는 이벤트를 게시하고 클라이언트는 해당 이벤트를 구독합니다. 메시지에서 다양한 식별자의 일치 성을 고려하여 올바른 이벤트를 인식합니다. 상관 관계 ID 등).
대체 접근 방식이 조금 더 직접적입니다. 하나는 메시지가 성공적으로 처리 된 후 명령 핸들러에 의해 호출 될 수있는 콜백을 메시지에 포함시키는 것입니다.
매우 유사한 대안은 명령 핸들러가 승인을 작성할 수 있도록 명령 메시지에 공간을 확보하는 것입니다. 클라이언트에 이미 명령 메시지가 있으므로 회로는 이미 완료되었습니다. " 약속 "또는 " 완성 가능한 미래" 라고 생각하십시오 . 메시지는 명령 핸들러에게 승인을 작성할 위치를 알려줍니다. 그렇게하면 승인이 가능하다는 것을 클라이언트 (카운트 다운 래치)에 알립니다.
물론 올바른 일을하는 데 방해가되는 것 같은 미들웨어를 제거하는 추가 옵션이 있습니다.
예를 들어, 동일한 사용자 이름 / 이메일로 1 초 전에 등록 된 사용자
사용자 등록을 dem 등적으로 처리하는 경우 반드시 오류 일 필요는 없습니다. 응답이 관찰 될 때까지 메시지를 반복하는 것이 적어도 한 번 전달되도록하는 일반적인 방법입니다.