
.net core 3.1 服务承载【承载长时间运行服务】
目录
前言
当我们要在发布网站的同时,想在后端开启一个长时间运行的服务不断的去处理我们的一些业务时,这时我们便需要运用到服务承载了。
我们这里将用最常见的CPU使用率,内存使用量和网络吞吐量这3种典型的指标做示范。
创建控制台项目
添加相关依赖包
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Hosting" Version="3.1.11" />
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="3.1.11" />
</ItemGroup>
添加长时间运行服务相关内容
创建指标实例
public class PerformanceMetrics
{
private static readonly Random _random = new Random();
/// <summary>
/// CPU指标
/// </summary>
public int Processor { get; set; }
/// <summary>
/// 内存指标
/// </summary>
public long Memory { get; set; }
/// <summary>
/// 网络指标
/// </summary>
public long Network { get; set; }
public override string ToString() => $"CPU:{Processor * 100}%; Memory: {Memory * (1024 * 1024)}M/s";
/// <summary>
/// 创建 PerformanceMetrics 的实例
/// </summary>
/// <returns></returns>
public static PerformanceMetrics Create() => new PerformanceMetrics
{
// 随机生成指标
Processor = _random.Next(1, 8),
Memory = _random.Next(10, 100) * 1024 * 1024,
Network = _random.Next(10, 100) * 1024 * 1024
};
}
承载服务的实现
承载服务通过 IHostedService
接口表示,其接口定义的StartAsync
与StopAsync
方法分别代表启动服务与关闭服务。我们通过PerformanceMetricsCollector
实现IHostedService
的接口去采集性能指标。并通过一个Timer
调度器每隔5
秒去调用一个PerformanceMetrics
的实例从而获取指标数据。
public sealed class PerformanceMetricsCollector : IHostedService
{
private IDisposable _scheduler;
/// <summary>
/// 启动服务
/// </summary>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public Task StartAsync(CancellationToken cancellationToken)
{
// 需要调用的方法 需要传入的对象 多久后启动 间隔时长执行一次
_scheduler = new Timer(Callback,null,TimeSpan.FromSeconds(5),TimeSpan.FromSeconds(5));
return Task.CompletedTask;
}
private void Callback(object state)
{
Console.WriteLine($"[{DateTimeOffset.Now}]{PerformanceMetrics.Create()}");
}
/// <summary>
/// 关闭服务
/// </summary>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public Task StopAsync(CancellationToken cancellationToken)
{
_scheduler?.Dispose();
return Task.CompletedTask;
}
}
构建承载系统
在调用Build
方法之前,可以调用IHostBuilder
接口的ConfigureServices
方法将PerformanceMetricsCollector
注册为IHostedService
的服务,并将生命周期设置为AddSingleton
。
new HostBuilder()
.ConfigureServices(svcs => svcs
//.AddSingleton<IHostedService,PerformanceMetricsCollector>() 与下面一样的
.AddHostedService<PerformanceMetricsCollector>())
.Build()
.Run();
运行测试
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739
评价
排名
2
文章
657
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 :
好是好,这个对效率影响大不大哇,效率高不高
一个bug让程序员走上法庭 索赔金额达400亿日元
剑轩 : 有点可怕
ASP.NET Core 服务注册生命周期
剑轩 :
http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256


欢迎加群交流技术