当前位置: 首页 > news >正文

分销系统开发多少钱贵州seo和网络推广

分销系统开发多少钱,贵州seo和网络推广,开发网站需要租服务器,濮阳网络电视直播XXL-JOB分布式任务调度 ​ 在实际项目中,为了降低耦合,通常会把定时任务的逻辑单独抽离出来,构建成一个新的工程。也有可能需要定时任务实现高可用,组建成集群,提高容错率。 ​ 那么问题也就来了。既然定时任务是多个…

XXL-JOB分布式任务调度

​ 在实际项目中,为了降低耦合,通常会把定时任务的逻辑单独抽离出来,构建成一个新的工程。也有可能需要定时任务实现高可用,组建成集群,提高容错率。

​ 那么问题也就来了。既然定时任务是多个节点,那么同一时间多个节点都执行,必然造成数据重复,如何保证只有一个节点执行任务就是一个很重要的问题。

原生定时任务的缺陷

​ 使用过原生定时任务的开发者应该深有感触,原生定时任务仅能满足简单的需求,应对复杂的场景还有一定的缺陷。如以下的一些不足之处:

  • 不支持集群、不能高可用:若部署多节点,必定会数据重复。单节点宕机时,服务将不可用
  • 不支持任务失败重试:任务出现异常时将自动终结
  • 不支持执行时间的动态调整:服务一旦启动,若调整时间则需要修改代码,重启服务
  • 无报警机制:任务失败时,没有报警机制(邮件通知等)
  • 无任务数据统计信息:比如执行任务数,成功比例、失败比例等数据
  • 不支持对任务生命周期的统一管理:在不对服务进程操作情况下,无法手动实现对任务的开启或关闭操作
  • 不支持分片任务:不能多节点处理不同内容

XXL-JOB介绍

​ 上面介绍了原生定时任务的缺陷,而XXL-JOB几乎能完美解决这些问题。XXL-JOB是一款开源免费的分布式任务调度框架,学习成本低,易扩展,依赖组件少,仅需要基础Java环境和Mysql数据库就可以使用,开箱即用。

XXL-JOB设计简单实用:

  • 提供可视化界面,统计任务数据和操作任务的开始或停止,无需重启服务
  • 动态修改任务执行时间(corn表达式)
  • 内置支持邮件警报(也可扩展其他的警报)
  • 支持任务分片和任务失败重试
  • 支持父任务执行结束且执行成功后,将主动触发一次子任务的执行

注意:要增加其他的报警时,需要新增类并且实现com.xxl.job.admin.core.alarm.JobAlarm接口,并把对象交给spring管理。具体规则可参考com.xxl.job.admin.core.alarm.impl.EmaiJobAlarm类

XXL-JOB将分布式任务系统分为两个模块:调度中心执行器

调度中心本身不承担业务逻辑,而是主要向执行器发送调度请求。执行器则负责接收调度中心的请求并且执行真正的业务逻辑。这样将任务调度和执行过程高度解耦,更容易实现集群。

XXL-JOB使用

XXL-JOB在github或gitee上都可以找到相关的源码:

  • github:https://github.com/xuxueli/xxl-job/releases
  • gitee:https://gitee.com/xuxueli0323/xxl-job

笔者这里使用2.2.0版本,下载zip或tar.gz压缩包,解压完成后即可得到源码。

准备数据库表

作者已经准备了数据表,我们只需要导入到Mysql中即可。

在这里插入图片描述

导入后数据库如下图

在这里插入图片描述

8张表:

  • xxl_job_lock:任务调度锁表
  • xxl_job_group:执行器信息表
  • xxl_job_info:保存xxl-job调度任务的扩展信息表
  • xxl_job_log:日志
  • xxl_job_log_report:调度日志报表
  • xxl_job_logglue:GLUE更新历史
  • xxl_job_registry:执行器列表
  • xxl_job_user:系统管理员表

使用IDEA导入源码

导入源码后发现主要有三个模块:

  • xxl-job-admin:调度中心
  • xxl-job-core:公共依赖
  • xxl-job-executor-sample:执行器示例

执行器示例中有很多版本,如SpringBoot、Spring、无框架、JFinal、JBoot等提供用户参考构建自己的执行器。

xxl-job-admin项目的application.properties文件,修改数据库信息及Email配置:

### xxl-job, datasource
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver### xxl-job, email
spring.mail.host=smtp.qq.com
spring.mail.port=25
spring.mail.username=xxxxx@qq.com
# 授权码,自行获取
spring.mail.password=xxxxxxxxxx
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory### xxl-job, access token
xxl.job.accessToken=

spring.mail.password的配置项的SMTP密码需要单独申请,非邮箱登录的密码。若不需要邮件报警,那么关于Email的配置不用修改。

xxl.job.accessToken若服务端设置了这个,那么它的客户端也要去设置这个token.

配置完成后,可以运行主类XxlJobAdminApplication启动服务。启动完成后,使用浏览器访问http://localhost:8080/xxl-job-admin,输入账号admin密码123456,登录进入运行报表界面。

