Как увеличить время ожидания для актера Azure Service Fabric?
В наших журналах ошибок я обнаружил, что наша служба без сохранения состояния Azure Service Fabric обнаружила Microsoft.ServiceFabric.Actors.Runtime.DuplicateMessageException
при попытке вызвать метод на прокси Actor после определенного периода времени. Актер может занять некоторое время, чтобы бежать. Полное сообщение об исключении было:
Актер Microsoft.ServiceFabric.Actors.Runtime.ActorConcurrencyLock получал один и тот же запрос более одного раза. Это может произойти для запроса, который занимает больше времени обработки, чем настроенный OperationTimeout на стороне клиента, поскольку клиент повторяет попытку на TimeoutException.
Я нигде не вижу, чтобы я мог настроить это значение. Я вижу ссылку на это в документации для FabricTransportSettings
класс, но я не могу сказать, где этот тип используется.
Поскольку ожидается, что наш метод актера займет некоторое время (часто минуты), если эта ошибка действительно связана с тайм-аутом, как я могу увеличить OperationTimeout?
3 ответа
Я хотел бы рассмотреть вопрос о том, как изменить действующего субъекта, чтобы вы инициализировали и "затравили" действующего субъекта необходимыми параметрами. Затем запустите таймер для выполнения длительной работы. Затем повторно запросите актера, пока работа не будет завершена, и получите результат.
У нас есть пара длительных рабочих нагрузок с использованием действующих лиц в нашей системе, которые мы настроили для работы таким образом
Вы можете установить значение времени ожидания на уровне сборки.
using Microsoft.ServiceFabric.Services.Remoting.FabricTransport;
[assembly: FabricTransportServiceRemotingProvider(MaxMessageSize = int.MaxValue,OperationTimeoutInSeconds =2000)]
Может быть, вам стоит добавить следующий раздел в файл Settings.xml:
<Section Name="TransportSettings">
<Parameter Name="MaxMessageSize" Value="1073741824" />
<Parameter Name="OperationTimeoutInSeconds" Value="6000" />
</Section>