使用.Net完成微服务模式下的任务调度中心

最新已经把ocelot、consul、ids4、apollo、elk(分布式日志)服务都已经搭建部署完毕并且可以正常使用,接下来就是任务调度中心

之前单体服务访问的定时调度多半是以 Hangfire 或者是 Quartz 都是把服务在本地创建调度任务,但是这种方式针对微服务的模式就行不通,针对多个服务都需要有执行定时计划,就不可能每个服务都集成一次调度服务

于是想到了一个方案

1.通过特性去标识class,然后再获取到标识的参数,url、HttpMethods、Description的属性值,在模块服务启动时,调用获取当前服务标注的特性的值,并把值入库(这样就能获取到当前那个服务模块下的哪些方法是用来做定时调度的)

特性具备(Url、HttpMethods 、Description、ServiceName)四个属性

2.单独写一个web服务,登录后进入系统,可以查看到所有的待调度的url、服务名称、请求方式、请求参数(这样就能够在页面上对需要进行调度的服务自行通过cron进行配置)

3.当服务执行时会按照配置的service名称和url进行请求对应需要调度的服务,还需要将配置的调度全都入库,做数据持久化,当服务每次重启的时候都要先查询数据库的配置进行自身的初始化

4.在服务与服务直接进行api请求时,需要携带访问密钥,避免被恶意调度,密钥的方式可以参考(使用当前时间戳进行 加减乘除 操作后 把当前时间戳放入请求体中 接收端按照相同的方式进行解密,获取得到时间戳 并验证得到时间戳 要是5s 或 10s内有效 保证每次的key都不一样)

 大致的流程如下

C# 查找特性标识的所有类并获取属性值 的方法可以参考我的这篇博客:https://www.cnblogs.com/OneSeting/p/17354374.html

接下来经行web任务调度中心的开发

 

posted on 2023-04-26 14:24  白码一号  阅读(130)  评论(0编辑  收藏  举报