問題タブ [azure-webjobssdk]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
azure - Azure WebJobs はオンデマンドでキューをポーリングできますか?
ユーザーがファイルをブロブ ストレージにアップロードしたときにトリガーされる WebJob があります。これは、アップロードが完了すると作成されるキュー ストレージ メッセージによってトリガーされます。
ファイルの目的に応じて、メッセージを他のキューに投稿して、処理ジョブをトリガーします。
これらのジョブの一部は時間が重要であり、比較的短時間で実行されます。あるケースでは、処理に約 3 秒かかり、ユーザーは結果を待っています。
ただし、キューの最小ポーリング間隔は 2 秒であるため、2 つの WebJob が呼び出されるまでユーザーが待機する必要がある時間は、通常、待機時間の 2 倍になります。
最初のハンドラーがキュー メッセージを送信すると、対応する処理ハンドラーがすぐにトリガーされることを期待して、2 つの Web ジョブを 1 つに結合しようとしましたが、実際には、メッセージを取得する前に一貫して 2 秒間待機します。
私の質問は、待機中のメッセージがあることがわかっている場合に、同じ Web ジョブ内からすぐにキュー トリガーをチェックするように Web ジョブに指示する方法はありますか? または、WebJob 内からキューに投稿した場合にキュー トリガーをすぐにチェックするように構成することをお勧めします。
または、サービス バス キューに切り替えると、新しいメッセージに対する応答性が向上しますか?
アップデート
Blob トリガーの使用に関するドキュメントでは、次のように述べています。
Blob 属性を使用して作成した BLOB には例外があります。WebJobs SDK が新しい BLOB を作成すると、一致する BlobTrigger 関数に新しい BLOB をすぐに渡します。したがって、blob の入力と出力のチェーンがある場合、SDK はそれらを効率的に処理できます。ただし、他の方法で作成または更新された BLOB に対して BLOB 処理関数を実行する際の待機時間を短くしたい場合は、BlobTrigger ではなく QueueTrigger を使用することをお勧めします。
ただし、キューに似たものについては言及されていません。つまり、このシナリオで非常に短い待ち時間が必要な場合は、キューよりもブロブの方が適していますが、これは間違っているようです。
更新 2
最終的に、オーケストレーション コードを最初の WebJob からアプリケーションのサービス レイヤーに引き出し、WebJob を削除することで、この問題を回避することになりました。これは、ファイルのアップロード後に WebJob の処理のみをトリガーする必要があることを意味します。
c# - この競合状態に陥らないようにするにはどうすればよいですか?
現在のプロセスは次のように実行されています。
1.) ユーザーが分析のためにフロントエンド アプリに URL を入力します。
2.) フロントエンドは URL を検証し、URL の属性を含むテーブルに URL のレコードを作成します。
3.) フロント エンドは、URL が処理のどの段階にあるかを追跡するテーブルの行を作成/更新します (各 URL には独自の内部 ID があります)。
3.A) ステータス コードが「queued」ステータスに更新される
---- テーブル定義:
4.) フロント エンドは、送信された URL の内部 ID を含むメッセージを Azure ストレージ キューに送信します。
最初のメッセージがキューに送信された後 ------------>
4.A) ユーザーがクリックする (データを「更新」する) ためのオブジェクトが UI に作成されます。
4.B) 作成されたオブジェクトをユーザーがクリックする (これが発生する可能性が高い) (検証された場合は即座に)
4.C) URL の ID を含む別のメッセージがキューに送信されます。
<--------------------------------
5.) 実行中の Azure Web ジョブ (バックグラウンド タスク) がこれらのメッセージを継続的に取得し、処理を開始します。
6.) Web ジョブは、この URL を処理する準備ができているかどうかを判断します
..... 次の場合、処理を開始する準備ができています
- 新規です (LastUpdated フィールドが null です)
- アイテムに付けられたステータス コードはエラーを表します
- LastUpdated から 15 分が経過しました
..... 次の場合に終了します
- メッセージ内の ID が無効です
- 添付されたステータス コードは、現在処理中であることを示しています。
- LastUpdated から 15 分未満が経過しています
続行しても問題ないと判断されたら...
- 新しい場合、Web ジョブは LastUpdated を Datetime.Now に更新します。
- プロセスの各ステップの開始時に、これを反映するためにステータス コードが更新されます。
プロセスの最後に、LastUpdated が現在の時刻に更新されます。
トライキャッチがプロセスを囲んでいます
a.) プロセスがエラーになった場合、それを反映するようにステータス コードが更新されます。
b.) 新しいメッセージが再試行のためにキューにプッシュされます
URL を解析する準備ができているかどうかを判断する関数:
キュー メッセージは、次の関数を介して入力されます。
...ここでの問題は、この継続的に実行されている webjob が一度に複数のメッセージを取得できることです (そして、これを、同じキューから読み取るさらにいくつかの webjobs にスケールアウトしたいと考えています)
関数 IsReadyToParse() が実際に現在の処理状態を反映していることを確認するにはどうすればよいですか?
データベースがステータス コードを「処理中」に更新しようとしているときに、別のスレッドがステータス コードを読み取って、プロセスを続行することを許可した場合はどうなるでしょうか。
c# - WebJob ServiceBus トピックのアクセス許可
私は多層プロジェクトに携わっています。その一部は、サードパーティ システムからの「イベント」のストリームを消費しています。ベンダーは Azure Service Bus トピックを介してこれらを公開しています - バスを提供、制御、および管理します。URI、TopicName、およびサブスクリプションの詳細が提供されるだけです。
ServiceBusTrigger
私たちのアプローチは、SDK で提供されている を使用して新しいメッセージのリッスンを処理し、システムへの処理をトリガーする Web ジョブをまとめることでした。ただし、ジョブがトピックからの読み取りに継続的に失敗するため、障害にぶつかったようです。ジョブはあいまいで失敗しますTimeout Exception
:
しかし、さらに下のトレースには次のものが含まれます。
ベンダーはその後、サブスクリプションがトピックに対して持っている唯一の許可/主張が以下のものであることを確認しました。Listen
の許可要件を確認できる人はいServiceBusTrigger
ますか?
そして+1として、何らかの理由でより多くが必要であるListen
(つまり、必要があるManage
)という前提で、誰かが別のアプローチを提案したいと思いますか? WebJob インフラストラクチャを失うのは残念です (プロジェクトには既に 3 つのジョブがあります)。特に、トピックからのメッセージの非同期処理や同時処理などの機能が失われています。
azure - はいの場合、Azure Webjob は非同期実行をサポートしていますか?
Azure Webjob
メソッドを実行したいのですが、サポートされているのasync
だろうかAzure Webjob
Async Execution or not
誰でもこれで私を助けることができますか?webjob
メソッドProcessSub1Messages
をProcessSub2Messages
非同期に実行します。
azure-webjobs - azure sdk (azure webjobs を使用) を使用して azure キューの可視性 (時間) オプションを設定するにはどうすればよいですか?
私の Azure Web ジョブ (コンソール アプリ) の機能は正しく機能しており、キューからメッセージを取得していますが、「時間表示」オプションを制御する方法、または取得されたメッセージをキューから削除する機能が必要です。 .
関数:
プログラムでキューにアクセスするとき、それはあなたが渡すパラメーターであることは知っています。しかし、私はその方法でキューにアクセスしていません。Webjobs アプリケーションで azure SDK を使用してこれを行う正しい方法は何ですか?
編集:
可視性オプションは、ジョブがキューからメッセージを取得してから、メッセージがキューに再び表示されるまでの時間です (プロセスがまだ終了しておらず、失敗したと見なされるため)。私の場合、デフォルトの 30 秒では、プロセスが最後まで実行されるのに十分な時間ではありません。
参照 (セクション: 方法: メッセージをデキューするための追加オプションを活用する): http://azure.microsoft.com/en-us/documentation/articles/storage-dotnet-how-to-use-queues/
azure - Azure Web ジョブ関数にエラーがありました
Azure Web ジョブがあり、キューからメッセージを受け取るとエラーが発生します
「関数にエラーがありました。詳細については、Azure WebJobs SDK ダッシュボードを参照してください」.
ダッシュボードにはエラーは表示されません。接続文字列が設定されていないと主張するだけです。そうしないと、メッセージを取得できません。
ローカルでデバッグする場合、実際のエラーを確認するにはどうすればよいですか?
visual-studio-2012 - Visual Studio 2012 用に Windows Azure webjobs SDK を構成する
.Net Framework 4 を使用して Visual Studio 2012 で開発された既存のアプリケーションがあります。また、私のプロジェクトはクラウド Azure でホストされています。そこに Windows Azure WebJob プロジェクトを追加したいのですが、これを構成するための拡張機能が見つかりません。
以下の拡張機能を見つけましたが、2012年には機能しません https://visualstudiogallery.msdn.microsoft.com/f4824551-2660-4afa-aba1-1fcc1673c3d0
2012 用に構成する方法はありますか。Windows Azure 2.2 SDK がインストールされています。