通过上面ExecutorRegistryThread # start方法核心代码,可以看到,注册是通过adminBiz.registry代码实现的,调用链路总结如下:最终还是通过 HTTP 协议的 POST 请求,注册数据格式如下:看到这里,我们回到文章开头问题部分。
水平拆分,是同一个后端多环境部署,他们都处理相同的内容,使用反向代理来均衡负载,这种也叫集群;注册中心: 执行器会周期性自动注册任务, 调度中心将会自动发现注册的任务并触发执行,每30秒清理一次注册表中的无效机器。
Spring Task 的原理是在初始化 bean 时借助 ScheduledAnnotationBeanPostProcessor 拦截@Scheduled 注解所标识的方法,并根据每个方法及其注解配置构建相应的 Task 实例注册到 ScheduledTaskRegistrar 中,并在单例 bean 初始化完成后通过 afterSingletonsInstantiated 回调设置 ScheduledTaskRegistrar 中的调度器 TaskScheduler,其底层依赖于 jdk 并发包中的 ScheduledThreadPoolExecutor 实现,并在 afterPropertiesSet 时将所有 Task 添加到 TaskScheduler 中调度执行。