Типичным шаблоном является использование идентификатора корреляции, такого как GUID, для реализации семантики запроса / ответа поверх платформы обмена сообщениями.
К каждому запросу присоединен новый Guid, а на стороне сервера, созданный ответ, содержит guid для запроса.
Например, на клиенте, скажем, у нас есть экземпляр messageBus, с методом publish () для отправки данных на шину и методом OnNext () для асинхронного получения данных с шины, мы могли бы затем обернуть messageBus в и IObservable, и напишите следующее:
function DataItem GetReqResp(QueryItem q)
{
q.Guid = Guid.NewGuid();
messageBus.Publish(q);
return messageBus.Where(n => n.Guid == q.Guid).Take(1);
}