Rozumiem, że polecenia nie powinny niczego zwracać.
To jeden widok, ale nie do końca osadzony w kamieniu. Rozważ zapisy (PUT, POST, DELETE) w HTTP - wszystkie te wiadomości są poleceniami, w tym sensie, że są to wiadomości z żądaniem zmiany stanu zasobów, a jednak wszystkie zwracają odpowiedzi.
Jak więc radzić sobie z błędem wykraczającym poza magistralę poleceń? (Na przykład użytkownik zarejestrował się 1 sekundę wcześniej z tą samą nazwą użytkownika / adresem e-mail).
Skąd wiesz, że to polecenie nie powiodło się i skąd znasz błąd?
Tak więc w przypadku, gdy komunikujesz się bezpośrednio z programem obsługi poleceń, zwrócony komunikat jest całkowicie rozsądnym sposobem potwierdzenia, że polecenie zostało odebrane i przetworzone.
Jeśli korzystasz z oprogramowania pośredniego, takiego jak magistrala, który uniemożliwia bezpośrednią komunikację z celem, sugerowałbym, abyś spojrzał na asynchroniczne wzorce przesyłania komunikatów - w jaki sposób można uzyskać od programu obsługi poleceń wysyłanie wiadomości z powrotem do gość?
Jednym z pomysłów jest podpisanie się pod wynikiem polecenia; zapożycza się od niektórych pomysłów zawartych w wzorcach integracji przedsiębiorstw Hohpe. Podstawową ideą jest to, że ponieważ klient zna wysłaną wiadomość polecenia, jest w stanie odpowiednio zasubskrybować wszelkie nowe wiadomości publikowane w wyniku komunikatu polecenia. Program obsługi poleceń, po zapisaniu danych w księdze rekordów, publikuje zdarzenia informujące, że zmiana się powiodła, a klient subskrybuje te zdarzenia - rozpoznając prawidłowe zdarzenia, biorąc pod uwagę zbieżność różnych identyfikatorów w komunikacie (identyfikator związku przyczynowego, identyfikator korelacji itd.).
Alternatywne podejścia są nieco bardziej bezpośrednie. Jednym z nich byłoby dołączenie do komunikatu wywołania zwrotnego, które może zostać wywołane przez moduł obsługi poleceń po pomyślnym przetworzeniu komunikatu.
Bardzo podobną alternatywą jest zarezerwowanie miejsca w komunikacie polecenia dla programu obsługi poleceń do napisania potwierdzenia - ponieważ klient ma już ten komunikat polecenia, obwód jest już ukończony. Pomyśl „ obietnica ” lub „ pełna przyszłość”. Komunikat informuje program obsługi poleceń, gdzie należy zapisać potwierdzenie; robienie tego sygnalizuje klientowi (zatrzask odliczający), że potwierdzenie jest dostępne.
I oczywiście masz dodatkową opcję usuwania oprogramowania pośredniego, które wydaje się przeszkadzać w wykonywaniu właściwych czynności po prostu.
Na przykład użytkownik zarejestrował się 1 sekundę wcześniej z tą samą nazwą użytkownika / adresem e-mail
Jeśli postępujesz z rejestracją użytkownika idempotentnie, niekoniecznie byłby to błąd - powtarzanie wiadomości do momentu zaobserwowania odpowiedzi jest powszechnym sposobem na zapewnienie przynajmniej raz dostawy.