Два корпоративных шаблона интеграции - это командное сообщение и сообщение о событии . Я работаю над системой, в которой мы используем обмен сообщениями не только для интеграции с другими системами, но и для внутренней связи между службами. Предполагается, что это в конечном итоге согласованная система, а службы должны быть невежественными друг в друге (за исключением пары специализированных служб). Поэтому мы стараемся избегать вещей, которые напоминают удаленные вызовы процедур (RPC или RPI). У нас есть система промежуточного программного обеспечения, ориентированная на шины и сообщения, и все сообщения передаются в эфир.
Мы склонны называть наши сообщения как события, то есть как фразу в прошлом совершенном, например PurchaseOrderShipped
. Однако события часто добавляются только тогда, когда о них должны знать некоторые другие службы, и в начале часто заботится только одна служба. Более того, иногда этот сервис в результате генерирует событие, которое прослушивается первым сервисом. Таким образом, если бы я планировал взаимодействие, он выглядел бы гораздо больше как диаграмма для командного сообщения по ссылке выше (или даже диаграмма RPC), чем диаграмма для сообщения о событии, хотя, опять же, это на самом деле не реализовано с прямой обмен сообщениями, но трансляция на автобусе. Добавьте к этому тот факт, что я недавно видел добавление некоторых сообщений, которые называются командами, то есть фраза в императиве, например BillShippedPurchaseOrder
.
Странно то, что имена сообщений и способ их передачи не изменяются в зависимости от того, названо ли оно как событие или как команда. Так как же определить, должно ли что-то быть командным сообщением или событием? Является ли это просто различием семантики и именования, или есть фактическая разница реализации между командами и сообщениями о событиях? Учитывая, что все наши сообщения передаются, означает ли это, что ни одно из них не является действительно командным сообщением?
request for information
функции? Кажется естественным использовать нечто вродеgetUserInfo(uid)
командного сообщения, ожидающего ответа. Я знаю, что командные сообщения вводят связь, но, к сожалению, в этом случае я не вижу, как реализовать это с сообщениями о событиях. Или это просто хорошо придерживаться командных сообщений в некоторых случаях, как это?