[英]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.