[英]Monitoring Azure Service Bus Queue Depth from ASP.NET Core 2.0 Console App
[英]Asp.net Core 2.2 read from Azure Service Bus Topic
美好的一天,我正在編寫一個需要從 Azure 服務總線主題讀取數據的應用程序。 注冊函數看起來像這樣(見下文)。 我想在 Asp.net Core 應用程序啟動時運行一次。
既然 IStartupFilter 似乎不支持異步函數,那么調用這個函數的好方法是什么?
任何幫助將不勝感激
async Task RegisterForMessages()
{
subscriptionClient = new SubscriptionClient(constring, TopicName, SubscriptionName);
// Register subscription message handler and receive messages in a loop
RegisterOnMessageHandlerAndReceiveMessages();
await subscriptionClient.CloseAsync();
}
您是否嘗試過創建用於注冊異步函數的接口基本方法,如下所示:
public interface IStartupAction
{
Task ExecuteAsync(CancellationToken cancellationToken = default);
}
以及向DI容器注冊啟動任務的方法:
public static class ServiceCollectionExtensions
{
public static IServiceCollection AddStartupTask<T>(this IServiceCollection services)
where T : class, IStartupTask
=> services.AddTransient<IStartupAction, T>();
}
最后,我們添加一個擴展方法, IStartupAction
在應用程序啟動時查找所有已注冊的IStartupAction
,並按順序運行它們,然后啟動IWebHost
:
public static class StartupTaskWebHostExtensions
{
public static async Task RunWithTasksAsync(this IWebHost webHost, CancellationToken cancellationToken = default)
{
// Load all tasks from DI
var startupTasks = webHost.Services.GetServices<IStartupAction>();
// Execute all the tasks
foreach (var startupTask in startupTasks)
{
await startupTask.ExecuteAsync(cancellationToken);
}
// Start the tasks as normal
await webHost.RunAsync(cancellationToken);
}
}
有關詳細步驟,您可以參考此文檔。
希望能幫助到你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.