xxl-job作為服務(wù),之前使用都是每個(gè)服務(wù)配置信息,采用方法的形式,xxl-job作為服務(wù)的話,只需要進(jìn)行配置
配置信息
## xxljob 配置
xxl:
job:
enabled: false
# 執(zhí)行器通訊TOKEN [選填]:非空時(shí)啟用
# accessToken:
# 單個(gè)地址或多個(gè)地址逗號隔開或 注冊中心服務(wù)名
adminAddress: http://127.0.0.1:8898/xxl-job-admin
# 調(diào)度中心的 context-path:
# jobAdminContextPath: /job-admin
### 執(zhí)行器AppName [選填]:執(zhí)行器心跳注冊分組依據(jù);為空則關(guān)閉自動(dòng)注冊
appname: ${spring.application.name}
### 執(zhí)行器注冊 [選填]:優(yōu)先使用該配置作為注冊地址,為空時(shí)使用內(nèi)嵌服務(wù) ”IP:PORT“ 作為注冊地址。
### 從而更靈活的支持容器類型執(zhí)行器動(dòng)態(tài)IP和動(dòng)態(tài)映射端口問題。
# address:
# ip:
# port: 9999
# 執(zhí)行器運(yùn)行日志文件存儲(chǔ)磁盤路徑
# logpath: logs/xxl-job
# 執(zhí)行器日志文件保存天數(shù)
logRetentionDays: 180
xxl-job創(chuàng)建任務(wù)
xxl-job相關(guān)輸入
clientClass 實(shí)現(xiàn)類
clientMethod 調(diào)用的方法
加參數(shù),比如用戶為張三,年齡18
,"name":"張三","age":18
JobHandler:CommonXxlJobHandler
任務(wù)參數(shù):{"clientClass":"com.sxcoal.station.common.client.admin.JournalismAdminClient","clientMethod":"getNewsHitsTopTenList","type":1}
?
JobHandler 如何通信的呢
CommonXxlJobHandler 作為一個(gè)微服務(wù)的項(xiàng)目,去做了xxl-job的整合,通過反射調(diào)用,核心代碼文章來源:http://www.zghlxwxcb.cn/news/detail-736762.html
package com.sxcoal.station.job.executor.config;
import com.alibaba.fastjson.JSONObject;
import com.sxcoal.common.utils.SpringContextUtils;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.lang.reflect.Method;
@Slf4j
@Component
@RequiredArgsConstructor
public class CommonXxlJob {
@XxlJob("CommonXxlJobHandler")
public void CommonXxlJobHandler() throws Exception {
XxlJobHelper.log("通用任務(wù)執(zhí)行:{}", XxlJobHelper.getJobParam());
log.info("通用任務(wù)執(zhí)行:{}", XxlJobHelper.getJobParam());
JSONObject jsonObject = JSONObject.parseObject(XxlJobHelper.getJobParam());
Object object = SpringContextUtils.getBean(jsonObject.getString("clientClass"));
Method method = object.getClass().getMethod(jsonObject.getString("clientMethod"), JSONObject.class);
log.info("通用任務(wù)執(zhí)行 client 調(diào)用返回:{}", method.invoke(object, jsonObject));
}
}
針對處理的類(DailyPriceClient內(nèi)容)
ServiceNameConstants.JOURNALISM_ADMIN 代表哪個(gè)服務(wù)文章來源地址http://www.zghlxwxcb.cn/news/detail-736762.html
package com.sxcoal.station.common.client.admin;
import com.alibaba.fastjson.JSONObject;
import com.sxcoal.common.domain.RespResult;
import com.sxcoal.common.model.mq.CommonMessageDto;
import com.sxcoal.station.common.constant.ServiceNameConstants;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@FeignClient(
value = ServiceNameConstants.JOURNALISM_ADMIN
, contextId = "journalismAdmin"
, fallbackFactory = JournalismAdminClientFallbackFactory.class
)
public interface JournalismAdminClient {
//新聞熱榜定時(shí)任務(wù)
@PostMapping(value = "/news/getNewsHitsTopTenList")
RespResult<?> getNewsHitsTopTenList(@RequestBody JSONObject json);
}
?異常收集(方法和內(nèi)容一樣,做異常處理)
package com.sxcoal.coalresource.common.client.fallback.admin;
import com.sxcoal.coalresource.common.client.admin.CombinationPackageMiddleClient;
import com.sxcoal.common.domain.RespEnum;
import com.sxcoal.common.domain.RespResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
import java.util.List;
@Slf4j
@Component
public class CombinationPackageMiddleFallbackFactory implements FallbackFactory<CombinationPackageMiddleClient> {
@Override
public CombinationPackageMiddleClient create(Throwable cause) {
log.error("{} Client 調(diào)用異常: {}", "combinationPackageMiddleService", cause.getMessage(), cause);
return new CombinationPackageMiddleClient() {
@Override
public RespResult<List<Long>> getCombinationIdListBySingleId(Long singleId) {
return RespResult.error(RespEnum.SERVICE_FALLBACK_ERROR.getMessage(), cause.getMessage());
}
};
}
}
服務(wù)內(nèi)容(實(shí)現(xiàn)的功能)
@ApiOperation(value = "新聞瀏覽量前10列表")
@PostMapping(value = "/getNewsHitsTopTenList")
public RespResult<?> getNewsHitsTopTenList(@RequestBody JSONObject jsonObject) {
String flagStr = newsService.getNewsHitsTopTenList(jsonObject.getInteger("type"));
if (StringUtils.equals("true", flagStr)) {
return RespResult.ok(null, "成功");
} else if (StringUtils.equals("false", flagStr)) {
return RespResult.error();
} else if (StringUtils.equals("news null", flagStr)) {
return RespResult.error("查詢新聞點(diǎn)擊量前10的數(shù)據(jù)結(jié)果為空!");
}
return null;
}
到了這里,關(guān)于xxl-job服務(wù)化的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!