github.com/wfusion/gofusion@v1.1.14/test/config/configs/app_zh.yml (about)

     1  base:
     2    # debug 模式, 支持开启 gorm 和 gin 的 debug 模式
     3    # 注: 和 db 配置中的 log 配置冲突, 优先开启 gorm 原生 debug
     4    debug: true
     5  
     6    # 应用或系统名称, 同一运行环境不重名即可
     7    app: gofusion
     8  
     9    # 加密配置
    10    crypto:
    11      # 本配置文件的加密
    12      config:
    13        # 密码模式, 支持 ecb, cbc, cfb, ctr, ofb, gcm
    14        mode: gcm
    15        # 加密算法, 支持 des, 3des, aes, rc4, chacha20poly1305, xchacha20poly1305, sm4
    16        algorithm: sm4
    17        # 对称密钥 base64
    18        key_base64: MTIzNDU2NzhhYmNkZWZnaA== # 12345678abcdefgh
    19        # 是否混淆对称密钥, 开启后拿到本配置文件中的加密配置和密文也无法直接解密, 对应密文也需要使用 fus 工具进行混淆加密才可正常解析
    20        confuse_key: true
    21        # 密文格式, 加密后的密文若经过可打印编码则需要配置, 支持 hex, base32, base32-hex, base64, base64-url, base64-raw, base64-raw-url
    22        output_algorithm: base64
    23      # 自定义加密配置, 对应结构体字段中配置 tag: `encrypted:"gorm"`, 即可对配置内容进行对应解析
    24      custom:
    25        gorm:
    26          mode: gcm
    27          algorithm: sm4
    28          key_base64: MTIzNDU2NzhhYmNkZWZnaA== # 12345678abcdefgh
    29          confuse_key: true
    30          output_algorithm: base64
    31  
    32    # http 配置
    33    http:
    34      # 开启端口
    35      port: 9001
    36      # 开启 tls 所需证书的文件路径
    37      cert: ""
    38      # 开启 tls 所需证书的文件路径
    39      key: ""
    40      # tls, 开启后且 <next_protos> 选择 h2 则 gofusion/http 中定义的零拷贝 gin 函数会退化为内存流拷贝
    41      tls: false
    42      # 协议, 优先采用靠前者, 支持 h2, http/1.1
    43      next_protos: [http/1.1]
    44      # console 是否以彩色输出, 影响日志可读性
    45      colorful_console: false
    46      # 可配置 http response body: {"code": 0, "message": "ok", "data": {}} 中成功返回时 code 的值
    47      success_code: 0
    48      # 可配置 http response body: {"code": -1, "message": "ok", "data": {}} 中失败返回时 code 的值
    49      error_code: -1
    50      # 是否开启 pprof, 可使用 http 端口获取 golang 程序状态
    51      pprof: false
    52      read_timeout: 10s
    53      write_timeout: 10s
    54      # 是否开启日志, 可在程序运行时实时切换生效
    55      enable_logger: true
    56      # 日志配置, 对应 log 组件中的名称
    57      log_instance: default
    58      # 可配置自定义的实现 resty.logger.Interface 接口的日志对象
    59      # 默认配置的日志对象可打印日志到 log.<log_instance> 中配置的日志中
    60      # 自定义配置可能因为没有直接引用导致找不到对象, 所以业务配置时需要定义对应对象或函数的全局 reflect.Type 类型避免编译器忽略
    61      logger: github.com/wfusion/gofusion/log/customlogger.httpLogger
    62      # xss 防御中间件白名单
    63      xss_white_url_list: [ "" ]
    64      # asynq 监控配置
    65      asynq:
    66          # http 路径
    67        - path: /asynq
    68          # asynq 依赖的 broker 实例名称, 对应 instance_type 的配置名
    69          instance: default
    70          # asynq 依赖的 broker 类型
    71          instance_type: redis
    72          readonly: false
    73          prometheus_address: ""
    74      # http clients 配置
    75      clients:
    76        # 配置名称
    77        default:
    78          # 是否开启 mock, 结合 github.com/jarcoal/httpmock 使用, 可见 test/http/cases/client_test.go 中的用法
    79          mock: true
    80          # 请求超时时间
    81          timeout: 30s
    82          dial_timeout: 30s
    83          dial_keepalive_time: 30s
    84          force_attempt_http2: true
    85          tls_handshake_timeout: 10s
    86          disable_compression: false
    87          max_idle_conns: 100
    88          max_idle_conns_per_host: 100
    89          max_conns_per_host: 0
    90          idle_conn_timeout: 90s
    91          expect_continue_timeout: 1s
    92          # 重试次数
    93          retry_count: 0
    94          # 重试间隔
    95          retry_wait_time: 100ms
    96          # 最大重试时间
    97          retry_max_wait_time: 2s
    98          # 重试条件, 可自定义可重试的条件
    99          # 可配置自定义的实现 github.com/go-resty/resty/v2.RetryConditionFunc 函数声明的对象
   100          # 自定义配置可能因为没有直接引用导致找不到对象, 所以业务配置时需要定义对应对象或函数的全局 reflect.Type 类型避免编译器忽略
   101          retry_condition_funcs: [ ]
   102          # 重试回调, 可自定义触发重试时的条件
   103          # 可配置自定义的实现 github.com/go-resty/resty/v2.OnRetryFunc 函数声明的对象
   104          # 自定义配置可能因为没有直接引用导致找不到对象, 所以业务配置时需要定义对应对象或函数的全局 reflect.Type 类型避免编译器忽略
   105          retry_hooks: [ ]
   106      # http metrics 配置
   107      metrics:
   108        # 从请求 header 中提取需要在打点中作为 label 上报的 kv
   109        header_labels: [ ]
   110    # 国际化配置
   111    i18n:
   112      # 默认语言, 支持 golang.org/x/text/language 中定义的语言
   113      default_lang: zh
   114  
   115    # 协程配置
   116    goroutine_pool:
   117      # 配置通过本组件中 Go, Loop, Promise, Pool 的最大协程数, 可控制业务调用中 goroutine 的总量
   118      max_routine_amount: -1
   119      # 优雅退出时单个 pool 最大等待时间
   120      max_release_time_per_pool: 3h
   121      # 主要用于调试和单测测试, 可强制 Go, Loop, Promise, Pool 同步执行
   122      force_sync: false
   123      # Pool 是否开启日志记录, 可在程序运行时实时切换生效
   124      enable_logger: false
   125      # 可配置自定义的实现 ants.Logger 接口的日志对象
   126      # 默认配置的日志对象可打印日志到 log.<log_instance> 中配置的日志中
   127      # 自定义配置可能因为没有直接引用导致找不到对象, 所以业务配置时需要定义对应对象或函数的全局 reflect.Type 类型避免编译器忽略
   128      logger: github.com/wfusion/gofusion/log/customlogger.routineLogger
   129      # 日志配置, 对应 log 组件中的名称
   130      log_instance: default
   131  
   132    # 打点配置
   133    metrics:
   134      # 打点配置名称
   135      prometheus:
   136        # 远端服务类型, 目前支持 mock, prometheus, 其中 mock 为单测中使用
   137        type: prometheus
   138        # 打点方式, 支持 push, pull
   139        # 注: 使用 pull 时需要使用 metrics.HttpHandler 自行注册 http 开启接口
   140        mode: push
   141        # type 为 push 时有效, 推送的间隔时间, 要求 < 60s
   142        interval: 15s
   143        # 定义 label 常量 kv
   144        labels:
   145          constant_key: constant_value
   146        # 远端连接配置
   147        endpoint:
   148          # 连接地址
   149          addresses: [ prometheus:9091 ]
   150        # 所有打点默认添加 _service, _service_hostname, _service_ip labels
   151        enable_service_label: true
   152        # 自动采集上报各个组件的打点, 目前包含 db, redis, mongo, http 以及 routine 组件:
   153        # redis_idle,redis_total,redis_stale,redis_hits,redis_misses,redis_latency
   154        # mongo_idle,mongo_inuse,mongo_total,mongo_latency
   155        # db_idle,db_total,db_inuse,db_wait_count,db_wait_duration,db_latency
   156        # runtime_alloc_bytes,runtime_sys_bytes,runtime_malloc_count,runtime_free_count,runtime_heap_objects,
   157        # runtime_total_gc_pause_ns,runtime_total_gc_runs
   158        enable_internal_metrics: true
   159        # 打点队列长度限制, 限制因为高并发打点所占用的内存大小, 默认为 16384
   160        # 到达限制时默认丢弃打点, 可通过 metrics.WithTimeout hang 住保证打点, 或 metrics.Timeout 选项设置业务容忍时间
   161        queue_limit: 16384
   162        # 打点队列处理并发度, 限制因为高并发打点所占用的 cpu, 默认取 runtime.NumCPU()
   163        queue_concurrency: 0
   164        # 是否开启日志, 可在程序运行时实时切换生效
   165        enable_logger: true
   166        # 日志配置, 对应 log 组件中的名称
   167        log_instance: default
   168        # 可配置自定义的实现 metrics.logger.Interface 接口的日志对象
   169        # 默认配置的日志对象可打印日志到 log.<log_instance> 中配置的日志中
   170        # 自定义配置可能因为没有直接引用导致找不到对象, 所以业务配置时需要定义对应对象或函数的全局 reflect.Type 类型避免编译器忽略
   171        logger: github.com/wfusion/gofusion/log/customlogger.metricsLogger
   172  
   173    # 日志配置
   174    log:
   175      # 日志配置名称, 本例中为 default, 必须含有一个 default 日志, 其可通过 log.Info, log.Warn 直接调用时使用
   176      default:
   177        # 日志级别, 支持 debug, info, warn, error, panic, fatal
   178        log_level: debug
   179        # 配置在某个日志级别之上打印堆栈, 支持 debug, info, warn, error, panic, fatal
   180        stacktrace_level: error
   181        # 配置需要跳过的日志打印的文件位置, 即跳过后定位到其上层调用对应的文件位置, 支持通配符
   182        skip_callers: [ ]
   183        # 是否开启, 使得日志打印中文件位置的路径信息更短
   184        shorter_filepath: true
   185        # 是否开启 console 日志输出
   186        enable_console_output: true
   187        # console 输出配置
   188        console_output_option:
   189          # 输出格式, 支持 console, json
   190          layout: console
   191          # 是否以彩色输出, 影响日志可读性
   192          colorful: false
   193        # 是否开启 file 日志输出
   194        enable_file_output: false
   195        # file 输出配置
   196        file_output_option:
   197          # 输出格式, 支持 console, json
   198          layout: json
   199          # 保存路径
   200          path: .
   201          # 保存名称, 未配置则默认按照 <app>.log 输出, 若未配置 <app> 则按照<程序运行目录名>.log 输出, 若运行目录为 / 则 md5 哈希
   202          name: gofusion.log
   203          # 日志最长保留时间, 只会在因为日志过大进行切分时触发, 要求 >= 1ms, 默认值为 720h
   204          rotation_max_age: 720h
   205          # 文件最大保存份数, 实际保留中会存在当前正在使用的日志文件, 所以实际最大保存分数为 <rotation_count> + 1
   206          rotation_count: 10
   207          # 文件切割大小, 默认值为 100mib
   208          rotation_size: 100mib
   209          # 是否日志自动进行 gzip 压缩, 只对归档日志生效, 当前正在使用的日志文件不会实时压缩
   210          compress: false
   211  
   212    # 关系型数据库配置
   213    db:
   214      # db 配置名称, 本例中为 read
   215      read:
   216        # 数据库类型, 默认为 mysql, 支持 mysql, postgres, sqlite, sqlserver, tidb, clickhouse
   217        driver: mysql
   218        # 数据库驱动方言, 可以不填充, 各个数据库类型都有默认驱动
   219        # - 当 driver 为 postgres 时, 支持 opengauss
   220        dialect: mysql
   221        # database 或 schema 名称
   222        db: mysql
   223        # 数据库地址
   224        host: mysql
   225        # 数据库端口
   226        port: 3306
   227        # 用户名
   228        user: root
   229        # 用户名密码, 本 demo 中为 crypto.config 中配置的对应加密密文
   230        password: "j8RJId7eTMAUJ3NUytlZGqVzP6wOzrbTX7YcizC8"
   231        timeout: 5s
   232        read_timeout: 2s
   233        write_timeout: 2s
   234        # 数据库连接池最大空闲连接数
   235        max_idle_conns: 20
   236        # 数据库连接池最大可用连接数
   237        max_open_conns: 20
   238        # 单连接最大存活时间, 应小于数据库 server 中的配置
   239        conn_max_life_time: 30m
   240        # 单连接最大空闲时间
   241        conn_max_idle_time: 15m
   242        # 自增 id 步长, driver 为 mysql 或 mariadb 时生效, 为 0 时则或自动获取 database 的配置(非对应表的配置)
   243        # 注: 解决 github.com/go-gorm/gorm/issues/5814, 当业务定义的表结构体嵌套两层以上时会出现新建时步长对应不上的问题
   244        auto_increment_increment: 0
   245        # 自动分表配置
   246        sharding:
   247          # 表名
   248          - table: "user"
   249            # 自定义分表表名尾缀
   250            # 例如 user 表中, 配置为 az1_%02d, 则分表结果会是 user_az1_00, user_az1_01 等等
   251            # 默认尾缀为 user_0, user_1, 当 <number_of_shards> > 10 则为 user_00, user_01, 最大支持到 user_9999
   252            suffix: ""
   253            # 分表 key, 即根据表中哪些列进行分表, 支持多列
   254            columns: [ city ]
   255            # 分表 key 自定义表达式, 如根据 type 和 user_id 列分表, 则可以写 type << 8 | user_id
   256            # 表达式支持语法详见: github.com/PaesslerAG/gval, 数字会丢失精度, 因为会全部转换为 float64 进行计算
   257            # 默认分表表达式为: 按照 <columns> 配置先后顺序以大端序拼接后进行 crc32 哈希再对 number_of_shards 求余
   258            sharding_key_expr: ""
   259            # 开启是否直接根据 columns 原始值进行分表, 如 user 表 az_name 列可分表为 user_az1, user_az2
   260            # 注: 开启后 <number_of_shards> 不再生效
   261            sharding_key_by_raw_value: false
   262            # 开启 <sharding_key_by_raw_value> 后, 调用 db.Migrate 进行自动建表时, 需要指定分表有哪些 key, 如 [az1,az2,az3]
   263            sharding_keys_for_migrating: []
   264            # 使用默认分表表达式或自定义分表表达式时, 最大分表数量
   265            # 注: 一旦配置后则不可随意修改数量, 修改后会导致无法正常读写原分表结果的数据, 若要变动分表数量需业务自行进行分表迁移
   266            number_of_shards: 1
   267            # 若使用主键 id 进行分表时, 需要选择主键 id 的生成算法
   268            # 可配置自定义的实现 common/infra/drivers/orm/idgen.Generator 接口的生成算法对象
   269            # 默认配置为基于 github.com/sony/sonyflake 的雪花算法, 无法保证绝对不碰撞, 机器码表达式为:
   270            # byte(hash/fnv(host_ip+ip+pid) % 255) << 8 |  byte(ip[24:]), host_ip 默认取 host.docker.internal
   271            # 自定义配置可能因为没有直接引用导致找不到对象, 所以业务配置时需要定义对应对象或函数的全局 reflect.Type 类型避免编译器忽略
   272            idgen: github.com/wfusion/gofusion/common/infra/drivers/orm/idgen.NewSnowflake
   273        # 是否开启日志, 可在程序运行时实时切换生效
   274        enable_logger: true
   275        # 日志配置, 可在程序运行中实时生效
   276        # 注:
   277        # 1. 和全局 debug 配置冲突, 优先开启 gorm 原生 debug
   278        # 2. logger_config.logger 配置无法实时生效
   279        logger_config:
   280          # 日志级别, 支持 debug, info, warn, error
   281          log_level: info
   282          # 当日志级别低于 error 时可打印超过此耗时的 sql 日志
   283          slow_threshold: 500ms
   284          # 可配置自定义的实现 gorm.logger.Interface 接口的日志对象
   285          # 默认配置的日志对象可打印日志到 log.<log_instance> 中配置的日志中
   286          # 自定义配置可能因为没有直接引用导致找不到对象, 所以业务配置时需要定义对应对象或函数的全局 reflect.Type 类型避免编译器忽略
   287          logger: github.com/wfusion/gofusion/log/customlogger.gormLogger
   288          # 日志配置, 对应 log 组件中的名称
   289          log_instance: default
   290      # db 配置名称, 本例中为 write
   291      write:
   292        driver: mysql
   293        db: mysql
   294        host: mysql
   295        port: 3306
   296        user: root
   297        password: "j8RJId7eTMAUJ3NUytlZGqVzP6wOzrbTX7YcizC8"
   298        timeout: 5s
   299        read_timeout: 2s
   300        write_timeout: 2s
   301        max_idle_conns: 20
   302        max_open_conns: 20
   303        enable_logger: true
   304        logger_config:
   305          log_level: info
   306          slow_threshold: 500ms
   307  
   308    # mongo 配置
   309    mongo:
   310      # mongo 配置名称, 本例中为 default
   311      default:
   312        # database 名称
   313        db: admin
   314        # 用于认证的 database 名称
   315        auth_db: admin
   316        # 用户名
   317        user: root
   318        # 用户名密码, 本 demo 中为 crypto.config 中配置的对应加密密文
   319        password: "j8RJId7eTMAUJ3NUytlZGqVzP6wOzrbTX7YcizC8"
   320        # 集群地址
   321        endpoints:
   322          - mongo:27017
   323        timeout: 5s
   324        conn_timeout: 30s
   325        socket_timeout: 5s
   326        heartbeat_interval: 10s
   327        max_connecting: 2
   328        min_pool_size: 0
   329        max_pool_size: 100
   330        max_conn_idle_time: 10s
   331        retry_writes: true
   332        retry_reads: true
   333        # 是否开启日志, 可在程序运行时实时切换生效
   334        enable_logger: true
   335        # 日志配置, 可在程序运行中实时生效
   336        # 注: logger_config.logger 配置无法实时生效
   337        logger_config:
   338          # 配置需要打印的 mongo 命令
   339          loggable_commands: [insert,find,update,delete,aggregate,distinct,count,findAndModify]
   340          # 可配置自定义的实现 gofusion/mongo.logger 接口的日志对象
   341          # 默认配置的日志对象可打印日志到 log.<log_instance> 中配置的日志中
   342          # 自定义配置可能因为没有直接引用导致找不到对象, 所以业务配置时需要定义对应对象或函数的全局 reflect.Type 类型避免编译器忽略
   343          logger: github.com/wfusion/gofusion/log/customlogger.mongoLogger
   344          # 日志配置, 对应 log 组件中的名称
   345          log_instance: default
   346  
   347    # redis 配置
   348    redis:
   349      # redis 配置名称, 本例中为 default
   350      default:
   351        # database 在 server 中的位置
   352        db: 0
   353        # 用户名
   354        user: ""
   355        # 用户名密码, 本 demo 中为 crypto.config 中配置的对应加密密文
   356        password: "j8RJId7eTMAUJ3NUytlZGqVzP6wOzrbTX7YcizC8"
   357        # server 端是否开启 cluster 模式
   358        cluster: false
   359        # server 地址
   360        endpoints:
   361          - redis:6379
   362        dial_timeout: 5s
   363        # socket reads 超时时间, 除正常 time.Duration 的配置外, 还支持 -1(阻塞), -2(不设置 deadline) 配置
   364        read_timeout: 2s
   365        # socket writes 超时时间, 除正常 time.Duration 的配置外, 还支持 -1(阻塞), -2(不设置 deadline) 配置
   366        write_timeout: 2s
   367        min_idle_conns: 0
   368        max_idle_conns: 0
   369        # 若配置 <= 0 的数则单连接永不过时
   370        conn_max_idle_time: 30m
   371        # 若配置 <= 0 的数则单连接永不过时
   372        conn_max_life_time: "0"
   373        max_retries: 3
   374        min_retry_backoff: 8ms
   375        max_retry_backoff: 512ms
   376        # 连接池大小, 默认为 runtime.GOMAXPROCS() x 10
   377        pool_size: 0
   378        # 连接池阻塞超时时间, 默认为 <read_timeout> + 1s
   379        pool_timeout: ""
   380        # 是否开启日志, 可在程序运行时实时切换生效
   381        enable_logger: true
   382        # 无需记录日志的 redis 命令, 可在程序运行时实时切换生效
   383        # 配置的 hooks 中包含 gofusion/log/customlogger.redisLogger 才能生效
   384        unloggable_commands: [echo,ping]
   385        # 日志配置, 对应 log 组件中的名称
   386        log_instance: default
   387        # 可配置自定义的实现 github.com/redis/go-redis/v9/redis.Hook 接口的对象
   388        # 默认配置的对象可打印日志到 log.<log_instance> 中配置的日志中
   389        # 自定义配置可能因为没有直接引用导致找不到对象, 所以业务配置时需要定义对应对象或函数的全局 reflect.Type 类型避免编译器忽略
   390        hooks:
   391          - github.com/wfusion/gofusion/log/customlogger.redisLogger
   392  
   393    # message queue 配置
   394    mq:
   395      # mq 配置名称, 本例中为 mysql
   396      mysql:
   397        # 消息队列 topic, 或者在消费者视角则是 consumer group
   398        topic: gofusion
   399        # 消息队列类型, 支持 amqp, rabbitmq, gochannel, kafka, pulsar, redis, mysql, postgres
   400        type: mysql
   401        # 是否开启触消息队列的生产端, 默认开启
   402        producer: true
   403        # 是否开启消息队列的消费端, 用于消费消息, 或可称为 worker, server
   404        consumer: true
   405        # 消费者组
   406        consumer_group: default_group
   407        # 消费者数量, 若消息队列类型支持多消费者时才能生效
   408        # 配置过大对于某些消息队列没有作用
   409        #  - type 为 kafka, 若分布式情况下所有 consumer 数量大于 partition 数量, 则多余 consumer 会空闲无用
   410        #  - type 为 mysql, mariadb, postgres, 因实现方式是对 offset 表上事务锁, 所以分布式和多消费者无意义, 但可控制单次锁中一次性消费的消息数
   411        consumer_concurrency: 10
   412        # 服务端连接配置
   413        endpoint:
   414            # instance 类型, 支持 redis, db, 对应本配置文件中的 redis, db 模块
   415            instance_type: db
   416            # instance_type 对应的配置名称
   417            instance: write
   418            # 非 instance 类型的连接地址
   419            addresses:
   420              - rabbitmq:5672
   421            # 非 instance 类型的连接用户名
   422            # - type 为 kafka 时对应 SASL/PLAIN username
   423            # - type 为 pulsar 时对应 basic username
   424            user: "rabbitmq"
   425            # 非 instance 类型的连接密码或凭证
   426            # - type 为 kafka 时对应 SASL/PLAIN password 或者 OAUTHBEARER 中的 token
   427            # - type 为 pulsar 时对应 basic 的 username, tls, token, athenz, oauth2 的 json 序列化凭证
   428            password: "j8RJId7eTMAUJ3NUytlZGqVzP6wOzrbTX7YcizC8"
   429            # 非 instance 类型的凭证类型
   430            # - type 为 kafka 时支持 plain, scram-sha-256, scram-sha-512, oauthbearer
   431            # - type 为 pulsar 时支持 basic, tls, token, athenz, oauth2, 其中除 basic 外所需参数为 json 序列化的 <password>
   432            auth_type: ""
   433            # 服务端版本, type 为 kafka 时生效
   434            version: 3.6.0
   435        # 消息是否持久化, type 为 amqp, rabbitmq, gochannel, mysql, postgres, pulsar 时生效
   436        # - type 为 gochannel 时即持久化到内存中, 下一个 subscriber 订阅时能够拉到历史消息
   437        # - type 为 pulsar 时, 含义不是指消息是否持久化, 而是 subscriber 的消费 offset 是否持久化, 若关闭则不会持久化消费 offset
   438        persistent: true
   439        # 消息序列化算法, 支持 gob, json, msgpack, cbor, 默认使用 gob
   440        serialize_type: gob
   441        # 消息压缩算法, 支持 zstd, zlib, s2, gzip, deflate, 当未配置序列化算法时, 默认采用 gob 算法进行序列化
   442        compress_type: zstd
   443        # 是否开启日志, 可在程序运行时实时切换生效
   444        enable_logger: true
   445        # 可配置自定义的实现 github.com/wfusion/gofusion/common/infra/watermill.LoggerAdapter 接口的日志对象
   446        # 默认配置的日志对象可打印日志到 log.<log_instance> 中配置的日志中
   447        # 自定义配置可能因为没有直接引用导致找不到对象, 所以业务配置时需要定义对应对象或函数的全局 reflect.Type 类型避免编译器忽略
   448        logger: github.com/wfusion/gofusion/log/customlogger.mqLogger
   449        # 日志配置, 对应 log 组件中的名称
   450        log_instance: default
   451        # 消息 scheme 名称, type 为 mongo, mysql, mariadb, postgres 时生效
   452        message_scheme: gofusion_message
   453        # series scheme 名称, type 为 mongo 是生效
   454        series_scheme: gofusion_series
   455        # subscriber scheme 名称, type 为 mongo 是生效
   456        consumer_scheme: gofusion_subscriber
   457        # 消息消费中间件
   458        consume_middlewares:
   459            # type 支持 throttle, retry, instance_ack, poison, timeout, circuit_breaker
   460            # 可配置自定义实现 github.com/wfusion/gofusion/common/infra/watermill/message.HandlerMiddleware 的对象
   461            # 自定义配置可能因为没有直接引用导致找不到对象, 所以业务配置时需要定义对应对象或函数的全局 reflect.Type 类型避免编译器忽略
   462          - type: throttle
   463            # type 为 throttle 时生效, 表示 <throttle_duration> 周期内可接受消息数
   464            throttle_count: 10
   465            # type 为 throttle 时生效, 设置单位周期
   466            throttle_duration: 1s
   467            # type 为 retry 时生效, 单次消费失败最大重试次数
   468            retry_max_retries: 1
   469            # type 为 retry 时生效, 首次重试时间间隔
   470            retry_initial_interval: 1s
   471            # type 为 retry 时生效, 最大重试时间间隔
   472            retry_max_interval: 10s
   473            # type 为 retry 时生效, 重试时间间隔乘子, 即两次相邻重试时间间隔间的倍数
   474            retry_multiplier: 1.1
   475            # type 为 retry 时生效, 最大重试时间, 若配置 0 则不限制
   476            retry_max_elapsed_time: 20s
   477            # type 为 retry 时生效, 计算下次重试时间间隔的抖动因子, 本例中为计算出下一轮重试时间间隔后, 随机选择 [90%, 110%] * 时间间隔
   478            retry_randomization_factor: 0.1
   479            # type 为 poison 时生效, 处理失败的消息将会堆积在此 topic 中
   480            poison_topic: "failed"
   481            # type 为 timeout 时生效, 设置处理消息的超时时间
   482            timeout: 10s
   483            # type 为 circuit_breaker 时生效, 当熔断器处于 half-open 状态时最大可接受的请求
   484            circuit_breaker_max_requests: 0
   485            # type 为 circuit_breaker 时生效, 熔断后从 closed 恢复到 half-open 状态的时间间隔
   486            circuit_breaker_interval: 15s
   487            # type 为 circuit_breaker 时生效, 从 open 变为 half-open 状态的时间间隔
   488            circuit_breaker_timeout: 60s
   489            # type 为 circuit_breaker 时生效, 熔断器恢复为 open 状态的表达式, 默认为 consecutive_successes > 5
   490            # 支持参数 requests, total_successes, total_failures, consecutive_successes, consecutive_failures
   491            circuit_breaker_trip_expr: consecutive_successes > 5
   492  
   493    # cache 配置
   494    cache:
   495      # cache 配置名称, 本例中为 local
   496      local:
   497        # 缓存池大小, type 为 local 时生效
   498        size: 10
   499        # 缓存对象超时时间, 可在程序运行时实时切换生效
   500        expired: 5s
   501        # 缓存对象版本, 可在程序运行时实时切换生效, 如需刷新整个缓存时可修改版本号来完成
   502        version: 1
   503        # 缓存类型, 支持 local(近端缓存), remote(远端缓存)
   504        type: local
   505        # 逐出算法, type 为 local 时生效, 支持 simple, lru, lfu, arc
   506        local_evict_type: arc
   507        # 远端缓存类型, type 为 remote 时生效, 支持 redis
   508        remote_type: ""
   509        # 压缩算法, 可在程序运行时实时切换生效, 支持 zstd, zlib, s2, gzip, deflate, 当未配置序列化算法时, 默认采用 gob 算法进行序列化
   510        compress: ""
   511        # 序列化算法, 可在程序运行时实时切换生效, 支持 gob, json, msgpack, cbor
   512        serialize_type: ""
   513        # 日志配置, 对应 log 组件中的名称, 可在程序运行时实时切换生效
   514        log_instance: default
   515        # 缓存未命中时的回调函数, 可在程序运行时实时切换生效
   516        # 无需配置也可以在业务中调用 Get, GetAll 时设置回调函数(优先级高于本配置), 若 Get 和 GetAll 时未传入回调函数则会回调本配置
   517        # 可配置自定义的实现 gofusion/cache.callback 的对象
   518        # 自定义配置可能因为没有直接引用导致找不到对象, 所以业务配置时需要定义对应对象或函数的全局 reflect.Type 类型避免编译器忽略
   519        callback: ""
   520  
   521    # 分布式锁配置
   522    lock:
   523      # lock 配置名称, 本例中为 default
   524      default:
   525        # 支持 redis_lua, redis_nx, mysql, mariadb, mongo
   526        type: redis_lua
   527        # 对应 redis 或 db 组件中的配置
   528        instance: default
   529        # 当 type 为 mongo 时生效, 指定用于分布式锁的 mongo collection, 初始化可自动生成
   530        scheme: lock
   531  
   532    # 分布式异步任务配置
   533    async:
   534      # async 配置名称, 本例中为 default
   535      default:
   536        # 支持 asynq (基于 redis)
   537        type: asynq
   538        # 对应组件的实例
   539        # - type 为 asynq 时, 则对应 redis 组件配置的名称
   540        instance: default
   541        # 实例类型, 支持 redis
   542        instance_type: redis
   543        # 是否开启触发异步任务的生产端, 默认开启
   544        producer: true
   545        # 是否开启异步任务的消费端, 用于执行异步任务, 或可称为 worker, server
   546        consumer: true
   547        # worker 数量, 多个定时任务时影响执行效率, 默认取 runtime.NumCPU()
   548        consumer_concurrency: 0
   549        # 数据序列化算法, 支持 gob, json, msgpack, cbor, 默认使用 gob
   550        message_serialize_type: gob
   551        # 数据压缩算法, 支持 zstd, zlib, s2, gzip, deflate, 当未配置序列化算法时, 默认采用 gob 算法进行序列化
   552        message_compress_type: zstd
   553        # 队列配置, 若未配置时默认为单个 queue, queue 名称为 <app>:async
   554        queues:
   555          # 队列名称, 默认为 <app>:async, 本例中为 gofusion:async
   556          - name: ""
   557            # 队列优先级, 3 表示单位时间执行其任务的量大概是 30%
   558            level: 3
   559        # 是否开启严格优先级模式, 开启后高优先级任务执行完后才会执行低优先级的任务
   560        strict_priority: false
   561        # 日志等级, 支持 debug, info, warn, error, fatal
   562        log_level: info
   563        # 是否开启日志, 可在程序运行时实时切换生效
   564        enable_logger: true
   565        # 日志对象, 可配置自定义的实现接口的对象
   566        # - type 为 asynq 时接口为: gofusion/common/infra/asynq.Logger
   567        # 默认配置的对象可打印日志到 log.<log_instance> 中配置的日志中
   568        # 自定义配置可能因为没有直接引用导致找不到对象, 所以业务配置时需要定义对应对象或函数的全局 reflect.Type 类型避免编译器忽略
   569        logger: github.com/wfusion/gofusion/log/customlogger.asyncLogger
   570        # 日志配置, 对应 log 组件中的名称
   571        log_instance: default
   572  
   573    # 分布式定时任务配置
   574    cron:
   575      # cron 配置名称, 本例中为 default
   576      default:
   577        # 支持 asynq (基于 redis)
   578        type: asynq
   579        # 对应组件的实例
   580        # - type 为 asynq 时, 则对应 redis 组件配置的名称
   581        instance: default
   582        # 实例类型, 支持 redis
   583        instance_type: redis
   584        # 分布式锁实例名称, 防止同一时刻触发多个定时任务执行
   585        # 锁的 key 为 cron_<task.name>
   586        # - type 为 asynq 时不配置此项, 则锁逻辑通过 asynq Unique 选项实现
   587        lock_instance: "default"
   588        # 是否开启触发定时任务的 trigger 端, 或可称为 producer
   589        trigger: true
   590        # 是否开启执行定时任务的 server 端, 或可称为 worker, consumer
   591        server: true
   592        # worker 数量, 多个定时任务时影响执行效率
   593        # 默认取 runtime.NumCPU()
   594        server_concurrency: 0
   595        # 时区配置, 默认为 Asia/Shanghai
   596        timezone: "Asia/Shanghai"
   597        # 任务队列名称, 默认为 <app>:cron, 本例中为 gofusion:cron
   598        queue: ""
   599        # 日志等级, 支持 debug, info, warn, error, fatal
   600        log_level: info
   601        # 是否开启日志, 可在程序运行时实时切换生效
   602        enable_logger: true
   603        # 日志对象, 可配置自定义的实现接口的对象
   604        # - type 为 asynq 时接口为: gofusion/common/infra/asynq.Logger
   605        # 默认配置的对象可打印日志到 log.<log_instance> 中配置的日志中
   606        # 自定义配置可能因为没有直接引用导致找不到对象, 所以业务配置时需要定义对应对象或函数的全局 reflect.Type 类型避免编译器忽略
   607        logger: github.com/wfusion/gofusion/log/customlogger.cronLogger
   608        # 日志配置, 对应 log 组件中的名称
   609        log_instance: default
   610        # 定时任务实时生成器, 当开启 trigger 时生效, 可在本配置文件定义的 tasks 外追在业务上追加定时任务执行
   611        # 可配置自定义的实现接口的对象, 当开启 trigger 时生效
   612        # - type 为 asynq 时接口为: gofusion/common/infra/asynq.PeriodicTaskConfigProvider
   613        task_loader: ""
   614        # 刷新定时任务时间间隔, 即每个周期重新注册一次定时任务
   615        refresh_tasks_interval: 3m
   616        # 任务配置, 可在程序运行时实时切换生效
   617        tasks:
   618          # 任务名, 会被格式化为 <app>:cron:<name>, 本例中为 gofusion:cron:test, 业务注册中无需关心直接使用 test 注册 Handler 即可
   619          test:
   620            # crontab 表达式
   621            crontab: "@every 1s"
   622            # 定时任务执行函数, 可不配置, 业务中可通过调用 Handle 来注册且支持的函数签名更多
   623            # 可配置实现 gofusion/cron.routerHandleFunc 的函数
   624            # 自定义配置可能因为没有直接引用导致找不到对象, 所以业务配置时需要定义对应对象或函数的全局 reflect.Type 类型避免编译器忽略
   625            callback: ""
   626            # json 格式 payload, 当使用 Handle 注册时, 可自动反序列化出 func(context.Context, arg *JsonSerializable) 中的 arg 对象
   627            payload: ""
   628            # 定时任务执行出错时, 对应任务的最大重试次数
   629            retry: 0
   630            # 定时任务执行超时时间, time.Duration 格式
   631            # 默认超时时间为单个定时任务触发的周期
   632            timeout: ""
   633            # 定时任务死期, 格式: 2006-01-02 15:04:05
   634            deadline: ""
   635  
   636  # 下面是单测中模拟的业务配置, 和 gofusion 自身的配置无关, 业务可完全自定义
   637  
   638  InstanceSync:
   639    Enable: true
   640    Crontab: "0 0 1 * * *"
   641  
   642  Forecast:
   643    Enable: true
   644    Crontab: "0 0 4 * * *"
   645    History: 3
   646    Future: 1