• 服务通用配置

    几乎每个服务都会有的配置,如端口、服务名、连接信息等配置。

    服务端口等配置

    server:
      # 服务端口
      port: 8030
    management:
      server:
        port: 8031
      endpoints:
        web:
          exposure:
            # 需要开放的 Actuator 监控端点,默认开放所有
            include: '*' 
    
    spring:
      application:
        # 服务名
        name: hzero-platform 
      profiles:
         # 激活环境,开发环境设置为 dev 时,支持在返回信息中返回异常栈信息
        active: default
    

    数据库连接信息

    spring:
      ## 数据库连接信息
      datasource: 
        # MySql:jdbc:mysql://db.hzero.org:3306/hzero_platform?useUnicode=true&characterEncoding=utf-8&useSSL=false
        # Oracle:jdbc:oracle:thin:@db.hzero.org:1521:XE
        # SqlServer:jdbc:sqlserver://db.hzero.org:1433;DatabaseName=hzero_platform
        url: jdbc:mysql://db.hzero.org:3306/hzero_platform?useUnicode=true&characterEncoding=utf-8&useSSL=false
        username: xxxxx
        password: xxxxx
        hikari:
          # 连接池最小空闲连接数
          minimum-idle: 20
          # 连接池允许的最大连接数
          maximum-pool-size: 200
          # 等待连接池分配连接的最大时长(毫秒)
          connection-timeout: 30000
    
      # redis 配置  
      redis:
        host: redis.hzero.org
        port: 6379
        database: 1
        jedis:
          pool:
            # 资源池中最大连接数
            # 默认8,-1表示无限制;可根据服务并发redis情况及服务端的支持上限调整
            max-active: 50
            # 资源池运行最大空闲的连接数
            # 默认8,-1表示无限制;可根据服务并发redis情况及服务端的支持上限调整
            # 一般建议和max-active保持一致,避免资源伸缩带来的开销
            max-idle: 50
            # 当资源池连接用尽后,调用者的最大等待时间(单位为毫秒)
            # 默认 -1 表示永不超时,设置5秒
            max-wait: 5000
    

    配置中心客户端

    spring:
      # 配置中心
      cloud:
        config:
          # 是否启用配置中心
          # 若启用,服务启动时会自动向 hzero-config 拉去服务配置信息
          enabled: true
           # 快速失败,为 true 时,如果从配置中心获取配置失败,则无法启动服务
          fail-fast: false
          # 配置中心地址
          uri: http://dev.hzero.org:8010
          # 重试配置
          retry: 
            maxAttempts: 6
            multiplier: 1.1
            maxInterval: 2000
          label: 
    

    本地多网卡配置

    spring:
      cloud:
        inetutils:
          # 设置首选网卡,对于本机有多块网卡的情况,可以设置首选网卡来注册
          # 指定忽略的网卡
          ignored-interfaces[0]: lo
          # 选择注册的网段
          preferred-networks[0]: 192.168
    

    容器 undertow

    # 服务器配置,使用 undertow 
    server:
      undertow:
        # 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接
        # 默认值为8,建议设置每个CPU核心一个线程
        io-threads: 4
        # 阻塞任务线程池, 当执行类似servlet请求阻塞操作, undertow会从这个线程池中取得线程
        # 默认等于 io-threads*8,它的值设置取决于系统的负载,可适当调大该值
        worker-threads: 128
        # 每块buffer的空间大小,越小空间被利用越充分
        # 不要设置太大,以免影响其他应用,合适即可
        buffer-size: 1024
        # 是否分配的直接内存(NIO直接分配的堆外内存)
        # 默认false
        direct-buffers: true
        # HTTP POST请求最大的大小
        # 默认0,无限制,可设置10M
        max-http-post-size: 10485760
    

    Eureka 客户端

    eureka:
      instance:
        # 以IP形式注册到注册中心,如果为false,将以主机名称注册
        preferIpAddress: true
        # Eureka 客户端向服务端发送心跳的间隔时间
        leaseRenewalIntervalInSeconds: 10 
        # Eureka 服务端在收到最后一次心跳后等待的时间上限
        leaseExpirationDurationInSeconds: 30 
        metadata-map: 
          # 服务版本,在 swagger 中看到的版本号就是此处的版本号
          VERSION: 0.11.0 
      client:
        serviceUrl:
          # 注册中心地址,多个注册中心用逗号隔开
          defaultZone: http://dev.hzero.org:8000/eureka
        # 从 eureka 服务端获取注册信息的间隔时间,单位为秒  
        registryFetchIntervalSeconds: 10 
    

    数据库模式

    数据库所有者模式,例如 SqlServer 下的 dbo/guest,配置后,自动加上所有者,如:hzero-platform.dbo.fd_icon

    hzero:
      data:
        permission:
          db-owner: 
    

    熔断&超时时间设置

    # zuul 超时时间,仅在网关层设置,可设置大一点
    zuul:
      host:
        connect-timeout-millis: 70000
        socket-timeout-millis: 70000
    
    # 是否启用 feign
    feign:
      hystrix:
        enabled: true
    
    hystrix:
      threadpool:
        default:
          # 执行命令线程池的核心线程数,也是命令执行的最大并发量;默认10
          coreSize: 1000
          # 最大执行线程数
          maximumSize: 1000
      command:
        default:
          execution:
            isolation:
              thread:
                # HystrixCommand 执行的超时时间,超时后进入降级处理逻辑。 默认 1000 毫秒,最高设置 2000足矣。
                # 如果超时,首先看能不能优化接口相关业务、SQL查询等
                # 不要盲目加大超时时间,否则会导致线程堆积过多,hystrix 线程池卡死,最终服务不可用。
                timeoutInMilliseconds: 70000
    
    ribbon:
      # 客户端读取超时时间,超时时间要小于Hystrix的超时时间,否则重试机制就无意义了
      ReadTimeout: 30000
      # 客户端连接超时时间
      ConnectTimeout: 1000
      # 访问实例失败(超时),允许自动重试,设置重试次数
      # 失败后会更换实例访问,请一定确保接口的幂等性,否则重试可能导致数据异常。
      OkToRetryOnAllOperations: true
      MaxAutoRetries: 0
      MaxAutoRetriesNextServer: 1
    

    服务路由配置

    在 config/ 包下建一个 ExtraDataManager 的子类来描述该服务的路由信息。服务注册成功后,hzero-admin 会自动刷新路由到数据库,并通知 gateway 服务拉取最新的路由。

    用户访问配置

    在服务启动类上,一般都会加上 @EnableChoerodonResourceServer 注解,该注解的主要功能是开启一个过滤器JwtTokenFilter,解析 Jwt_Token,得到用户信息,因此可以在程序中通过 DetailsHelper.getUserDetails() 得到当前访问的用户信息。同时,该过滤器默认对/v1/*接口生效,如果其它前缀的路由也需要用户信息,需手动配置。

    hzero:
      resource:
        pattern: /v1/*,/v2/*
    

    服务名设置

    对于继承 HZERO 开发的服务,如果要修改 hzero 服务名,需要在所有服务中配置新的服务名称。HZeroService 里维护了所有HZERO服务的服务简码及名称等信息,服务名称以变量形式表示,对于服务中的feign调用一般都使用 HZeroService 里的服务常量表示,因此如果改动了服务名称,需要在配置文件里加上相应的配置。

    服务中需要用到服务简码、服务名称、服务 RedisDB 的情况下,可以使用 HZeroService 中配置的常量。

    hzero:
      service:
        # 注册中心
        register:
          name: hzero-register
          redis-db: 1
          port: 8000
        # 网关服务  
        gateway:
          name: hzero-gateway
          redis-db: 4
          port: 8080
        # 配置中心  
        config:
          name: hzero-config
          redis-db: 1
          port: 8010
        # 认证服务  
        oauth:
          name: hzero-oauth
          redis-db: 3
          port: 8020
        # IAM 身份服务  
        iam:
          name: hzero-iam
          redis-db: 1
          port: 8030
        # 事务服务  
        asgard:
          name: hzero-asgard
          port: 8040
          redis-db: 4
        # 文档测试服务  
        swagger:
          name: hzero-swagger
          port: 8050
          redis-db: 4
        # 平台服务  
        platform:
          name: hzero-platfor
          port: 8100
          redis-db: 1
        # 文件服务  
        file:
          name: hzero-file
          port: 8110
          redis-db: 1
        # 消息服务  
        message:
          name: hzero-message
          port: 8120
          redis-db: 1
        # 调度服务  
        scheduler:
          name: hzero-scheduler
          port: 8130
          redis-db: 1
        # 导入服务  
        import:
          name: hzero-import
          port: 8140
          redis-db: 1
        # 接口服务  
        interface:
          name: hzero-interface
          port: 8150
          redis-db: 1
        # 数据传输服务  
        transfer:
          name: hzero-transfer
          port: 8180
          redis-db: 1
        # 报表服务  
        report:
          name: hzero-report
          port: 8210
          redis-db: 1
        # 工作流(Plus)  
        workflow-plus:
          name: hzero-workflow-plus
          port: 8220
          redis-db: 1
        # 自然语言处理  
        nlp:
          name: hzero-nlp
          port: 8230
          redis-db: 1
        # 监控服务  
        monitor:
          name: hzero-monitor
          port: 8260
          redis-db: 1
        # 支付服务  
        pay:
          name: hzero-pay
          port: 8250
          redis-db: 1