Два схеми інтеграції підприємства - це командне повідомлення та повідомлення про подію . Я працюю над системою, в якій ми використовуємо обмін повідомленнями не тільки для інтеграції з іншими системами, але і для внутрішнього спілкування між службами. Це повинна бути врешті-решт послідовна система, і служби повинні не знати один одного (за винятком декількох служб спеціального призначення). Таким чином, ми намагаємось уникати речей, які мають вигляд віддалених процедурних дзвінків (RPC або RPI). У нас є система проміжного програмного забезпечення, орієнтована на шину та повідомлення, і всі повідомлення транслюються.
Ми схильні називати наші повідомлення як події, тобто як фразу в минулому досконалому, наприклад PurchaseOrderShipped
. Однак події часто додаються лише тоді, коли деякі інші сервіси повинні знати про них, і на початку часто стосується лише однієї послуги. Більше того, іноді ця послуга в результаті випробовує подію, яку слухає перша служба. Таким чином, якби я планував взаємодію, це було б набагато більше схоже на діаграму командного повідомлення у посиланні вище (або навіть на схему RPC), ніж на повідомлення про подію, хоча, ще раз, це насправді не реалізовано з прямі повідомлення, але транслюються в автобусі. Додайте до цього той факт, що я нещодавно бачив, як додаються деякі повідомлення, названі як команди, тобто фраза в імперативі, наприклад BillShippedPurchaseOrder
.
Дивна річ у тому, що назви повідомлень та спосіб їх перебігу не змінюються незалежно від того, називаються вони як подія чи як команда. Тож як можна визначити, чи повинно щось бути командним повідомленням чи подією? Це лише різниця семантики та імен, чи є фактична різниця в реалізації між повідомленнями команд та подій? Зважаючи на те, що всі наші повідомлення транслюються, чи означає це, що жодне з них є справді командними повідомленнями?
request for information
функціональні можливості? Здається, природно використовувати щось на зразок,getUserInfo(uid)
яке є командним повідомленням, яке очікує відповіді. Я знаю, що командні повідомлення вводять з'єднання, але, на жаль, у цьому випадку я не бачу, як це реалізувати з повідомленнями про події. Або просто добре дотримуватися командних повідомлень у таких випадках, як це?