首页
视频
资源
登录
原
.net core 3.1 服务承载【承载长时间运行服务】
4638
人阅读
2021/2/1 21:28
总访问:
2588671
评论:
0
收藏:
0
手机
分类:
.net后台框架
![.netcore](https://img.tnblog.net/arcimg/hb/c857299a86d84ee7b26d181a31e58234.jpg ".netcore") >#.net core 3.1 服务承载【承载长时间运行服务】 [TOC] 目录 ------------ tn>https://www.tnblog.net/hb/article/details/5591 前言 ------------ tn>当我们要在发布网站的同时,想在后端开启一个长时间运行的服务不断的去处理我们的一些业务时,这时我们便需要运用到服务承载了。 我们这里将用最常见的**CPU使用率**,**内存使用量**和**网络吞吐量**这3种典型的指标做示范。 创建控制台项目 ------------ ![](https://img.tnblog.net/arcimg/hb/9d0507149d86412f8483b56af6c55caf.png) >### 添加相关依赖包 ```csharp <ItemGroup> <PackageReference Include="Microsoft.Extensions.Hosting" Version="3.1.11" /> <PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="3.1.11" /> </ItemGroup> ``` 添加长时间运行服务相关内容 ------------ >### 创建指标实例 ```csharp 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 }; } ``` >### 承载服务的实现 tn>承载服务通过 `IHostedService` 接口表示,其接口定义的`StartAsync`与`StopAsync`方法分别代表启动服务与关闭服务。我们通过`PerformanceMetricsCollector`实现`IHostedService`的接口去采集性能指标。并通过一个`Timer`调度器每隔`5`秒去调用一个`PerformanceMetrics`的实例从而获取指标数据。 ```csharp 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; } } ``` >### 构建承载系统 tn>在调用`Build`方法之前,可以调用`IHostBuilder`接口的`ConfigureServices`方法将`PerformanceMetricsCollector`注册为`IHostedService`的服务,并将生命周期设置为`AddSingleton`。 ```csharp new HostBuilder() .ConfigureServices(svcs => svcs //.AddSingleton<IHostedService,PerformanceMetricsCollector>() 与下面一样的 .AddHostedService<PerformanceMetricsCollector>()) .Build() .Run(); ``` 运行测试 ------------ ![](https://img.tnblog.net/arcimg/hb/8fd076a6a17a407c85ccf3d172ce51d2.png)
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739
👈{{preArticle.title}}
👉{{nextArticle.title}}
评价
{{titleitem}}
{{titleitem}}
{{item.content}}
{{titleitem}}
{{titleitem}}
{{item.content}}
尘叶心繁
这一世以无限游戏为使命!
博主信息
排名
6
文章
6
粉丝
16
评论
8
文章类别
.net后台框架
168篇
linux
17篇
linux中cve
1篇
windows中cve
0篇
资源分享
10篇
Win32
3篇
前端
28篇
传说中的c
4篇
Xamarin
9篇
docker
15篇
容器编排
101篇
grpc
4篇
Go
15篇
yaml模板
1篇
理论
2篇
更多
Sqlserver
4篇
云产品
39篇
git
3篇
Unity
1篇
考证
2篇
RabbitMq
23篇
Harbor
1篇
Ansible
8篇
Jenkins
17篇
Vue
1篇
Ids4
18篇
istio
1篇
架构
2篇
网络
7篇
windbg
4篇
AI
18篇
threejs
2篇
人物
1篇
嵌入式
2篇
python
13篇
HuggingFace
8篇
pytorch
9篇
opencv
6篇
最新文章
最新评价
{{item.articleTitle}}
{{item.blogName}}
:
{{item.content}}
关于我们
ICP备案 :
渝ICP备18016597号-1
网站信息:
2018-2024
TNBLOG.NET
技术交流:
群号656732739
联系我们:
contact@tnblog.net
欢迎加群
欢迎加群交流技术