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