gpt4 book ai didi

c# - Dotnet Core Windows 服务中的多个托管服务

转载 作者:行者123 更新时间:2023-12-03 13:03:08 25 4
gpt4 key购买 nike

我有一个基于此示例的 netcore 2.0 的 Windows 服务:
https://www.stevejgordon.co.uk/running-net-core-generic-host-applications-as-a-windows-service

在我的例子中,主要的托管服务订阅了一个消息队列并按顺序处理消息(每次出现新消息时队列 api 都会引发一个事件)。
如果任何消息无法处理,它们将被移至不同的队列以重试(x 次,具有指数回退)。所以这需要在一个单独的线程上完成,以免造成主队列处理的延迟

是否可以配置2个HostedServices:

var builder = new HostBuilder()
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<MyMsgProcessingService>();
services.AddHostedService<MyRetryService>();
});

这确实开始了,并且确实到达了 StartAsync每个服务的方法(在 IHostedService接口(interface)上)

或者您是否只允许拥有(最好拥有)一个 IHostedService执行?

如果两个都可以,慢服务的工作会不会拖住主服务的锅?

如果只有一个,最好只启动另一个线程来完成重试队列的工作吗?我如何确保新线程在服务运行的整个过程中都存在?一个 while循环似乎不合适,因为我只是在等待引发事件

例如
public Task StartAsync(CancellationToken cancellationToken)
{
Task t = Task.Run(() => ProcessRetrys(), cancellationToken);

最佳答案

Or are you only allowed to have (is a good idea to have) one IHostedService implementation?



您可以拥有任意数量的。只要您对这样一个事实感到满意,即如果流程出现故障,则其中的所有内容(所有服务)也都将出现故障。

第二件事要考虑的是线程池。线程池对于所有服务都是通用的,因此如果其中一个服务需要线程,其他服务可能会受到影响。

If two is OK, will the work on the slow service hold up the wok on the main service?



取决于一项服务是否等待另一项服务的数据。以及他们之间的沟通方式。如果它是同步的,那么最慢的线程将成为瓶颈。

And how would I ensure that the new thread lives for the whole time the service is running?



创建一个前台线程。 About . How to configure.但是你必须小心并在应用程序关闭时优雅地终止此类线程,在 StopAsync 中处理它方法调用。

a while loop seems inappropriate as I'm just waiting for an event to be raised



使用非阻塞队列在服务之间进行通信。我无法为您提供有关特定实现的链接,因为它们很多,但是您可以开始另一个问题来帮助您找到合适的问题。

关于c# - Dotnet Core Windows 服务中的多个托管服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57772788/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com