首页 > 其他分享 >Cloud集群模式XXL-job开启自动注册执行器

Cloud集群模式XXL-job开启自动注册执行器

时间:2023-04-28 20:58:17浏览次数:47  
标签:执行器 String private job xxlJobSpringExecutor Cloud xxl

在微服务架构下,传统的spring task、Quartz已经不再推荐使用,
在数据与业务增长的同时,定时任务处理数据是避免不了的,抛开单节点不谈,集群服务如果想要执行以往的定时任务最简单粗暴的方式就是使用分布式锁来保证唯一性,但是由于不可控原因,可能在执行任务期间所以压力集中到其中一个节点,所以这里使用了分布式任务调度平台xxl-job
在微服务集群中,如果需要作为xxl-job的执行器,需要在每个微服务中配置执行器的参数

像一些公共的配置可以提取到nacos中,执行器的name,、ip与port可以使用当前服务的,从而达到简化配置的目的
项目依赖lombok
新建配置文件

@Data
@ConfigurationProperties(prefix = "xxl.job")
public class XxlJobProperties {

	@NestedConfigurationProperty
	private XxlAdminProperties admin = new XxlAdminProperties();

	@NestedConfigurationProperty
	private XxlExecutorProperties executor = new XxlExecutorProperties();

}
@Data
public class XxlAdminProperties {

	/**
	 * 调度中心部署跟地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。 执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册;
	 */
	private String addresses;

}
@Data
public class XxlExecutorProperties {

	/**
	 * 执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册
	 */
	private String appname;

	/**
	 * 服务注册地址,优先使用该配置作为注册地址 为空时使用内嵌服务 ”IP:PORT“ 作为注册地址 从而更灵活的支持容器类型执行器动态IP和动态映射端口问题
	 */
	private String address;

	/**
	 * 执行器IP [选填]:默认为空表示自动获取IP,多网卡时可手动设置指定IP ,该IP不会绑定Host仅作为通讯实用;地址信息用于 "执行器注册" 和
	 * "调度中心请求并触发任务"
	 */
	private String ip;

	/**
	 * 执行器端口号 [选填]:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口;
	 */
	private Integer port = 0;

	/**
	 * 执行器通讯TOKEN [选填]:非空时启用;
	 */
	private String accessToken;

	/**
	 * 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;
	 */
	private String logPath = "logs/applogs/xxl-job/jobhandler";

	/**
	 * 执行器日志保存天数 [选填] :值大于3时生效,启用执行器Log文件定期清理功能,否则不生效;
	 */
	private Integer logRetentionDays = 30;

}

xxl-job自动装配能力

@Configuration(proxyBeanMethods = false)
@EnableAutoConfiguration
@EnableConfigurationProperties(XxlJobProperties.class)
public class XxlJobAutoConfiguration {

	/**
	 * 服务名称 包含 XXL_JOB_ADMIN 则说明是 Admin
	 */
	private static final String XXL_JOB_ADMIN = "xxl-job-admin";

	/**
	 * 配置xxl-job 执行器,提供自动发现 xxl-job-admin 能力
	 * @param xxlJobProperties xxl 配置
	 * @param discoveryClient 注册发现客户端
	 * @return
	 */
	@Bean
	public XxlJobSpringExecutor xxlJobSpringExecutor(XxlJobProperties xxlJobProperties, Environment environment,
			DiscoveryClient discoveryClient) {
		XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
		XxlExecutorProperties executor = xxlJobProperties.getExecutor();
		// 应用名默认为服务名
		String appName = executor.getAppname();
		if (!StringUtils.hasText(appName)) {
			appName = environment.getProperty("spring.application.name");
		}
		xxlJobSpringExecutor.setAppname(appName);
		xxlJobSpringExecutor.setAddress(executor.getAddress());
		xxlJobSpringExecutor.setIp(executor.getIp());
		xxlJobSpringExecutor.setPort(executor.getPort());
		xxlJobSpringExecutor.setAccessToken(executor.getAccessToken());
		xxlJobSpringExecutor.setLogPath(executor.getLogPath());
		xxlJobSpringExecutor.setLogRetentionDays(executor.getLogRetentionDays());

		// 如果配置为空则获取注册中心的服务列表 "http://bukeneng-xxl:9080/xxl-job-admin"
		if (!StringUtils.hasText(xxlJobProperties.getAdmin().getAddresses())) {
			String serverList = discoveryClient.getServices().stream().filter(s -> s.contains(XXL_JOB_ADMIN))
					.flatMap(s -> discoveryClient.getInstances(s).stream()).map(instance -> String
							.format("http://%s:%s/%s", instance.getHost(), instance.getPort(), XXL_JOB_ADMIN))
					.collect(Collectors.joining(","));
			xxlJobSpringExecutor.setAdminAddresses(serverList);
		}
		else {
			xxlJobSpringExecutor.setAdminAddresses(xxlJobProperties.getAdmin().getAddresses());
		}

		return xxlJobSpringExecutor;
	}

申明注解开启支持xxl-job

@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Import({ XxlJobAutoConfiguration.class })
public @interface EnableXxlJob {

}

一般公司会有很多的微服务,在微服务中如果需要xxl-job的能力,可以直接使用@EnableXxlJob开启,其中后台调度中心地址addresses可以直接放在公用配置文件中,XxlExecutorProperties执行器配置项可以按需添加,并且添加当前项目依赖和xxl-job-core依赖

