首先说这个框架的目前的应用场景:
例如:美团想要获取七天酒店的信息,而且这个请求量特别大,但是却不要求是及时响应,可以异步完成。根据这个需求我们大致可以确定采用什么技术方案,可以采用队列来完成这个过程,但是如果仅仅是队列来实现的话,又有些问题。
比如我想实现以下这些功能:
1.如果这个请求我想写入日志
2.我想根据请求类型做不同的异常抛出
3.我想在这个过程中实现RPC调用请求一些特定的接口数据
4.我想实现同一套程序多个实例运行定时任务和队列任务等
基于这种应用场景,我们将上面几种功能整合到一个包,这个包在这里就叫做分布式任务框架。
分布式任务框架具体功能如下:
1. 基于spring boot实现,依赖rabbitMQ,mysql,redis,influxdb。
2. 完全分布式,支持混合云,可指定主机或指定集群运行。
3. 支持定时任务,并支持服务端动态配置。
4. 支持基于队列分发任务,支持错误重试,并支持服务端动态配置。
5. 支持RPC风格调用,支持错误重试,并支持服务器端动态配置。
5. 支持多种规则的任务报警。
6. 支持同一套程序多个实例运行定时任务和队列任务。
分布式任务框架实现原理:
1.采用java监听者模式监听队列是否执行,如果执行则触发日志
2.采用Spring自带的Scheduled、TaskScheduler实现多线程定时任务
3.基于redis实现的分布式序列的生成
4.定义自己的异常类,来实现不同调度任务,返回不同的异常信息
5.基于SpringBoot集成MQ、Redis、Guava
6.采用AtomicBoolean、ConcurrentHashMap实现多线程安全
7.队列的请求和返回参数采用泛型实现,以适配各种各样的数据源
8.使用RateLimiter进行队列限流
有兴趣想要进一步研究的话,可以下载下面的源代码。