Skip to content
Tang Yuan edited this page Jul 16, 2022 · 30 revisions

一. SDK使用指南

springboot应用

1.依赖

maven

<!--最新release版本0.0.13-->
<dependency>
    <groupId>xyz.hellothomas</groupId>
    <artifactId>jedi-client</artifactId>
    <version>0.0.13</version>
</dependency>

gradle

implementation group: 'xyz.hellothomas', name: 'jedi-client', version: '0.0.13'

2.配置

jedi:
    enable: true #必配置,不打开无法使用管理平台
    mode: 0 #模式,默认0 0:监控+参数动态配置 1:仅监控 2:仅参数动态配置 3:脱机模式(仅使用本地配置)
    #mode非脱机模式时,url、namespace、app-id必配置
    url: http://jedi-config.hellothomas.xyz:8081 #config的地址
    namespace: dev #环境
    app-id: my-netty #应用名
    order: 0 #jedi监控切面优先级,默认0
    executors: jedi-default-executor,test-pool1 #多个线程池使用逗号隔开,若不配置使用默认线程池jedi-default-executor
    #以下为每个线程池默认配置,可不配置,具体含义可以参考jdk java.util.concurrent.ThreadPoolExecutor
    jedi-default-executor:
        core-pool-size: 10
        max-pool-size: 20
        keep-alive-seconds: 60
        queue-capacity: 1000
        ticker-cycle: 5000 #本客户端向服务端打点周期ms
        allow-core-thread-time-out: false
        rejected-execution-handler: java.util.concurrent.ThreadPoolExecutor$AbortPolicy
    test-pool1:
        core-pool-size: 10
        max-pool-size: 20
        keep-alive-seconds: 60
        queue-capacity: 1000
        ticker-cycle: 5000 #本客户端向服务端打点周期ms
        allow-core-thread-time-out: false
        # 若需使用JDK CallerRunsPolicy,请使用JediCallerRunsPolicy替换
        # xyz.hellothomas.jedi.core.internals.executor.JediThreadPoolExecutor$JediCallerRunsPolicy
        rejected-execution-handler: java.util.concurrent.ThreadPoolExecutor$AbortPolicy
  #任务持久化相关配置
  persistence:
    enable: true #默认false,开启后结合@JediAsync持久化任务
    retryer:
      enable: true #默认false
      path: /jedi/tasks/retry #重试时暴露的requestMapping path
    recover:
      enable: true #默认false
      data-source-names: datasource1,datasource2 #需要自恢复的数据源,单数据源应用可不配置
      executor: jedi-default-executor #自恢复任务本身的执行器,不配置时直接新建线程处理

3.代码

示例代码

// 当容器只有一个JediThreadPoolExecutor时,executorName可不配置
// taskName不配置时,默认值jedi-default-task,支持SpEL
// taskExtraData可不配置,支持SpEL
// persistent默认false,是否持久化
// dataSourceName指定持久化的数据源,单数据源应用可不配置
// recoverable默认false,是否需要故障自恢复,即重启时自动执行数据库中未执行任务
// traceable默认true,是否需要异步链路,使用时需实现AsyncTraceFactory替换默认实现
@JediAsync(executorName = "xx0", taskName = "'xx1", taskExtraData = "'xx2'", persistent = true, dataSourceName = 
        "xx3", recoverable = true, traceable = true)

4.数据库

使用任务持久化功能时,需要建JEDI_TASK_EXECUTION表。

建表脚本在jedi-client依赖包中resources/script目录下,mysql执行schema-mysql.sql,oracle执行schema-oracle.sql。

二. 设计与实现

功能设计图

功能设计图

系统架构图

系统架构图

三. 平台部署指南

数据库

部署两个数据库jedi_config、jedi_consumer(Mysql8.0+) 分别执行doc/db/tables_jedi_config.sql,doc/db/tables_jedi_consumer.sql建表

KAFKA

性能收集推荐使用KAFKA,部署KAFKA

创建4个topic,分别用作线程池打点,任务数据上报,线程池关闭,自定义通知。命名可自定义,jedi-consmer中需配置一致。

executor-ticker-topic: executor-ticker executor-task-topic: executor-task executor-shutdown-topic: executor-shutdown custom-notification-topic: custom-notification

应用

1.jedi-config

修改配置文件

swagger:
  enable: true #无需swagger,则置为false,以下无需配置
  base-package: xyz.hellothomas.jedi.config.api
  title: Jedi-Config-Service
  host: 127.0.0.1:8081 #替换config域名
  description: Jedi-Config服务
  version: 1.0.0
  contact:
    name: Thomas
    url: https://www.hellothomas.xyz
    email: tyty2017@qq.com
    
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/jedi_config?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true
      &serverTimezone=Asia/Shanghai #替换数据库url
    username: root #替换数据库用户名
    password: 123456 #替换数据库密码

config-service:
  cache-enabled: true
  consumer-url: http://127.0.0.1:8080 #替换consumer域名
  aspect.logging.enable: true

打包

mvn clean package -pl jedi-config -am

2.jedi-admin

修改配置文件

swagger:
  enable: true #无需swagger,则置为false,以下无需配置
  base-package: xyz.hellothomas.jedi.admin.api
  title: Jedi-Admin-Service
  host: 127.0.0.1:8082 #替换admin域名
  description: Jedi-Admin服务
  version: 1.0.0
  contact:
    name: Thomas
    url: https://www.hellothomas.xyz
    email: tyty2017@qq.com

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/jedi_config?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true
      &serverTimezone=Asia/Shanghai #替换数据库url
    username: root #替换数据库用户名
    password: 123456 #替换数据库密码

admin-service:
  aspect.logging.enable: true
  consumer-url: http://127.0.0.1:8080 #替换consumer域名
  super-admin: admin #超级管理员

打包

mvn clean package -pl jedi-config -am

3.jedi-consmer

修改配置文件

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/jedi_consumer?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true
      &serverTimezone=Asia/Shanghai #替换数据库url
    username: root #替换数据库用户名
    password: 222222 #替换数据库密码

swagger:
  enable: true #无需swagger,则置为false,以下无需配置
  base-package: xyz.hellothomas.jedi.consumer.api
  title: Jedi-Consumer-Service
  host: 127.0.0.1:8080 #替换consumer域名
  description: Jedi-Consumer服务
  version: 1.0.0
  contact:
    name: Thomas
    url: https://www.hellothomas.xyz
    email: tyty2017@qq.com

consumer:
  type: HTTP #若配置为KAFKA,则需配置spring.kafka.*
  url: http://127.0.0.1:8080 #替换consumer域名
  executor-ticker-topic: executor-ticker
  executor-task-topic: executor-task
  executor-shutdown-topic: executor-shutdown
  custom-notification-topic: custom-notification

consumer-service:
  aspect.logging.enable: true

打包

mvn clean package -pl jedi-consumer -am

4.jedi-ui

npm run build #生成dist文件夹

dockerfile
FROM nginx:1.21

MAINTAINER hellothomas

ENV TZ=Asia/Shanghai

COPY dist/ /usr/local/nginx/html/ #将编译好的dist文件放置nginx目录下
COPY nginx.conf /etc/nginx/nginx.conf #将源码中nginx.conf替换nginx中同名文件

EXPOSE 8080

RUN echo 'echo init ok!'