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ń?