XXL-JOB通过内网穿透来实现执行器添加

frp内网穿透工具

场景需求: xxl-job-admin在阿里云服务器 xxl-job-core执行器在本地运行的 本地又没有公网ip
frp下载地址

linux

  1. 下载frp 从官网下载解压一样
# 根据系统架构选择版本(x86_64选amd64,ARM选arm64)
wget https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_amd64.tar.gz
tar -zxvf frp_0.52.3_linux_amd64.tar.gz
cd frp_0.52.3_linux_amd64
  1. 编辑配置文件 frps.toml
[common]
bind_port = 7000            # 客户端与服务端通信的端口

# 下面的不配置也行
token = your_secure_token   # 认证令牌(需与客户端一致)
dashboard_port = 7500       # 监控面板端口
dashboard_user = admin
dashboard_pwd = 123456
  1. 启动服务端
./frps -c frps.toml

在这里插入图片描述

  1. 开放阿里云安全组端口 7000(frp通信端口)和 7500(监控面板端口)
  1. 结束任务
    命令行 ctrl + c

windows

  1. 从官网下载解压 frp_0.52.3_windows_amd64.zip
    注意和服务器端版本一致0.52.3
  1. 编辑配置文件 frpc.toml
[common]
server_addr = 阿里云公网IP
server_port = 7000
# 服务端没配置则不用配置
token = your_secure_token  # 与服务端一致

[[proxies]]
name = "xxl-job" # 自定义名称
type = "tcp" # 映射TCP协议
localIP = "127.0.0.1"
localPort = 6666 # 本地执行器端口
remotePort = 6666 # 公网映射端口

注意公网映射端口需要 开放阿里云安全组端口

  1. 启动客户端
frpc.exe -c frpc.toml
  1. 验证穿透
    访问 http://阿里云公网IP:7500,输入账号密码(admin/123456),查看客户端和端口状态。
  1. 结束任务
    命令行 ctrl + c

XXL-JOB(Docker实现)

XXL-JOB 官方地址:http://www.xuxueli.com/xxl-job

1. 启动mysql服务 创建数据库

在这里插入图片描述
在这里插入图片描述

如果表xxl_job_registry导入过程报Specified key was too long; max key length is 767 bytes错误,则将i_g_k_v联合索引相关字段的varchar改小一些即可;

2. 服务器拉取并运行xxl-job-admin镜像

docker run -e PARAMS="--spring.datasource.url=jdbc:mysql://阿里云公网ip:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=UTC --spring.datasource.username=root --spring.datasource.password=123456" -p 8093:8080  -v $PWD/xxldata:/data/applogs --name=xxl-job-admin -d xuxueli/xxl-job-admin:2.3.0

访问容器服务 http://阿里云公网ip:8093/xxl-job-admin

在这里插入图片描述

3. 本地项目引入xxl-job核心依赖

<!-- xxl-job-core -->
<dependency>
    <groupId>com.xuxueli</groupId>
    <artifactId>xxl-job-core</artifactId>
    <version>${project.parent.version}</version>
</dependency>

4. 配置xxl-job信息

在这里插入图片描述

# XXJOB参数配置
xxl:
  job:
    accessToken:
    admin:
      addresses: http://阿里云公网ip:8093/xxl-job-admin
    executor:
      app-name: hebut-stock-job-executor
      address:
      ip:
      # 心跳端口
      port: 6666
      log-path: .\logs
      log-retentiondays: 30
logging:
  config: classpath: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/applogs/xxl-job/xxl-job-executor-sample-springboot.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>
        <encoder>
            <pattern>%date %level [%thread] %logger{36} [%file : %line] %msg%n
            </pattern>
        </encoder>
    </appender>

    <root level="info">
        <appender-ref ref="console"/>
        <appender-ref ref="file"/>
    </root>

</configuration>
package com.hebut.config;

import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * xxl-job config
 */
@Configuration
public class XxlJobConfig {
    private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);

    @Value("${xxl.job.admin.addresses}")
    private String adminAddresses;

    @Value("${xxl.job.accessToken}")
    private String accessToken;

    @Value("${xxl.job.executor.appname}")
    private String appname;

    @Value("${xxl.job.executor.address}")
    private String address;

    @Value("${xxl.job.executor.ip}")
    private String ip;

    @Value("${xxl.job.executor.port}")
    private int port;

    @Value("${xxl.job.executor.logpath}")
    private String logPath;

    @Value("${xxl.job.executor.logretentiondays}")
    private int logRetentionDays;


    @Bean
    public XxlJobSpringExecutor xxlJobExecutor() {
        logger.info(">>>>>>>>>>> xxl-job config init.");
        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;
    }

    /**
     * 针对多网卡、容器内部署等情况,可借助 "spring-cloud-commons" 提供的 "InetUtils" 组件灵活定制注册IP;
     *
     *      1、引入依赖:
     *          <dependency>
     *             <groupId>org.springframework.cloud</groupId>
     *             <artifactId>spring-cloud-commons</artifactId>
     *             <version>${version}</version>
     *         </dependency>
     *
     *      2、配置文件,或者容器启动变量
     *          spring.cloud.inetutils.preferred-networks: 'xxx.xxx.xxx.'
     *
     *      3、获取IP
     *          String ip_ = inetUtils.findFirstNonLoopbackHostInfo().getIpAddress();
     */
}

5. 在任务调度中心添加执行器管理

在这里插入图片描述

6. 编写和测试内网穿透是否成功(定时任务)

@Component
public class StockJob {

    @XxlJob("hebut_job_test")
    public void jobTest(){
        System.out.println("jobTest run.....");
    }
    
}

在这里插入图片描述
在这里插入图片描述

### XXL-JOB任务调度配置 #### 调度中心与执行器配置 为了使XXL-JOB正常工作,需正确设置调度中心地址以及执行器的相关信息。具体来说,在`application.properties`或相应的YAML配置文件中定义Web端口和其他必要的连接参数[^1]。 ```properties # application.properties example xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin xxl.job.executor.appname=xxl-job-executor-sample xxl.job.executor.ip= xxl.job.executor.port=9999 ``` 上述配置指定了调度中心的位置(`admin.addresses`)、执行器的应用名称(`appname`)及其监听IP和端口号(`ip`, `port`)。这些设定对于确保任务能够被正确分发到各个节点至关重要。 #### Spring Boot集成实例 考虑到很多开发者倾向于使用Spring框架构建应用,官方仓库提供了基于Spring Boot的样例工程路径位于 `/xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot` 。此样本展示了如何无缝对接Spring环境下的微服务架构并实现高效的任务管理功能[^3]。 --- ### 常见问题解决方案 当遇到部署或者运行过程中产生的疑问时,可以参考以下几点建议: - **无法访问调度控制台**: 检查防火墙规则是否阻止了外部请求到达指定的服务端口;确认服务器上的应用程序已经启动并且正在监听预期的HTTP接口。 - **任务状态异常(如失败率高)**: 审视日志记录寻找错误提示;评估网络延迟对跨机器通信的影响;优化数据库查询性能以减少超时风险。 - **内网穿透需求处理**: 对于处于私有网络内部的服务想要公开暴露其API给公网用户调用的情况,推荐采用FRP(Fast Reverse Proxy)工具完成反向代理操作。这涉及下载适合目标平台版本的Frp客户端和服务端软件包,并按照文档指导调整相应配置项来建立安全稳定的隧道链接[^4]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值