在 .net core Worker Service(或控制台应用程序)中配置 Rebus

Amo*_*hid 5 configuration rebus microservices .net-core

我发现使用 Startup.cs 在 ASP.NET Core 执行管道中添加 rebus 非常简洁。我想知道是否有一种同样简洁的方法可以为 Worker 服务或一般的控制台应用程序执行相同的操作。

我见过的大多数 .net core 控制台应用程序都是非常简单的演示应用程序。如果有使用 .net core 控制台应用程序的具体示例配置,请提供。问候 阿穆尔·拉希德

moo*_*000 4

一种方法是添加 Microsoft 的 Microsoft.Extensions.Hosting 包并将后台服务构建为BackgroundService

public class MyBackgroundService : BackgroundService
{
    readonly IServiceCollection _services = new ServiceCollection();

    public MyBackgroundService()
    {
        // configure the bus
        
        services.AddRebus(
            configure => configure
                .Transport(t => t.Use(...))
        );
    }

    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        using var provider = _services.BuildServiceProvider();

        // start the bus
        provider.UseRebus();
        
        while (!stoppingToken.IsCancellationRequested)
        {
            await Task.Delay(TimeSpan.FromSeconds(1), stoppingToken);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以通过添加

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureServices((_, services) =>
        {
            services.AddHostedService<MyBackgroundService>();
        });
Run Code Online (Sandbox Code Playgroud)

在你的启动中。