簡體   English   中英

連續 Azure 具有 Http 觸發函數的 WebJob

[英]Continuous Azure WebJob with Http Triggered Functions

我目前有一個 azure webjob,每天執行從一個數據庫到另一個數據庫的同步,但我也想添加手動觸發同步的功能。 我在webjob項目中設置了如下功能:

public static void SyncData([TimerTrigger("0 0 5 * * *", RunOnStartup = false)] TimerInfo timerInfo) { }

[NoAutomaticTrigger]
public static Task SyncAll(TraceWriter log){ }
[NoAutomaticTrigger]
public static Task SyncBranches(TraceWriter log){ }
[NoAutomaticTrigger]
public static Task SyncCustomers(TraceWriter log){ }
[NoAutomaticTrigger]
public static Task SyncInventory(TraceWriter log){ }

我可以在 webjob 下的 Kudu 儀表板中看到這些功能,但不確定如何使用 MS 文檔( 此處)中列出的 http 請求觸發這些功能:

http://<yourapp>.azurewebsites.net/api/<funcname> 

當我向該端點發出請求時,我收到 404 響應 - 我需要做什么才能通過 http 請求手動觸發這些功能?

謝謝,瑞安

我們可以使用Kudu WebJob API來啟動或停止連續工作

POST https:// {user}:{password} @ {sitename} .scm.azurewebsites.net / api / continuouswebjobs / {job name} / start

我們可以從Azure WebApp publishSetting文件中獲取用戶和密碼信息。 我們可以從門戶網站下載該文件

在此輸入圖像描述

使用fiddler測試Rest API

在此輸入圖像描述

注意 :如何創建Azure功能請參考文檔

更新:

有沒有辦法可以在連續工作中觸發特定功能?

根據我的經驗,我找不到方法或Rest API來直接觸發連續作業中的特定功能。

我的工作是我們可以使用Webjob QueueTrigger。 根據隊列消息信息觸發sepcific功能。 我們可以使用QueueTrigger創建一個WebJob

以下是根據您的代碼的詳細步驟。

1.創建Azure存儲隊列以進行觸發

在此輸入圖像描述

2.創建一個Webjob項目並添加以下代碼

 public static void SyncData([QueueTrigger("backup")] string logMessage, TextWriter logger)
    {
        Console.WriteLine($"Start time:{DateTime.Now}");
        switch (logMessage.ToLower())
        {
            case "syncall":
                SyncAll(logger);
                break;
            case "syncbranches":
                SyncBranches(logger);
                break;
            case "synccustomers":
                SyncCustomers(logger);
                break;
            case "syncinventory":
                SyncInventory(logger);
                break;
            default:
                Console.WriteLine("Default case");
                break;
        }
        Console.Write($"Endtime:{DateTime.Now}");

    }
    [NoAutomaticTrigger]
    public static Task SyncAll(TextWriter log)
    {

        Console.WriteLine("SyncAll :"+DateTime.Now);
        return null;
        //await Task.Delay(10);
    }

    [NoAutomaticTrigger]
    public static Task SyncBranches(TextWriter log)
    {
        Console.WriteLine("SyncBranches :" + DateTime.Now);
        return null;
    }

    [NoAutomaticTrigger]
    public static Task SyncCustomers(TextWriter log)
    {
        Console.WriteLine("SyncCustomers :" + DateTime.Now);
        return null;
    }

    [NoAutomaticTrigger]
    public static Task SyncInventory(TextWriter log)
    {
        Console.WriteLine("SyncInventory :" + DateTime.Now);
        return null;
    }

3.使用Azure Storage Queue REST API創建隊列消息。

4.從控制台檢查結果。

在此輸入圖像描述

您正在查看Azure功能的文檔,但看起來您正在使用WebJobs(與Azure功能不同)。

我建議使用Azure功能,在這種情況下,您的場景變得更加直接。

當你有

SyncData([TimerTrigger("0 0 5 * * *", RunOnStartup = false)]

這是一項持續的工作,恕我直言,這不是最佳選擇,您可以將其更改為真正按計划運行(這意味着它在空閑時不會消耗資源),然后您可以簡單地從 UI 運行它手動運行的步驟 為此,您必須刪除計時器觸發器:

public static void SyncData() { }

在這種情況下,計划在 WebJob 項目根目錄中的 Settings.job 文本文件中提供,內容為:

{
  "schedule": "0 0 5 * * *",
  "is_singleton": true
}

還要調整一下 Program.cs:

//now it will start your functions manually
var host = builder.Build();
using (host)
{
  var functions = host.Services.GetService(typeof(Functions)) as Functions;
  //in my case it is Run method, but I guess you have there SyncData
  await functions.Run();
}
//when it was continious
//var host = builder.Build();
//using (host)
//{
//    await host.RunAsync(ct);
//    tokenSource.Dispose();
//}

您還需要將您的工作類型設置為觸發,重新發布並刪除舊的連續工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM