
.net core 3.1 服务承载【依赖注入】
目录
https://www.tnblog.net/hb/article/details/5591 ,请结合我上一篇的来看,上一篇连接地址:https://www.tnblog.net/hb/article/details/5568
前言
大概做的调整如图所示,这样做的好处就是:
(1) 通过依赖注入,性能指标的来源可以是不同的地方获得的
(2) 处理的具体方式也可以是不同的实现进行的处理
项目内容
接口的代码
// 网络,内存,CPU性能接口
public interface IMemoryMetricsCollector
{
long GetUsage();
}
public interface INetworkMetricsCollector
{
long GetThroughput();
}
public interface IProcessorMetricsCollector
{
int GetUsage();
}
// 处理接口
public interface IMetricsDeliverer
{
Task DeliverAsync(PerformanceMetrics performanceMetrics);
}
实现性能的接口
public class FakeMetricsCollector :
IProcessorMetricsCollector,
INetworkMetricsCollector,
IMemoryMetricsCollector
{
public long GetThroughput() => PerformanceMetrics.Create().Network;
public long GetUsage() => PerformanceMetrics.Create().Memory;
int IProcessorMetricsCollector.GetUsage() => PerformanceMetrics.Create().Processor;
}
实现对指标的操作
public class FakeMetricsDeliverer : IMetricsDeliverer
{
public Task DeliverAsync(PerformanceMetrics performanceMetrics)
{
Console.WriteLine($"[{DateTimeOffset.Now}]:{performanceMetrics}");
return Task.CompletedTask;
}
}
修改PerformanceMetricsCollector
public sealed class PerformanceMetricsCollector : IHostedService
{
private readonly IProcessorMetricsCollector _processorMetricsCollector;
private readonly INetworkMetricsCollector _networkMetricsCollector;
private readonly IMetricsDeliverer _metricsDeliverer;
private readonly IMemoryMetricsCollector _memoryMetricsCollector;
private IDisposable _scheduler;
public PerformanceMetricsCollector(
IProcessorMetricsCollector processorMetricsCollector,
INetworkMetricsCollector networkMetricsCollector,
IMetricsDeliverer metricsDeliverer,
IMemoryMetricsCollector memoryMetricsCollector
)
{
_processorMetricsCollector = processorMetricsCollector;
_networkMetricsCollector = networkMetricsCollector;
_metricsDeliverer = metricsDeliverer;
_memoryMetricsCollector = memoryMetricsCollector;
}
/// <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 async void Callback(object state)
{
// 通过不同
var performanceMetrics = new PerformanceMetrics() {
Memory = _memoryMetricsCollector.GetUsage(),
Network = _networkMetricsCollector.GetThroughput(),
Processor = _processorMetricsCollector.GetUsage()
};
await _metricsDeliverer.DeliverAsync(performanceMetrics);
}
/// <summary>
/// 关闭服务
/// </summary>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public Task StopAsync(CancellationToken cancellationToken)
{
_scheduler?.Dispose();
return Task.CompletedTask;
}
}
通过依赖注入的方式
var fakeMetricsCollector = new FakeMetricsCollector();
new HostBuilder()
.ConfigureServices(svcs => svcs
.AddSingleton<IProcessorMetricsCollector>(fakeMetricsCollector)
.AddSingleton<INetworkMetricsCollector>(fakeMetricsCollector)
.AddSingleton<IMemoryMetricsCollector>(fakeMetricsCollector)
.AddSingleton<IMetricsDeliverer, FakeMetricsDeliverer>()
.AddSingleton<IHostedService, PerformanceMetricsCollector>()
)
.Build()
.Run();
运行测试
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739
评价
排名
6
文章
6
粉丝
16
评论
8
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


欢迎加群交流技术