加入收藏 | 设为首页 | 会员中心 | 我要投稿 十堰站长网 (https://www.0719zz.com/)- 混合云存储、网络、视频终端、云计算、媒体处理!
当前位置: 首页 > 编程开发 > Asp > 正文

源码分析MinimalApi是如何在Swagger中展示

发布时间:2023-02-20 09:33:20 所属栏目:Asp 来源:互联网
导读:1.什么是ScheduleMaster ScheduleMaster是分布式任务调度系统,是国内的一位开发者写的。简称:集中任务调度系统,最简单的理解ScheduleMaster,就是对不同的系统里面的调度任务做统一管理的框架。 例如我们现在有多个系统,每个系统针对自己处理不同的业务场
  1.什么是ScheduleMaster
  ScheduleMaster是分布式任务调度系统,是国内的一位开发者写的。简称:集中任务调度系统,最简单的理解ScheduleMaster,就是对不同的系统里面的调度任务做统一管理的框架。
 
  例如我们现在有多个系统,每个系统针对自己处理不同的业务场景。衍生出自己的调度任务,想象一下,如果每个系统人为去维护,那随着调度任务越来越多,人是崩溃的吧,可见维护和技术成本是巨大的,这时我们需要选择分布式任务系统框架做统一的管理
 
  当然有目前有很多相对优秀分布式任务系统框架,我们主要学习 ScheduleMaster
 
  2.使用ScheduleMaster
  1.首先我们需要使用NET Core web Api创建几个模拟的微服务,分别为 考勤、算薪、邮件、短信
 
  2.下载开源的ScheduleMaster,并且使用ScheduleMaster调度我们的微服务接口
 
  - sqlserver:"Persist Security Info = False; User ID =sa; Password =123456; Initial Catalog =schedule_master; Server =."
  - postgresql:"Server=localhost;Port=5432;Database=schedule_master;User Id=postgres;Password=123456;Pooling=true;MaxPoolSize=20;"
  - mysql:"Data Source=localhost;Database=schedule_master;User ID=root;Password=123456;pooling=true;CharSet=utf8mb4;port=3306;sslmode=none;TreatTinyAsBoolean=true"
 
  修改Host的配置文件和支持的数据库,框架默认使用Mysql
 
  修改Web的配置文件和支持的数据库,框架默认使用Mysql
 
  3.进入Hos.ScheduleMaster.Web项目的发布目录,dotnet Hos.ScheduleMaster.Web.dll启动项目 ,此时会生成数据库
 
  登录账号:admin
 
  密码:111111
 
  4.进入Hos.ScheduleMaster.QuartzHost项目的发布目录,执行命令,启动项目
 
  1
  dotnet Hos.ScheduleMaster.QuartzHost.dll --urls http://*:30003
 
  1.配置Http调度任务
  5.准备就绪后,使用后台查看节点管理,可以看到web主节点30000和任务调度的接口30002已经在运行
 
  6.使用任务列表菜单,创建定时调度任务,配置基础信息和元数据配置,然后点击保存就开始执行任务
 
  2.配置程序集调度任务
  1.创建一个类库,安装ScheduleMaster库, 创建一个类继承TaskBase,实现抽象方法,然后编译程序集
 
  namespace TaskExcuteService
  {
      class AssemblyTask : TaskBase
      {
          public override void Run(TaskContext context)
          {
              context.WriteLog("程序集任务");
          }
      }
  }
  2.找到debug目录,去掉Base程序集,然后添加为压缩文件
 
  3.在web界面找到任务配置,选择程序集进行基本配置,配置元数据,输入程序集名称,然后输入类,并将程序集上传,保存就可以运行了
 
 
  3.使用Api接入任务
  为了方便业务系统更好的接入调度系统,ScheduleMaster创建任务不仅可以在控制台中实现,系统也提供了WebAPI供业务系统使用代码接入,这种方式对延时任务来说尤其重要。
 
 
  1.API Server 对接流程
  在控制台中创建好专用的API对接用户账号。
  使用对接账号的用户名设置为http header中的ms_auth_user值。
  使用经过哈希运算过的秘钥设置为http header中的ms_auth_secret值,计算规则:按{用户名}{hash(密码)}{用户名}的格式拼接得到字符串str,然后再对str做一次hash运算即得到最终秘钥,hash函数是小写的32位MD5算法。
  使用form格式发起http调用,如果非法用户会返回401-Unauthorized。
 
  HttpClient client = new HttpClient();
  client.DefaultRequestHeaders.Add("ms_auth_user", "admin");
  client.DefaultRequestHeaders.Add("ms_auth_secret", SecurityHelper.MD5($"admin{SecurityHelper.MD5("111111")}}admin"));
  所有接口采用统一的返回格式,字段如下:
 
  参数名称 参数类型 说明
  Success bool 是否成功
  Status int 结果状态,0-请求失败 1-请求成功 2-登录失败 3-参数异常 4-数据异常
  Message string 返回的消息
  Data object 返回的数据
 
  2.创建程序集任务
  使用API创建任务的方式不支持上传程序包,所以在任务需要启动时要确保程序包已通过其他方式上传,否则会启动失败。
 
  接口地址:http://yourip:30000/api/task/create
  请求类型:POST
  参数格式:application/x-www-form-urlencoded
  返回结果:创建成功返回任务id
  参数列表:
  参数名称 参数类型 是否必填 说明
  MetaType int 是 任务类型,这里固定是1
  Title string 是 任务名称
  RunLoop bool 是 是否按周期执行
  CronExpression string 否 cron表达式,如果RunLoop为true则必填
  AssemblyName string 是 程序集名称
  ClassName string 是 执行类名称,包含完整命名空间
  StartDate DateTime 是 任务开始时间
  EndDate DateTime 否 任务停止时间,为空表示不限停止时间
  Remark string 否 任务描述说明
  Keepers List<int> 否 监护人id
  Nexts List<guid> 否 子级任务id
  Executors List<string> 否 执行节点名称
  RunNow bool 否 创建成功是否立即启动
  Params List<ScheduleParam> 否 自定义参数列表,也可以通过CustomParamsJson字段直接传json格式字符串
  ScheduleParam:
 
  参数名称 参数类型 是否必填 说明
  ParamKey string 是 参数名称
  ParamValue string 是 参数值
  ParamRemark string 否 参数说明

  HttpClient client = new HttpClient();
  List<KeyValuePair<string, string>> args = new List<KeyValuePair<string, string>>();
  args.Add(new KeyValuePair<string, string>("MetaType", "1"));
  args.Add(new KeyValuePair<string, string>("RunLoop", "true"));
  args.Add(new KeyValuePair<string, string>("CronExpression", "33 0/8 * * * ?"));
  args.Add(new KeyValuePair<string, string>("Remark", "By Xunit Tester Created"));
  args.Add(new KeyValuePair<string, string>("StartDate", DateTime.Today.ToString("yyyy-MM-dd HH:mm:ss")));
  args.Add(new KeyValuePair<string, string>("Title", "程序集接口测试任务"));
  args.Add(new KeyValuePair<string, string>("AssemblyName", "Hos.ScheduleMaster.Demo"));
  args.Add(new KeyValuePair<string, string>("ClassName", "Hos.ScheduleMaster.Demo.Simple"));
  args.Add(new KeyValuePair<string, string>("CustomParamsJson", "[{"ParamKey":"k1","ParamValue":"1111","ParamRemark":"r1"},{"ParamKey":"k2","ParamValue":"2222","ParamRemark":"r2"}]"));
  args.Add(new KeyValuePair<string, string>("Keepers", "1"));
  args.Add(new KeyValuePair<string, string>("Keepers", "2"));
  //args.Add(new KeyValuePair<string, string>("Nexts", ""));
  //args.Add(new KeyValuePair<string, string>("Executors", ""));
  HttpContent reqContent = new FormUrlEncodedContent(args);
  var response = await client.PostAsync("http://localhost:30000/api/Task/Create", reqContent);
  var content = await response.Content.ReadAsStringAsync();
  Debug.WriteLine(content);
 
  3.创建HTTP任务
  接口地址:http://yourip:30000/api/task/create
  请求类型:POST
  参数格式:application/x-www-form-urlencoded
  返回结果:创建成功返回任务id
  参数列表:
  参数名称 参数类型 是否必填 说明
  MetaType int 是 任务类型,这里固定是2
  Title string 是 任务名称
  RunLoop bool 是 是否按周期执行

(编辑:十堰站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读