Skip to content

Q&A

🌈常见问题列表

我们搜集了小伙伴们最关心的关于EasyRetry的一些问题,在这里我们进行答疑解惑,希望能帮助到您 如下您还有其他问题,您可以加入群聊,我们有专门的人员为您答疑解惑

SnailJob的分布式重试和SpringRetry的区别是什么?

这个问题我们在系统介绍中已经做出来解答SnailJob的分布式重试的核心优势

为什么日志显示上报成功,但是控制台没有发现任务呢?

最近接入的小伙伴都提出了这个问题,因为SnailJob为了防止上报大量重复数据而设计了,幂等机制

执行批次第一次看到不知道是啥意思?

批次: 是指一次任务执行调度产生的所有任务项的集合, 是调度的基本单位,包含多个任务项。 比如集群模式下,3个客户端集群,一次调度就会产生3个任务项,这个三个任务项就是一个批次.

什么是任务项?

任务项: 是批次中的单个执行单元, 每个任务项对应于一次客户端调度或操作, 同时任务项可以记录执行的详细信息,比如执行结果、执行状态等。

客户端注册不到服务端问题排查思路?

1、先检查配置的服务端 host、port、namespace、group、token是否都正确;

2、检查client、server的通信协议是否一致;

3、如果使用grpc协议通信,且server的grpc端口是nginx代理出来的,检查nginx配置是否按照grpc协议代理;

4、如果使用grpc协议通信,检查server和client的 protobuf 版本是否一致;

5、通过maven依赖检查工具,检查是否有其他依赖使用了protobuf-java,推荐使用IDEA自带的Analyze Dependencies,如果出现非snail-job引入的protobuf-java,即使版本号一样,也建议手工排除该依赖。

6、在lib分离打包方式中,如果某些依赖中包含protobuf-java,即使版本一样也可能会导致无法注册到服务端,且手工排除该依赖也无效,需要将protobuf-java相关的依赖和主程序打包到一起,参考以下方法:

新建一个maven模块,引入定时任务模块;

通过exclude打包时排除定时任务模块;

xml
<profile>
  <id>zip</id>
  <build>
      <plugins>
        <plugin>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-maven-plugin</artifactId>
          <configuration>
              <mainClass>com.example.snailjob.SnailJobSpringbootApplication</mainClass>
              <layout>ZIP</layout>
              <excludes>
                <exclude>
                  <groupId>com.opensnail</groupId>
                  <artifactId>snailjob-demo</artifactId>
                </exclude>
              </excludes>
          </configuration>
          <executions>
              <execution>
                <goals>
                  <goal>repackage</goal>
                </goals>
              </execution>
          </executions>
        </plugin>
      </plugins>
  </build>
</profile>

打包后手动将定时任务模块打包的jar包放到lib目录下

在K8s环境下启动Pod出现 Failed to bind properties under 'snail-job' to int

容器环境默认 SNAIL_JOB_SERVER_PORT 读取为 tcp://10.43.41.77:8080,覆盖了 application.yml 配置。

解决办法:

yaml
    spec:
      containers:
        - name: snail-job-server
          env:
            - name: TZ
              value: "Asia/Shanghai"
            - name: JAVA_OPTS
              value: "-Djava.security.egd=file:/dev/./urandom -XX:+HeapDumpOnOutOfMemoryError -XX:+UseZGC"
            - name: SERVER_PORT  
              value: "8080"
            - name: SNAIL_JOB_SERVER_PORT # 指定运行参数
              value: "17888"
          ports:
            - containerPort: 8080  # 容器暴露的端口
            - containerPort: 17888  # 另一个端口
          command: ["java"] 
          args:
            - "-Djava.security.egd=file:/dev/./urandom"
            - "-XX:+HeapDumpOnOutOfMemoryError"
            - "-XX:+UseZGC"
            - "-jar"
            - "app.jar"
            - "--server.port=$(SERVER_PORT)"