微服务统计,分析,图表,监控一体化的HttpReports项目在.Net Core 中的使用
HttpReports
简单介绍
HttpReports 是 .Net Core 下的一个Web组件, 适用于WebAPI,Ocelot网关应用,MVC项目,非常适合针对微服务应用使用,通过中间件的形式集成到您的项目中,可以让开发人员快速的搭建出一个 数据统计,分析,图表,监控 一体化的 Web站点。
主要模块
主要包含HttpReports 中间件 和 HttpReports.Web 的MVC项目;
HttpReports: https://github.com/SpringLeee/HttpReports
HttpReports.Web: https://github.com/SpringLeee/HttpReportsWeb
支持项目类型
😂 单个WebAPI应用
😆 多个独立WebAPI应用
😊 Ocelot 网关应用
😛 单个MVC项目
😃 多个MVC项目
如何使用
1.添加 HttpReports 中间件
Nuget 包安装 HttpReports, 打开Startup.cs, 修改 ConfigureServices(IServiceCollection services) 方法,添加以下代码,放在 services.AddMvc() 之前都可以。
选择您的应用类型:
😆 单个WebAPI应用 或者 使用Ocelot网关的应用
修改 ConfigureServices 方法 ,
public void ConfigureServices(IServiceCollection services) { // 添加HttpReports中间件 services.AddHttpReportsMiddlewire(WebType.API, DBType.SqlServer); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); }
😆 ** 多个独立的WebAPI应用 **
假设有一个 授权(Auth)API应用,和一个支付(Pay)API应用,并且没有使用网关,需要分别在两个项目的Startup.cs文件的 ConfigureServices 方法中分别添加以下代码:
授权API应用(Auth)
services.AddHttpReportsMiddlewire(WebType.API, DBType.SqlServer,"Auth");
支付Pay应用(Pay)
services.AddHttpReportsMiddlewire(WebType.API, DBType.SqlServer,"Pay");
😆 单个MVC应用
public void ConfigureServices(IServiceCollection services) { // 添加HttpReports中间件 services.AddHttpReportsMiddlewire(WebType.MVC, DBType.SqlServer); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); }
😆 多个MVC应用
假设有一个 电商(Mall)应用,和一个支付(Pay)应用,需要分别在两个项目的Startup.cs文件的 ConfigureServices 方法中分别添加以下代码:
电商MVC应用 (Mall)
services.AddHttpReportsMiddlewire(WebType.MVC, DBType.SqlServer,"Mall");
支付MVC应用 (Pay)
services.AddHttpReportsMiddlewire(WebType.MVC, DBType.SqlServer,"Pay");
😆 切换数据库
使用MySql数据库
services.AddHttpReportsMiddlewire(WebType.API, DBType.MySql);
使用SqlServer数据库
services.AddHttpReportsMiddlewire(WebType.API, DBType.SqlServer);
2.使用 HttpReports 中间件
修改 StartUp.cs 的 Configure 方法
.Net Core 2.2
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { //使用HttpReports app.UseHttpReportsMiddlewire(); app.UseMvc(); }
必须要放在 UseMVC() 方法和其他中间件的前边,否则不生效。
.Net Core 3.0 和以上版本
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { //使用HttpReports app.UseHttpReportsMiddlewire(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); }
必须要放在 UseEndpoints() 方法和其他中间件的前边,否则不生效。
3. appsettings.json 配置连接字符串
打开 appsetting.json, 添加数据库连接字符串, 需要手动创建数据库 HttpReports
"ConnectionStrings": { "HttpReports": "Max Pool Size = 512;server=.;uid=sa;pwd=123456;database=HttpReports;" }
4. 运行Web应用
到这一步,已经配置完成了, 直接运行Web应用,如果中间有报错的话,可能是因为数据库的连接问题,请检查后再重试,如果没有报错的话,打开数据库 [HttpReports].[dbo].[RequestInfo], 如果能看到有数据记录,就说明 HttpReports 中间件的部分配置完成了,数据有了,下边开始配置 HttpReportsWeb 站点。
HttpReports.Web部分
github源码:https://github.com/SpringLeee/HttpReportsWeb 有需要的也可以下载源码后编译,默认的git分支是Core 2.2 版本,还有一个 core 3.0的分支;
这里提供 core2.2 和 3.0 的发布版本下载:
Core 2.2 发布版本下载
Core 3.0 发布版本下载
如何使用
1.运行 HttpReports.Web
在github下载 HttpReports.Web 项目,项目地址:https://github.com/SpringLeee/HttpReportsWeb, Web项目是.Net Core MVC 项目,使用三层实现。
下载完成后,在VS中打开,然后还原NuGet程序包,完成后首先 appsettings.json
appsettings.json
{ "ConnectionStrings": { "HttpReports": "Max Pool Size = 512;server=.;uid=sa;pwd=123456;database=HttpReports;" }, "HttpReportsConfig": { "DBType": "SqlServer", "UserName": "admin", "Password": "123456" } }
主要参数:
- HttpReports:配置一个可用的连接字符串;
- DBType:数据库类型,支持SqlServer和MySql;
- UserName: Web项目的登录名;
- Password: Web项目的登录密码;
假设我们使用的是SqlServer 数据库,需要先配置ConnectionStrings,然后手动创建数据库 HttpReports(Web项目会根据数据库自动创建表,并且在第一次运行的时候Mock一些数据 ),我们直接F5运行项目, 没有问题的话,会直接跳到登录页面,输入用户名密码 admin 123456,登录后,应该可以看到下面的页面
现在可以看到项目有 auth,payment,sms 三个服务节点,服务节点的定义如下:
请求地址 | 服务节点 | 说明 |
---|---|---|
https://www.abc.com/auth/api/user/login | auth | |
https://www.abc.com/log/api/user/login | log | |
https://www.abc.com/api/user/login | default | 如果没有前缀的话,就是default节点 |
如果你的项目是单个WebAPI项目,那么服务节点只有一个 default,如果你的项目是 GateWay 网关项目,那么Web项目就可以读取到多个服务节点,比如 auth 认证,payment支付等。
2.在API项目中使用
首先要删除 Web 项目的Mock数据,打开数据库 HttpReports,打开表 RequestInfo,清空数据,执行Sql
Delete * From [HttpReports].[dbo].[RequestInfo]
配置数据库连接字符串
HttpReports 适用单个API项目和网关项目,这里使用 Ocelot网关项目为例.
我们打开appsetting.json, 配置数据库连接字符串,需要和Web项目一致
Nuget引用HttpReports
安装nuget包 HttpReports ,打开StartUp
在ConfigureServices 方法下添加:
services.AddHttpReportsMiddlewire();
如果是MySql数据库,则添加:csharp services.AddHttpReportsMiddlewire(options =>{ options.DBType = DBType.MySql; });
加入到 Configure 方法 ,需要放在 app.UseMVC() 或者 app.UseOcelot().Wait() 的前面,要不然不生效
app.UseHttpReportsMiddlewire();
ConnectionStrings 配置的连接字符串和数据库类型要一致,全部完成了以后,我们就可以使用 Web 项目了。
项目环境基本要求
WebAPI或者网关项目支持的.Net Core 版本 2.2, 3.0, 3.1;
HttpReports.Web 的core版本为 2.2
性能事项
HttpReports 中间件是异步操作,所以对api接口请求的时间可以忽略,但是由于实质使用的是数据库存储,所以要注意直接请求到数据库的压力。
下面是用PostMan做的一个简单测试:
WebAPI内的方法:
public string Sql1() { SqlConnection con = new SqlConnection( "Max Pool Size = 512;server=.;uid=sa;pwd=123456;database=HyBasicData;"); var list1 = con.Query(" select * from [HyBasicData].[dbo].[Customers] "); var list2 = con.Query(" select * from [HyBasicData].[dbo].[Customers] "); var list3 = con.Query(" select * from [HyBasicData].[dbo].[Customers] "); return list1.Count().ToString(); }
PostMan分别对添加中间件和不添加中间件的 API请求 1000次,每300ms请求一次
说明 | 请求次数 | 平均响应时间 |
---|---|---|
原生API | 1000 | 32.535 |
使用中间件 | 1000 | 32.899 |
总结
HttpReports 的实现原理并不复杂,如果你想给你的 WebAPI项目,快速的添加一套分析系统 ,那么使用HttpReports 是一个不错的选择
联系作者
如果您在使用过程中遇到了什么问题或者有好的建议的话,可以添加我的微信,希望可以帮助到您
来源:https://www.cnblogs.com/myshowtime/p/12162286.html