Корреляция сообщений
Как правило сообщения не независимы и образуют некоторую последовательность. Простейшим вариантом такой последовательности
может быть пара сообщений "запрос-ответ".
Однако физически сообщения могут приходить в случайной последовательности и нельзя полагаться на то, что
при отправке запросов с номерами 1 и 2, полученные последовательно ответы 1 и 2 будут соответствовать запросам с такими же
порядковыми номерами.
Для того, чтобы можно было отвязаться от порядка физического движения сообщений через транспортные системы, в стандарте
используется набор узлов CorrelationId.model
, фактически состоящий из одного узла -
<correlationId>
.
Принцип использования этого узла следующий. Отправляя исходное сообщение, инициирующее какой-либо бизнес-процесс, отправитель
задаёт для него уникальный <correlationId>
. Далее, все сообщения, относящиеся к этому
бизнес-процессу также должны содержать тэг <correlationId>
с тем же значением, что
и инициирующее сообщение.
Так, например, если сообщение <nonpublicExecutionReport>
содержит узел
<correlationId> 123 </correlationId>
, то любое из последующих сообщений <nonpublicExecutionReportException>
,
<nonpublicExecutionReportAcknowledgement>
, <nonpublicExecutionReportRetracted>
должны также содержать элемент <correlationId> 123 </correlationId>
.