1

WebJobs 0.3 ベータ版にアップグレードした後、BLOB がストレージにポストされると、Azure WebJobs が (BlobTrigger を入力として) メソッドを複数回呼び出します。これは、コンソールでローカルにテストする場合と、Azure でテストする場合の両方で発生します。私の場合、BlobTrigger を取得してから、次のようにキューに投稿しています。

        public static void ProcessFactoryFileSubmission(
        [BlobTrigger(blobs.RESPONSE + "/{requestId}_{factoryId}_{filename}")] ICloudBlob blob,
        [Table(tables.PACKAGE)] CloudTable table,
        [Queue(queues.FACTORY_RESPONSE)] out FactoryPackageResponseMessage responseQueue)

キューは 2 つのメッセージを取得しており、webjobs azure ダッシュボードでは、関数が 2 回呼び出されていることを示しています。

どうしてこれなの?

4

2 に答える 2

3

この問題は 0.5.0-beta で修正されています。BlobTriggers は、新しい BLOB が検出されたとき、または既存の BLOB が更新されたときにのみ起動されます。詳細については、この投稿を参照してください http://azure.microsoft.com/blog/2014/09/06/announce-the-0-5-0-beta-preview-of-microsoft-azure-webjobs-sdk/

于 2014-09-18T16:47:52.237 に答える
2

これは既知の制限です。うまく機能しないトリガーと出力の組み合わせがいくつかあります。これが内部でどのように機能するか、およびこのケースが機能しない理由を説明しましょう。

ケース 1: BlobTrigger (入力) + Blob (出力): 出力 BLOB を探すことで、入力 BLOB が処理されたかどうかを簡単に知ることができます。出力 BLOB は存在し、新しい必要があります。

ケース 2: QueueTrigger (入力) + 任意の出力: キュー メッセージは処理後に削除されるため、入力が処理されたかどうかは簡単にわかります。

ケース 3: BlobTrigger (入力) + キュー (出力): キュー内のメッセージが存在する場合と存在しない場合があるため、入力 BLOB が処理されたかどうかを知るのは簡単ではありません。また、特定の関数によって処理されたかどうかを知るために、ブロブにメタデータを保存していません。

ケース 3 に当てはまります。これを回避するには、BLOB が処理されたら別のコンテナー/ディレクトリに移動して、再度選択されないようにします。

于 2014-07-15T03:36:17.500 に答える