最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

分布式調(diào)度XXL-Job整合Springboot2.X實戰(zhàn)操作過程(推薦)

 更新時間:2022年04月08日 14:51:12   作者:這是王姑娘的微博  
這篇文章主要介紹了分布式調(diào)度XXL-Job整合Springboot2.X實戰(zhàn)操作,包括定時任務(wù)的使用場景和常見的定時任務(wù),通過本文學習幫助大家該選擇哪個分布式任務(wù)調(diào)度平臺,對此文感興趣的朋友一起看看吧

一、定時任務(wù)的使用場景和常見的定時任務(wù)

某個時間定時處理某個任務(wù)、發(fā)郵件、短信、消息提醒、訂單通知、統(tǒng)計報表等

定時任務(wù)劃分

單機定時任務(wù):
單機的容易實現(xiàn),但應(yīng)用于集群環(huán)境做分布式部署,就會帶來重復執(zhí)行
解決方案有很多比如加鎖、數(shù)據(jù)庫等,但是增加了很多非業(yè)務(wù)邏輯
分布式調(diào)度:
把需要處理的計劃任務(wù)放入到統(tǒng)一的平臺,實現(xiàn)集群管理調(diào)度與分布式部署的定時任務(wù) 叫做分布式定時任務(wù)
支持集群部署、高可用、并行調(diào)度、分片處理

常見定時任務(wù):
單機:Java自帶的java.util.Timer類配置比較麻煩,時間延后問題
單機:ScheduledExecutorService
是基于線程池來進行設(shè)計的定時任務(wù)類,在這里每個調(diào)度的任務(wù)都會分配到線程池里的一個線程去執(zhí)行該任務(wù),并發(fā)執(zhí)行,互不影響

單機:SpringBoot框架自帶
SpringBoot使用注解方式開啟定時任務(wù)
啟動類里面 @EnableScheduling開啟定時任務(wù),自動掃描
定時任務(wù)業(yè)務(wù)類 加注解 @Component被容器掃描
定時執(zhí)行的方法加上注解 @Scheduled(fixedRate=2000) 定期執(zhí)行一次

分布式任務(wù)調(diào)度框架 Elastic-Job/XXL-Job/Quartz

二、如何選擇哪一個分布式任務(wù)調(diào)度平臺

Elastic-job和XXL-JOB對比圖


XXL-Job和Elastic-Job都具有廣泛的用戶基礎(chǔ)和完善的技術(shù)文檔,都可以滿足定時任務(wù)的基本功能需求
xxl-job側(cè)重在業(yè)務(wù)實現(xiàn)簡單和管理方便,容易學習,失敗與路由策略豐富, 推薦使用在用戶基數(shù)相對較少,服務(wù)器的數(shù)量在一定的范圍內(nèi)的場景下使用

elastic-job關(guān)注的點在數(shù)據(jù),添加了彈性擴容和數(shù)據(jù)分片的思路,更方便利用分布式服務(wù)器的資源, 但是學習難度較大,推薦在數(shù)據(jù)量龐大,服務(wù)器數(shù)量多的時候使用

三、xxl-job的設(shè)計思想

將調(diào)度行為抽象形成“調(diào)度中心”公共平臺,而平臺自身并不承擔業(yè)務(wù)邏輯,“調(diào)度中心”負責發(fā)起調(diào)度請求
將任務(wù)抽象成分散的JobHandler,交由“執(zhí)行器”統(tǒng)一管理
“執(zhí)行器”負責接收調(diào)度請求并執(zhí)行對應(yīng)的JobHandler中業(yè)務(wù)邏輯。
因此,“調(diào)度”和“任務(wù)”兩部分可以相互解耦,提高系統(tǒng)整體穩(wěn)定性和擴展性

架構(gòu)系統(tǒng)組成:

調(diào)度中心
負責管理調(diào)度的信息,按照調(diào)度的配置來發(fā)出調(diào)度請求
支持可視化、簡單的動態(tài)管理調(diào)度信息,包括新建、刪除、更新等,這些操作都會實時生效,同時也支持監(jiān)控調(diào)度結(jié)果以及執(zhí)行日志。
執(zhí)行器
負責接收請求并且執(zhí)行任務(wù)的邏輯。任務(wù)模塊專注于任務(wù)的執(zhí)行操作等等,使得開發(fā)和維護更加的簡單與高效

