Используя Nirvana (или другое промежуточное ПО MOM), каков наилучший способ реализации RPC? - PullRequest
2 голосов
/ 27 мая 2011

Используя Nirvana (http://my -channels.com /) или другое промежуточное ПО, ориентированное на сообщения, каков наилучший способ с точки зрения задержки, масштабируемости и безопасности для реализации классического RPC (один запрос - один ответ)?

1 Ответ

0 голосов
/ 05 июня 2011

Типичным шаблоном является использование идентификатора корреляции, такого как 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);
}
...