Дублирующиеся запросы на сервисную матрицу при удаленном взаимодействии - PullRequest
0 голосов
/ 28 июня 2018

У меня есть служба без сохранения состояния в Service Fabric (ASP.NET Core), которая будет вызывать субъекта, и субъект может внутренне также вызывать другие субъекты и / или службы с отслеживанием состояния в зависимости от сценариев.

У меня вопрос: нужно ли учитывать дубликаты запросов из-за удаленного взаимодействия системы?

В наших предыдущих реализациях Akka.Net был шанс, что Actor получит дубликаты запросов из-за перегрузки сети TCP / IP и т. Д., И мы обработали это, предоставив каждому сообщению уникальный идентификатор корреляции. Мы храним запрос и его результат в состоянии на актерах, и если тот же идентификатор корреляции возвращается снова, мы просто предполагаем, что это дубликат, и отправляем более ранний результат вместо повторной обработки запроса.

Я видел подобный подход, использованный в одном из примеров проектов Microsoft, но, похоже, больше не могу его найти (мертвая ссылка на Github).

Кто-нибудь знает, нужно ли это обрабатывать в службах Actor и Stateful?

1 Ответ

0 голосов
/ 28 июня 2018

Вы можете добавить настраиваемые заголовки в ваши удаленные вызовы, создав пользовательские реализации IServiceRemotingClientFactory и IServiceRemotingClient.

Добавление пользовательских заголовков внутри операций RequestResponseAsync и SendOneWay.

Другой пример Питера Бонс здесь .:

var header = requestRequestMessage.GetHeader();
var customHeaders = customHeadersProvider.Invoke() ?? new CustomHeaders();
header.AddHeader(CustomHeaders.CustomHeader, customHeaders.Serialize());

На принимающей стороне пользовательский заголовок можно получить из IServiceRemotingRequestMessageHeader в пользовательском ActorServiceRemotingDispatcher.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...