架構(gòu)圖(圖片來源是xxl-job官網(wǎng))

四、XXL-Job具有哪些特性

調(diào)度中心HA(中心式):調(diào)度采用了中心式進行設(shè)計,“調(diào)度中心”支持集群部署,可保證調(diào)度中心HA
執(zhí)行器HA(分布式):任務(wù)分布式的執(zhí)行,任務(wù)執(zhí)行器支持集群部署,可保證任務(wù)執(zhí)行HA
觸發(fā)策略:有Cron觸發(fā)、固定間隔觸發(fā)、固定延時觸發(fā)、API事件觸發(fā)、人工觸發(fā)、父子任務(wù)觸發(fā)
路由策略:執(zhí)行器在集群部署的時候提供了豐富的路由策略,如:第一個、最后一個、輪詢、隨機、一致性HASH、最不經(jīng)常使用LFU、最久未使用LRU、故障轉(zhuǎn)移等等
故障轉(zhuǎn)移:如果執(zhí)行器集群的一臺機器發(fā)生故障,會自動切換到一臺正常的執(zhí)行器發(fā)送任務(wù)調(diào)度
Rolling實時日志的監(jiān)控:支持rolling方式查看輸入的完整執(zhí)行日志
腳本任務(wù):支持GLUE模式開發(fā)和運行腳本任務(wù),包括Shell、python、node.js、php等等類型腳本

五、XXL-Job實戰(zhàn)操作

搭建XXL-Job相關(guān)環(huán)境步驟:
創(chuàng)建數(shù)據(jù)庫腳本
部署XXL-Job服務(wù)端
客戶端項目添加依賴

注意
Client-Server通信,需要網(wǎng)絡(luò)互通才行
所以不能一個是阿里云ECS,一個是本地電腦
建議:本地電腦安裝Docker,或者本地Linux虛擬機安裝Docker部署

本博文是直接拉取的源碼然后在本地win7打包部署的。

步驟一: 進入GitHub - xuxueli/xxl-job at 2.2.0地址,根項目需求拉取對應(yīng)版本代碼

下載壓縮包,這里下載的版本需要跟后面依賴的版本一致,切換到2.2.0版本下載壓縮包。

第二步:

下載后再idea中打開

第三步 打開doc文件夾,找到里面的db tables_xxl_job.sql,然后拿到navicat中運行

數(shù)據(jù)庫腳本(使用mysql8)
xxl_job 的數(shù)據(jù)庫里有如下幾個表
xxl_job_group:執(zhí)行器信息表,用于維護任務(wù)執(zhí)行器的信息
xxl_job_info:調(diào)度擴展信息表,主要是用于保存xxl-job的調(diào)度任務(wù)的擴展信息,比如說像任務(wù)分組、任務(wù)名、機器的地址等等
xxl_job_lock:任務(wù)調(diào)度鎖表
xxl_job_log:日志表,主要是用在保存xxl-job任務(wù)調(diào)度歷史信息,像調(diào)度結(jié)果、執(zhí)行結(jié)果、調(diào)度入?yún)⒌鹊?br />xxl_job_log_report:日志報表,會存儲xxl-job任務(wù)調(diào)度的日志報表,會在調(diào)度中心里的報表功能里使用到
xxl_job_logglue:任務(wù)的GLUE日志,用于保存GLUE日志的更新歷史變化,支持GLUE版本的回溯功能
xxl_job_registry:執(zhí)行器的注冊表,用在維護在線的執(zhí)行器與調(diào)度中心的地址信息
xxl_job_user:系統(tǒng)的用戶表

更改剛拉下代碼配置中的數(shù)據(jù)庫連接:

本地打包啟動:

mvn install

jar -jar win7啟動xxl-job服務(wù)包

第四步:

訪問地址:http://127.0.0.1:8080/xxl-job-admin/ admin/123456

