2016-06-28 3 views
0

Azureサービスファブリックのステートレスサービスが、一定期間後にActorプロキシでメソッドを呼び出そうとしているときに、エラーログでAzureサービスファブリックのステートレスサービスでMicrosoft.ServiceFabric.Actors.Runtime.DuplicateMessageExceptionが検出されました。俳優は走るのに時間がかかります。例外の完全なメッセージでした:Microsoft.ServiceFabric.Actors.Runtime.ActorConcurrencyLock回以上 同じ要求を得たAzureサービスファブリックのアクタのタイムアウトを増やす方法はありますか?

俳優。これは、 が、コンフィグレーションされたOperationTimeoutよりも処理時間が長くかかる要求の場合に発生する可能性があります。 クライアント側はTimeoutExceptionで再試行します。

この値を設定できる場所はどこにもありません。私はthe documentation for the FabricTransportSettings classの参照を参照していますが、そのタイプがどこで使用されているのかわかりません。

私たちのアクターメソッドは実行に時間がかかる(しばしば数分かかる)ので、このエラーが実際にタイムアウトに関連している場合、どのようにOperationTimeoutを増やしますか?

答えて

3

アクターを初期化し、必要なパラメーターでアクターを「シード」する方法でアクターの動作を変更することを検討します。その後、長時間の作業を実行するタイマーを起動します。次に、作業が完了し、結果を取得するまで、アクタに再度クエリを実行します。

は、我々はセットアップあなたは、アセンブリレベルでのタイムアウト値を設定することができ、このよう

+0

私はアーキテクチャの観点から良い提案だと思うと、私は間違いなくよやってみて。残念ながら、それは本当に質問に答えるわけではないので、私は答えとしてマークすることはできません。タイムアウトを増やすことは可能ですか?もしそうなら、どのように? – Paul

+0

私はFabricTransportSettingsへの変更のために、ワイヤの両端(リクエスタと受信側のリスナ)で変更を加えなければならないと言った何かを読んでいることを覚えています –

+0

私は最近遭遇しましたこの問題も同様です。私はタイムアウトを増やさず、代わりに俳優を解雇し、長時間実行されるタスクのタイマーを設定し、作業が完了したときの通知を受け取るために呼び出し元のサービスから購読可能なアクターベースのイベントを使用しました。アクターイベントの詳細については、https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reliable-actors-eventsをご覧ください。 –

2

を動作するように我々のシステムで役者を使って夫婦長時間実行されるワークロードを持っています。

using Microsoft.ServiceFabric.Services.Remoting.FabricTransport; 
[assembly: FabricTransportServiceRemotingProvider(MaxMessageSize = int.MaxValue,OperationTimeoutInSeconds =2000)] 
関連する問題