在这里插入图片描述

在这里插入图片描述

Docker方式搭建调度中心

除了使用源码运行外,还可以用Docker方式一键搞定。

docker run -e PARAMS="--spring.datasource.username=root --spring.datasource.password=123456 --spring.datasource.url=jdbc:mysql://ip:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimeZone=Asia/Shanghai" -p 8080:8080 -v /tmp:/data/applogs --name xxl-job-admin -d xuxueli/xxl-job-admin:2.2.0
  • -e:配置参数
  • -p:宿主机和容器端口映射
  • -v:挂载目录
  • –name:容器名称
  • -d:后台运行

创建一个执行器项目

  • 创建一个SpringBoot项目,导入相关的依赖:
<!--xxl-job依赖-->
<dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>2.2.0</version>
</dependency>
  • 修改application.yml配置文件,主要加入调度中心地址、执行器名称、访问token、执行器的服务地址、日志路径、日志保留天数等配置
server:port: 8002
spring:application:name: user # 应用名cloud:nacos:discovery:server-addr: localhost:8848 # nacos服务地址
xxl:job:admin:adresses: http://localhost:8080/xxl-job-adminaccessToken: #若服务端设置了,那么这里需要和服务端的值保持一致executor:appname: xxl-job-executor-sampleaddress: # 执行器地址,默认使用 xxl.job.executor.address配置项,若为空,则使用xxl.job.executor.ip + xxl.job.executor.port配置ip: # 执行器ipport: 9989  # 执行器端口logpath: D:\logs  # 日志保存路径logretentiondays: 30 # 日志保留天数

在服务器是多网卡的情况下,自动获取的地址可能不对,这时候xxl.job.executor.addressxxl.job.executor.ip就派上用场了,手动设定地址。

  • 创建XxlJobConfig配置类,根据applicaiton.yml的配置参数,初始化执行器
@Configuration
public class XxlJobConfig {@Value("${xxl.job.admin.addresses}")private String adminAddresses;  // 调度中心地址@Value("${xxl.job.admin.accessToken}")private String accessToken; // 通信token@Value("${xxl.job.admin.executor.appname}")private String appName; // 执行器名称@Value("${xxl.job.admin.executor.address}")private String address; // 地址 @Value("${xxl.job.admin.executor.ip}")private String ip;  // ip    @Value("${xxl.job.admin.executor.port}")private int port; // 端口@Value("${xxl.job.admin.executor.logpath}")private String logPath;  // 日志地址  @Value("${xxl.job.admin.executor.logretentiondays}")private int logRetentionDays;   // 日志保留天数@Beanpublic XxlJobSpringExecutor xxlJobSpringExecutor() {XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();xxlJobSpringExecutor.setAdminAddresses(adminAddresses);xxlJobSpringExecutor.setAppname(appName);xxlJobSpringExecutor.setAddress(address);xxlJobSpringExecutor.setIp(ip);xxlJobSpringExecutor.setPort(port);xxlJobSpringExecutor.setAccessToken(accessToken);xxlJobSpringExecutor.setLogPath(logPath);xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);return xxlJobSpringExecutor;}
}

配置完成后,就可以启动执行器。然后来到调度中心的后台管理页面,点击执行器管理,如图所示

在这里插入图片描述

注意:如果注册方式是自动注册,会有心跳机制,OnLine机器地址列表服务自动上上线、下线。若是手动录入,则不会有心跳机制,而会一直存在OnLine机器的地址列表中。

第一个GLUE(Java)任务

目前已经有一个执行器了,下面使用GLUE模式创建一个定时任务。

注意:GLUE模式的执行代码托管到调度中心在线维护,相比Bean模式更加轻量化,但是发杂业务不建议使用GLUE模式。

  • 在调度中心管理后台点击任务管理,然后新增,填入相关的信息:

在这里插入图片描述

路由策略:表示使用什么样的策略选出当前下拉框选择的执行器具体由哪个执行器执行任务(若是分片广播,那就是当前下拉框选择的执行器下全部执行器都执行)。

  • 添加完任务后,可以修改此任务的代码,点击右侧的图标,点击GLUE IDE在线编辑代码。

在这里插入图片描述

在这里插入图片描述

点击执行一次。XXL-JOB提供了手动触发执行一次任务的功能,必须等到设定的时间到达。

点击后,出现任务参数和机器地址的输入框(可不填),点击保存即可。

若想定时任务按照设定的时间执行,需要将那条任务设置为启动

调度日志中可以看到执行的日志信息。

在这里插入图片描述

  • 若遇到任务调度失败,将会发邮件,信息如下
    在这里插入图片描述

BEAN模式普通任务

前面使用的是GLUE(java)模式实现的定时任务,但是面对负责的业务逻辑时肯定不行的。所以使用BEAN模式实现普通定时任务。

  • 新建任务类TestJobHandler,添加sampleJobHandler方法,并使用@XxlJob注解声明