初次進來的運行報表:
以圖形化來展示了整體的任務(wù)執(zhí)行情況
任務(wù)數(shù)量:能夠看到調(diào)度中心運行的任務(wù)數(shù)量
調(diào)度次數(shù):調(diào)度中心所觸發(fā)的調(diào)度次數(shù)
執(zhí)行器數(shù)量:在整個調(diào)度中心中,在線的執(zhí)行器數(shù)量有多少

第五步 開始跟項目代碼整合:

pom.xml依賴引入

 <xxl-job.version>2.2.0</xxl-job.version>
<!-- https://mvnrepository.com/artifact/com.xuxueli/xxl-job-core -->
            <dependency>
                <groupId>com.xuxueli</groupId>
                <artifactId>xxl-job-core</artifactId>
                <version>${xxl-job.version}</version>
            </dependency>

第六步 新增logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="true" scanPeriod="1 seconds">
 
    <contextName>logback</contextName>
    <property name="log.path" value="./data/logs/xxl-job/app.log"/>
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}.%d{yyyy-MM-dd}.zip</fileNamePattern>
        </rollingPolicy>
            <pattern>%date %level [%thread] %logger{36} [%file : %line] %msg%n
            </pattern>
    <root level="info">
        <appender-ref ref="console"/>
        <appender-ref ref="file"/>
    </root>
</configuration>

第七步 application.properties增加配置項

#----------xxl-job配置--------------
logging.config=classpath:logback.xml
#調(diào)度中心部署地址,多個配置逗號分隔 "http://address01,http://address02"
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
 
#執(zhí)行器token,非空時啟用 xxl-job, access token。需要跟xxl-job-master服務(wù)中的同配置一模一樣
xxl.job.accessToken=xxxxx.net168
# 執(zhí)行器app名稱,和控制臺那邊配置一樣的名稱,不然注冊不上去
xxl.job.executor.appname=traffic-app-executor
# [選填]執(zhí)行器注冊:優(yōu)先使用該配置作為注冊地址,為空時使用內(nèi)嵌服務(wù) ”IP:PORT“ 作為注冊地址。
#從而更靈活的支持容器類型執(zhí)行器動態(tài)IP和動態(tài)映射端口問題。
xxl.job.executor.address=
#[選填]執(zhí)行器IP :默認為空表示自動獲取IP(即springboot容器的ip和端口,可以自動獲取,也可以指定),多網(wǎng)卡時可手動設(shè)置指定IP,該IP不會綁定Host僅作為通訊實用;地址信息用于 "執(zhí)行器注冊" 和 "調(diào)度中心請求并觸發(fā)任務(wù)",
xxl.job.executor.ip=
# [選填]執(zhí)行器端口號:小于等于0則自動獲??;默認端口為9999,單機部署多個執(zhí)行器時,注意要配置不同執(zhí)行器端口;
xxl.job.executor.port=9999
#執(zhí)行器日志文件存儲路徑,需要對該路徑擁有讀寫權(quán)限;為空則使用默認路徑
xxl.job.executor.logpath=./data/logs/xxl-job/executor
#執(zhí)行器日志保存天數(shù)
xxl.job.executor.logretentiondays=30

配置圖解:

1.上述 配置xxl.job.accessToken=xxxxx.net168的值 和 xxl-job-2.2.0里面的配置xxl.job.accessToken的值需要一模一樣

2.xxl.job.executor.appname=traffic-app-executor 執(zhí)行器的名稱

需要跟調(diào)度中心執(zhí)行器名稱一模一樣,不然注冊不上去

properties配置加完后,需要增加一個.java的配置讀取類:

