xxl-job是非常流行的分布式调度中心,通常我们直接拿来用或做二开与自己的服务集成,作为微服务架构里的统一调度组件,对定时调度类作业集中管理,将调度与业务剥离。
xxl-job的架构里,xxl-job-admin是负责调度的组件,根据时间轮算法触发任务,通过RPC方式调用xxl-job-executor执行具体的任务,可以制定不同的JobHandler实现不同的执行方式。通常为了业务解耦,xxl-job-executor会独立部署,与业务通过RPC调用方式来实现任务的业务逻辑执行。
以dubbo为RPC通信组件的微服务集群中,实现以xxl-job-executor作为consumer的JobHandler,调用provider的dubbo接口,业务人员只需要关注业务逻辑实现,像其它微服务接口一样提供定时作业的接口,即可方便的实现定时任务。dubbo提供了泛化调用的方式,可以在不引入provider方的接口定义,只需要知道接口签名、方法形参、实参就可以实现dubbo调用。以下是示例,基于dubbo2.7版本。
引入dubbo依赖
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<type>pom</type>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
定义DubboJobHandler
核心是genericService.$invoke
@Component
public class DubboJobHandler {
private static final Logger logger = LoggerFactory.getLogger(DubboJobHandler.class);
// ReferenceConfig比较重,建议缓存
private final Map<String, ReferenceConfig<GenericService>> referenceConfigMap = new ConcurrentHashMap<>();
@Autowired
private ObjectProvider<ApplicationConfig> app

最低0.47元/天 解锁文章
3057

被折叠的 条评论
为什么被折叠?