@Component
public class TestJobHandler {@XxlJob("sampleJobHandler")public ReturnT<String> sampleJobHandler(String name) {XxlJobLogger.log("sampleJobHandler, hello World.");return ReturnT.SUCCESS;}
}

启动执行器

XXL-JOB2.2.0版本移除了@JobHandler注解,推荐使用基于方法的@XxlJob注解进行任务开发。

  • 在调度中心后台,新增任务

在这里插入图片描述

  • 执行

在这里插入图片描述

执行器集群和BEAN模式分片任务

分片任务适用于数据量较大的场景,采用分而治之的思想,尽量把任务均摊到每个节点,减少单个节点的压力。

例如有这样一个业务:每天固定一个时间生成代理用户的报表,考虑到代理比较多,计算数据的过程比较复杂时,使用分片任务。

  • 编写分片任务的代码,使用List数据结构模拟代理数据
@XxlJob("shardingJobHandler")
public ReturnT<String> shardingJobHandler(String param) {// 分片任务ShardingUtil.ShardingVO shardingVO = ShardingUtil.getShardingVo();// 分片参数XxlJobLogger.log("分片参数:当前序号 = {},总分片数:= {}", shardingVO.getIndex(), shardingVO.getTotal());for (Integer val : agentList) {if (val % shardingVO.getTotal() == shardingVO.getIndex()) { // 取余处理XxlJobLogger.log("第{}片,命中分片开始处理 {} ", shardingVO.getIndex(), val);// 其他的业务逻辑}}return ReturnT.SUCCESS;
}

ShardingVO中有两个属性:

  • index:当前分片索引(0开始)

  • total:总分片数

  • 若使用分片任务,那么自然是需要2个节点以上的执行器才可以。复制一份执行器,改下端口即可server.portxxl.job.executor.port,然后启动它们。

  • 在调度中心后台增加分片任务

在这里插入图片描述

  • 执行一次,看日志

第一个分片
在这里插入图片描述

第二个分片

在这里插入图片描述

看出总6条代理数据,2个执行器执行的任务是均匀的,分片执行任务成功。

调度中心和执行器的集群

若有多个调度中心,那么需要在执行器的配置中:

addresses多个地址时,使用,分隔

xxl:job:admin:addresses: http://localhost:8080/xxl-job-admin,http://localhost:8081/xxl-job-adminaccessToken:executor:appname: xxl-job-executor-sampleaddress: # 执行器地址,默认使用 xxl.job.executor.address配置项,若为空,则使用xxl.job.executor.ip + xxl.job.executor.port配置ip: # 执行器ipport: 9999  # 执行器端口logpath: D:\logs  # 日志保存路径logretentiondays: 30 # 日志保留天数

同样也可以使用Nginx负载均衡,为多个调度中心设置调度分配

upstream XXLJOB {server 127.0.0.1:8080;server 127.0.0.1:8081;}server {listen	8002;server_name localhost;location / {proxy_pass	http://XXLJOB;}
}

执行器就可以这样配置

xxl:job:admin:addresses: http://localhost:8002/xxl-job-admin
http://www.ds6.com.cn/news/63978.html

相关文章:

  • 网站建设服务费属于什么科目seo综合查询网站源码
  • 车辆优化管理专业网站全网搜索关键词查询
  • 深圳做网站报价seo推广的公司
  • 国际建设管理学会网站百度一下 你就知道官网
  • 怎么做网站教程 用的工具现在的seo1发布页在哪里
  • 不想让网站保存密码怎么做二级域名查询入口
  • 公司网站建设佛山哪家专业网站开发流程是什么
  • ppt做的好的网站注册商标查询官网入口
  • 太原广告公司网站建设网络服务网络推广
  • 哪个网站可以做加工百度竞价sem
  • 企业网站设计与制作营销网络的建设有哪些
  • 广告公司手机网站模板广东培训seo
  • 中企动力做网站多少钱中国第三波疫情将在9月份
  • 网站宣传虚假处罚标准百度怎么进入官方网站
  • 58同城网站招聘怎么做宁波最好的seo外包
  • 网站建设加盟代理百度网站排名查询工具
  • 做一次网站要多少钱做seo用哪种建站程序最好
  • 烟台违建举报网站sem竞价推广托管
  • 深圳福田网站建设公司哪家好网页设计制作网站
  • 荣成做网站秘密入口3秒自动进入
  • dede网站后台设置wap模板目录手机如何制作网站教程
  • 做网站专题的软件企业管理培训免费课程
  • 怎么可以黑网站域名第三方营销策划公司有哪些
  • 网站建设的四个步骤网络优化排名培训
  • 电商网站 内容优化搜索引擎登录入口
  • 免费建立网站的平台抖音seo招商
  • 怎么做试玩平台推广网站1688关键词怎么优化
  • 云服务器2008做网站如何把网站推广出去
  • 移动商城网站建设 深圳全国新冠疫苗接种率
  • 西安网站维保公司沈阳seo排名外包