package net.wnn.config;
 
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@Slf4j
public class XxlJobConfig {
    @Value("${xxl.job.admin.addresses}")
    private String adminAddresses;
    @Value("${xxl.job.executor.appname}")
    private String appName;
    @Value("${xxl.job.executor.ip}")
    private String ip;
    @Value("${xxl.job.executor.port}")
    private int port;
    @Value("${xxl.job.accessToken}")
    private String accessToken;
    @Value("${xxl.job.executor.logpath}")
    private String logPath;
    @Value("${xxl.job.executor.logretentiondays}")
    private int logRetentionDays;
    @Bean
    public XxlJobSpringExecutor xxlJobSpringExecutor(){
        log.info("》》》》》這是王姑娘的 xxl job 配置初始化 方法");
        XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
        xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
        xxlJobSpringExecutor.setAppname(appName);
        xxlJobSpringExecutor.setIp(ip);
        xxlJobSpringExecutor.setPort(port);
        xxlJobSpringExecutor.setAccessToken(accessToken);
        xxlJobSpringExecutor.setLogPath(logPath);
        xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
        return xxlJobSpringExecutor;
    }
}

第八步 創(chuàng)建你的第一個XXL-Job分布式調(diào)度任務(wù)代碼:

package net.wnn.job;
 
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import net.wnn.service.TrafficService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
@Slf4j
public class TrafficJobHandler {
    @Autowired
    private TrafficService trafficService;
    /**
     * 過期流量包處理
     * @param param
     * @return
     */
    @XxlJob(value = "trafficExpiredHandler",init = "init",destroy = "destroy")
    public ReturnT<String> execute(String param){
        log.info(" execute 任務(wù)方法觸發(fā)成功,刪除過期流量包");
        
        return ReturnT.SUCCESS;
    }
    private void init(){
        log.info(" MyJobHandler init >>>>>");
    private void destroy(){
        log.info(" MyJobHandler destroy >>>>>");
}

這步驟寫完之后,需要啟動下應(yīng)用服務(wù),將IP地址注冊到xxl-job中,大概啟動成功后30S才有。

第九步 :代碼寫完后,就需要進入客戶端進行相關(guān)參數(shù)的配置了

執(zhí)行器管理頁面:
到xxl-job調(diào)度中心里的執(zhí)行器管理->新增
第一步新增執(zhí)行器

Appname:是每一個執(zhí)行器的唯一表示AppName,執(zhí)行器會以周期性為appname進行注冊,為任務(wù)調(diào)度的時候使用
名稱:執(zhí)行器的名稱,因為appname有限制字母與數(shù)字等等組成,可讀性不強,這個名稱就是為了提高執(zhí)行器的可讀性
注冊方式:調(diào)度中心獲取執(zhí)行器地址的方式
自動注冊:執(zhí)行器自動進行執(zhí)行器的注冊,通過底層的注冊表可以動態(tài)的發(fā)現(xiàn)執(zhí)行器機器的地址
手動錄入:人工手動錄入執(zhí)行器的地址信息,多地址使用逗號進行分割,供調(diào)度中心使用
機器地址:“注冊方式”為手動錄入的時候才能使用,支持人工維護執(zhí)行器的地址
點擊保存后可能要等30S左右才回顯示機器的地址

第二步 新建任務(wù)管理:

其中JobHandler需要和代碼中的@xxljob value一模一樣

新建完任務(wù)后就惦記保存,然后再列表頁面的操作中下拉后選擇執(zhí)行一次:

選擇啟動模式的話,就是按設(shè)定的cron表達式執(zhí)行: 上述任務(wù)設(shè)置的是一秒一次

調(diào)度成功日志:

運行報表頁面:

到這分布式調(diào)度XXL-Job就整合完畢啦~

到此這篇關(guān)于分布式調(diào)度XXL-Job整合Springboot2.X實戰(zhàn)操作的文章就介紹到這了,更多相關(guān)Springboot2.X整合XXL內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

保靖县| 吴忠市| 左权县| 丹阳市| 灵台县| 遵义县| 锦屏县| 九台市| 沙洋县| 合阳县| 岳普湖县| 甘德县| 苏州市| 宁都县| 上高县| 恩平市| 紫云| 图们市| 连南| 昭觉县| 陆河县| 阜南县| 资兴市| 永修县| 东城区| 天镇县| 民丰县| 内江市| 耿马| 宝坻区| 岳阳市| 固阳县| 台前县| 新竹市| 朝阳县| 宜章县| 平阴县| 名山县| 麦盖提县| 南宫市| 清苑县|