 <dependency>
            <groupId>com.xuxueli</groupId>
            <artifactId>xxl-job-core</artifactId>
            <version>2.4.0</version>
        </dependency>

这里注意如果服务为集群模式,xxl.job.executor.port需要在启动参数重进行区分,避免重复的端口号,这样就可以使用分布式的不同路由策略(轮循、随机、一致性hash、故障转移)

标签:执行器,String,private,job,xxlJobSpringExecutor,Cloud,xxl
From: https://www.cnblogs.com/LiuFqiang/p/17363122.html

相关文章

  • Spring Cloud 系列之 Eureka 实现服务注册与发现
    如果你对SpringCloud体系还不是很了解,可以先读一下SpringCloud都有哪些模块Eureka是Netflix开源的服务注册发现组件,服务发现可以说是微服务架构的核心功能了,微服务部署之后,一定要有服务注册和发现的能力,Eureka就是担任这个角色的。如果你用过dubbo的话,那一定知道dubbo......
  • 【专栏精选】实战:使用LeanCloud上传玩家分数,实现排行榜
    本文节选自洪流学堂公众号技术专栏《大话Unity2019》,未经允许不可转载。洪流学堂公众号回复专栏,查看更多专栏文章。洪流学堂,让你快人几步。你好,我是郑洪智。小新:“有了用户登录后,我们总要拿来做点什么事情吧?”大智:“有了用户登陆信息之后,就可以针对用户来存储他自己的信息了,比如......
  • 【专栏精选】使用LeanCloud实现玩家登陆
    本文节选自洪流学堂公众号技术专栏《大话Unity2019》,未经允许不可转载。洪流学堂公众号回复专栏,查看更多专栏文章。洪流学堂,让你快人几步。你好,我是郑洪智。小新:“今天我们是不是该学习登陆了?”大智:“没错,不过登陆我不准备给你讲,你自己学,有啥问题再问我。”小新:“好的吧,正好考验......
  • springcloud gateway filter 重写response
     importorg.reactivestreams.Publisher;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.cloud.gateway.filter.GatewayFilterChain;importorg.springframework.cloud.gateway.filter.GlobalFilter;importorg.springfram......
  • syspolicy_purge_history sql job failed
    错误信息如下:'FileC:\ProgramFiles(x86)\MicrosoftSQLServer\130\Tools\PowerShell\Modules\SQLPS\Sqlps.ps1cannotbeloadedbecauserunningscriptsisdisabledonthissystem根据错误信息提示检查发现服务器注册表里缺少内容-Microsoft.SqlServer.Management.Power......
  • Docker-Compose部署xxl-job-admin
    Docker-Compose部署xxl-job-admin最近在探索微服务想做一个分布式任务调度中心,发现用之前.net的Quartz不太行Quartz作为开源作业调度中的佼佼者,是作业调度的首选。但是集群环境中Quartz采用API的方式对任务进行管理,从而可以避免上述问题,但是同样存在以下问题:问题一:调用API的的方......
  • SpringCloud微服务架构分析说明!
    SpringCloud是一个基于SpringBoot的微服务框架,它提供了一系列的工具和组件,用于构建分布式系统中各个微服务之间的通信和互联,实现服务发现、负载均衡、分布式配置等功能。下面我们来具体解析一下SpringCloud微服务架构。服务注册与发现在微服务架构中,服务的数量非常多,因此需要一个机......
  • hncloud:如何提高游戏服务器访问速度
    对于游戏行业来说,游戏服务器的速度直接影响到玩家的游戏体验。如果服务器速度太慢,游戏画面卡顿、延迟、丢包等问题将会大大影响游戏的流畅度和用户的满意度。所以,如何提高游戏服务器的访问速度,让游戏变得更加畅快呢?游戏企业可以从选择游戏服务器的角度进行改进。选择高速......
  • CloudCanal x OceanBase 数据迁移同步优化
    简述CloudCanal去年支持OceanBase数据迁移同步能力后,随着使用用户增多以及问题反馈,近期对该能力进行了一轮较大规模的优化。本篇文章简要介绍这些优化点,以及未来该能力的演进方向。优化点大幅提升同步性能CloudCanal目前使用OceanBaseLogProxy做增量数据订阅,使用方式......
  • 小团队真的适合引入SpringCloud微服务吗?
    单体应用时代接口定义持续集成(CI)微服务时代服务拆分原则框架选择架构改造自动化部署链路跟踪运维监控容器化时代架构改造SpringCloud与k8s的融合CI的改造小结微服务是否适合小团队是个见仁见智的问题。回归现象看本质,随着业务......