iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 11
2

在這篇文章,我們將做一個簡單的實作,輸出與我興趣相符的會員的簡介到Queue裡面,等待郵件服務排成來發送(郵件服務將在下一篇進行介紹)

實作DEMO:從Functions建立Queue

1. 點選[整合],點選新的輸出

2. 選擇[Azure佇列儲存體]

3. 設定與程式碼Binding的參數名稱,佇列名稱,以及儲存體位置,

點選儲存後會幫我們建立這個Queue喔

4. 接下來進到我們的重頭戲,程式碼撰寫

方才我們已經Bind好Queue輸出的位置(outputQueueItem)

run.csx裡,加上outputQueueItem的輸出參數

IAsyncCollector<Member> outputQueueItem

run.csx裡,這行程式碼將資料到Queue裡面

await outputQueueItem.AddAsync(m);

可以看到function.json的binding值(剛才設定輸出時,設定完成後自動加入)

    {
      "type": "queue",
      "name": "outputQueueItem",
      "queueName": "memberhobby",
      "connection": "AzureWebJobsStorage",
      "direction": "out"
    }

完整程式碼檔案:run.csx

using System;
using System.Net;
using System.Collections.Generic;

public class Member{
    public string name { get; set; }
    public string hobby { get; set; }

    public Member(string n, string h){
        name = n;
        hobby = h;
    }
}


//這裡我們多加了一個參數,IAsyncCollector<Member> outputQueueItem
public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log, IAsyncCollector<Member> outputQueueItem)
{
    log.Info("C# HTTP trigger 開始比對興趣");

    string name = "";
    string hobby = "";

    // Get request body
    dynamic data = await req.Content.ReadAsAsync<object>();

    name = data?.name;
    hobby = data?.hobby;

    List<string> hobby_list = hobby.Split(',').ToList();

    List<string> matched_hobbies = new List<string> { "棒球", "游泳", "旅遊" };

    List<string> matched_list = hobby_list.Intersect(matched_hobbies).ToList();

    //找到相符的興趣
    string matched_hobby = String.Join(", ", matched_list.ToArray());
    log.Info(matched_hobby);

    if(matched_list.Count != 0){
        Member m = new Member(name,hobby);
        //這裡我們送了Member格式的資料到Queue裡面
        await outputQueueItem.AddAsync(m);
    }

    return req.CreateResponse(HttpStatusCode.OK, "新會員" + name + "她的興趣是" + hobby + ", 相符的興趣是"+matched_hobby);
    
}

針對Output格式進行詳細說明

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log, IAsyncCollector<Member> outputQueueItem)

最右邊的參數[IAsyncCollector outputQueueItem],是我們用來Bind Queue的輸出

事實上輸出可以有很多類型,例如可以有以下寫法

  • out ANYOBJECT outputQueueItem
  • out string outputQueueItem
  • out byte[] outputQueueItem
  • out Member(自定義class等等)
  • IAsyncCollector outputQueueItem

但因為我們此次使用非同步程式碼(async),則不允許使用 out 參數,因此我們需使用 IAsyncCollector

  1. 執行完成後,我們將前往Queue查看檢查是否成功把資料丟到Queue

點選你方才儲存的儲存體帳戶

稍微往下拉選擇佇列

很好,看到我們剛才建立的Queue有在,接下來緊張時刻的到了,我們到底有沒有成功發送資料到Queue裡呢!!!

看到資料進來了!

今天關於Functions和Azure Queue Storage的整合就分享到這裡

明天我們就要來發送信件給自己囉!

快速連結:(實作)打造工程師交友小工具-串接第三方寄信API(上篇)


參考


上一篇
[DAY10] Azure Queue Storage介紹
下一篇
[DAY12] (實作)打造工程師交友小工具-串接第三方寄信API(上篇)
系列文
30天手把手帶你趣學Azure☁️-初學者也能動手實作🙌🏻30

尚未有邦友留言

立即登入留言