質問編集履歴

1 補足追加

HelloWorld2

HelloWorld2 score 24

2018/12/27 16:28  投稿

AzureのQueue Storageをトリガーとして、Functionsを実行し、1つ1つ処理をしたい
# 機能構成・概要
- Functions①:httpトリガー。webページを表示した際に実行される。受け取ったメッセージをQueue Storageに格納する。
- Queue Storage:Functions①からのメッセージを一時的に格納。
- Functions②:Azure Queue Storageトリガー。Queueにメッセージが格納されたときに実行される。Queueから取り出したメッセージを加工し、Blob Storage内のファイルに`追記`する。
- Blob Storage:ファイルの配置場所。ファイルは現状1つで、Functions②により追記される。
# 処理概要
1. Webページ表示
2. Functions①実行(Functions①のURL実行)
3. メッセージをQueue Storageに格納
4. 3をトリガーとして、Functions②を実行
5. メッセージを加工して、Blob Storage内のファイルに`追記`
# やりたいこと
- ほぼ同時にQueue Storageに入ったデータを過不足なく、Blob Storage内のファイルに追記したい。
(Functions②が実行中に別のFunctions②を実行しないか、
Queue Storage内のメッセージをすべて、1つのFunctions②でBlob Storage内のファイルに格納するか。)
# 課題・問題点
- 現状、Queue Storageに同時に10個メッセージが入った場合、Functions②が10個同時に実行され、処理がバッティングしてしまう。
- したがって、Blob Storageのファイルには、10個分のメッセージは追記されず、1個分とか2個分のみ追記されてしまう。
# エラー内容
```
The specified block list is invalid.
```
# コード
``` C#
/*Functions②*/
#r "Newtonsoft.Json"
using System;
using Newtonsoft.Json;
using System.Threading;
public static void Run(
   string queue01,
   string Blob01In,
   out string Blob01Out,
   ILogger log)
{
   //JSONデータからC#オブジェクト作成
   dynamic jsonData = JsonConvert.DeserializeObject(queue01);
   //C#オブジェクト⇒CSVデータ
   string csvData = jsonData.clm1 + "," + jsonData.clm2;
   
   //Blobの内容にQueueの内容を追記
   Blob01Out = Blob01In + csvData + System.Environment.NewLine;
   Thread.Sleep(5000);
   log.LogInformation("処理終了");
}
```
(Sleepは、処理がバッティングしていることをわかりやすくしているために使用しています。ログ出力も同様)
```json
/*Function.json*/
{
 "bindings": [
   {
     "name": "queue01",
     "type": "queueTrigger",
     "direction": "in",
     "queueName": "queue01",
     "connection": "AzureWebJobsStorage"
   },
   {
     "type": "blob",
     "name": "Blob01Out",
     "path": "test01/test.csv",
     "connection": "AzureWebJobsStorage",
     "direction": "out"
   },
   {
     "type": "blob",
     "name": "Blob01In",
     "path": "test01/test.csv",
     "connection": "AzureWebJobsStorage",
     "direction": "in"
   }
 ]
}
```
Azure機能にあまり詳しくないため、不備等ございましたら、
補足致しますので、お力添えをお願いいたします。
補足致しますので、お力添えをお願いいたします。
# 補足(20181227)
それっぽい情報は見つかりましたが、記事通り、host.jsonに追記しても、何も変化はありません・・・
https://4423lab.wpblog.jp/archives/548
  • インターフェース

    58 questions

    インターフェイスという用語はハードウェア・ソフトウェアの両方に使うことができます。 一般的に、インターフェイスは内部処理の詳細を見せないように設定されます。オブジェクト指向プログラミングにおいて、インターフェイスはabstractクラスとして定義されます。

  • Azure

    448 questions

    Azureは、マイクロソフトのクラウド プラットフォームで、旧称は Windows Azureです。PaaSとIaaSを組み合わせることで、 コンピューティング・ストレージ・データ・ネットワーキング・アプリケーションなど多くの機能を持ちます。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る