0

Azure関数を使用してデータベースにデータを書き込むときにデッドロックが発生する問題を解決するためにここに座っています。Azure関数を使用してAzure Sqlデータベースのテーブルにデータを書き込むとデッドロックが発生する

私は、ワークフローでやっていることは次のとおりです。

  • Servicebusキューから論理アプリケーションを介してデータ/コンテンツを取得します。
  • Azure関数にデータを送信します。
  • Azure SQLデータベースへのトランザクションを作成する前に、オブジェクトからインポートするすべての データを抽出し、挿入をエンキューすることによって、Azure関数のデータを処理します。

しかし、データベースへのトランザクションが別の挿入トランザクションと同じテーブルにデータを書き込んでいるときに、ロジックアプリケーションが「スレッドアップ」を開始/開始するため、デッドロックが発生します。

誰かがこのような問題に取り組むためにこれを解決する良い方法や、既知の技術を知っていますか?

+0

以下をお読みください:https://github.com/Azure/azure-webjobs-sdk-script/issues/774 –

+0

ストアドプロシージャを使用していますか?ちょっと挿入するだけですか? –

答えて

0

Azure関数でサービスバスメッセージを処理するためにLogic Appsは必要ありません。機能にはService Bus Triggerがあり、これを機能アプリで直接実行できます。

host.jsonファイルを変更すると、並列実行の量を制御できます。サービスバスの場合、パラメータはmaxConcurrentCallsです。これはデフォルトでは16ですが、1に設定することができます。

もちろん、アプリケーションインスタンス上のすべてのメッセージは、機能から期待できるスループットを制限します。順次処理されます。したがって、特定のユースケースのパラメータのバランスを取る必要があります。

+0

うーん、さて、物事は、私は上記のワークフローのさまざまなコネクタの間にいくつかのものをやっている。関数がロジックアプリケーションの一部であっても、maxConcurrentCallsを制御する方法はまだありますか? – John

関連する問題