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