Dwa wzorce integracji w przedsiębiorstwie to komunikat polecenia i komunikat zdarzenia . Pracuję nad systemem, w którym używamy przesyłania komunikatów nie tylko do integracji z innymi systemami, ale także do wewnętrznej komunikacji między usługami. Ma to być ostatecznie spójny system, a usługi powinny się wzajemnie ignorować (z wyjątkiem kilku usług specjalnego przeznaczenia). Dlatego staramy się unikać rzeczy, które wyglądają jak zdalne wywołania procedur (RPC lub RPI). Posiadamy system oprogramowania pośredniego zorientowanego na magistralę i komunikaty, a wszystkie wiadomości są nadawane.
Zwykle nazywamy nasze wiadomości jako zdarzenia, to znaczy jako wyrażenie z przeszłości idealne, np PurchaseOrderShipped
. Jednak wydarzenia są często dodawane tylko wtedy, gdy niektóre inne usługi muszą o nich wiedzieć, a na początku często dba się tylko o jedną usługę. Co więcej, czasami usługa ta emituje w rezultacie zdarzenie, które jest nasłuchiwane przez pierwszą usługę. Tak więc, gdybym miał diagramować interakcję, wyglądałby bardziej jak schemat komunikatu polecenia w powyższym linku (lub nawet diagram RPC) niż ten dla komunikatu zdarzenia, chociaż ponownie nie jest to faktycznie realizowane bezpośrednie wiadomości, ale nadawane w autobusie. Dodaj do tego fakt, że ostatnio widziałem dodawanie niektórych wiadomości, które są nazwane jako polecenia, czyli fraza w trybie rozkazującym, np BillShippedPurchaseOrder
.
Dziwne jest to, że nazwy komunikatów i sposób ich przesyłania nie zmieniają się w zależności od tego, czy są one nazywane zdarzeniem, czy poleceniem. Jak więc ustalić, czy coś powinno być komunikatem polecenia czy wydarzeniem? Czy to tylko różnica semantyki i nazewnictwa, czy też istnieje rzeczywista różnica w implementacji między komunikatami poleceń i zdarzeniami? Biorąc pod uwagę, że wszystkie nasze wiadomości są nadawane, czy to znaczy, że żaden z nich nie jest tak naprawdę poleceniem?
request for information
funkcjonalności? Naturalne wydaje się użycie czegoś takiego,getUserInfo(uid)
co jest poleceniem oczekującym odpowiedzi. Wiem, że komunikaty poleceń wprowadzają sprzężenie, ale niestety w tym przypadku nie widzę, jak zaimplementować je z komunikatami zdarzeń. Czy w takich sytuacjach dobrze jest trzymać się poleceń?CancelPolicyRequest
komunikatu, który jest poleceniem. Drugie podejście wykorzystuje dwa komunikaty o zdarzeniach, a mianowicieInvoicePastDueNotification
iPolicyCancelledNotification
. Zastanawiam się więc, czy można zmieniać polecenia, takie jakgetUserInfo(uid)
styl komunikatów o zdarzeniach, i jak mam to zrobić.Action
skojarzone z poleceniem. Istnieją dwa kroki związane z poleceniem. 1) Czy polecenie jest potrzebne (np. Wygasła polityka), i 2) wykonaj polecenie (np. Anuluj politykę). JeśliActor
to określa, czy polecenie jest potrzebne ORAZ może zostać wykonane,Actor
może wysyłać komunikaty o zdarzeniach. W przeciwnym razie do wysłania zdarzenia polecenia wymagane jest cokolwiek, co określi, że polecenie jest potrzebne.Wiadomość o zdarzeniu to coś, co właśnie się wydarzyło. Powiadamiasz o zdarzeniu, które właśnie się wydarzyło.
Komunikat polecenia to komunikat, który oczekuje, że coś zostanie zrobione. Może lub nie może oczekiwać odpowiedzi.
Kiedy używać tego, co sprowadza się do sprzężenia, a różnica pojawi się z czasem w miarę ewolucji systemów. Preferowanie zdarzeń nad poleceniami powoduje mniej sprzężenia. Emitent imprezy nie dba o konsumenta. We wzorcu poleceń osoba dzwoniąca wie i dlatego jest zależna od istnienia dostawcy.
Bill Poole sugeruje unikanie komunikatów poleceń razem: http://bill-poole.blogspot.com.au/2008/04/avoid-command-messages.html
http://bill-poole.blogspot.com.au/
źródło