跳到主要内容

配置参考

这一页按区块汇总 VEF 在启动期间会读取的配置项。

最小起步配置:

[vef.app]
name = "my-app"
port = 8080

[vef.data_sources.primary]
type = "sqlite"

配置文件查找路径

内部配置模块会按以下顺序查找 application.toml

  • ./configs
  • $VEF_CONFIG_PATH
  • .
  • ../configs

常用环境变量

关键环境变量包括:

  • VEF_CONFIG_PATH
  • VEF_LOG_LEVEL
  • VEF_I18N_LANGUAGE

vef.app

字段类型含义
namestring应用名称,会影响部分运行时行为,例如 JWT audience 默认值。
portuint16HTTP 服务端口。
body_limitstringFiber body limit,例如 10mib;未配置时默认 32mib
trusted_proxies[]string允许设置 X-Forwarded-For 的代理 IP 或 CIDR 列表;为空时只信任直接连接来源。

vef.api

字段类型含义
rate_limit.maxint未声明自己 OperationSpec.RateLimit 的操作使用的默认限流;默认 100(v0.38)。
rate_limit.periodduration默认限流的时间窗口;默认 5m(v0.38)。

限流按操作 × 客户端计数(resource、version、action、客户端 IP、principal ID),且按节点独立统计。每个端点自己的 OperationSpec.RateLimit 仍然优先; 见 API

vef.data_sources

vef.data_sources 是以数据源名称为 key 的 map。primary 条目必填,并为全框架注入的 orm.DB 提供来源;其他条目会用各自 map key 注册到数据源 registry。

示例:

[vef.data_sources.primary]
type = "sqlite"

[vef.data_sources.analytics]
type = "sqlite"
path = "./analytics.db"
字段类型含义
typepostgres | mysql | sqlite当前运行时支持的数据库类型。oracle / sqlserver 暂未实现。
hoststring网络数据库主机。
portuint16网络数据库端口。
userstring数据库用户名。
passwordstring数据库密码。
databasestring数据库名。
schemastring支持 schema 的驱动下使用的 schema 名。
pathstringSQLite 文件路径。
enable_sql_guardbool是否启用 SQL guard。
ssl_modedisable | require | verify-ca | verify-full网络数据库 dialect 的 TLS 模式;省略时等价于 disable
ssl_root_certstringverify-caverify-full 使用的可选 PEM CA bundle 路径;为空时使用主机系统证书池。

说明:

  • 当前运行时注册的 provider 支持 postgresmysqlsqliteoraclesqlserverDBKind 常量留作未来扩展,目前未实现,配置后会在启动时报 database.ErrUnsupportedDBKind

vef.cors

字段类型含义
enabledbool是否启用 CORS middleware。
allow_origins[]string允许的来源列表。

vef.security

字段类型含义
secretstring十六进制 JWT signing key。为空时框架会生成进程内临时 key 并输出警告;token 无法跨重启或多节点继续使用。如果设置为公开的 security.DefaultJWTSecret,启动时也会警告生产环境必须替换。
token_expiresdurationrefresh token 生命周期;默认 168h
refresh_not_beforedurationrefresh token 最早可使用时间;默认 15m,也就是固定 30m access token 生命周期的一半。
login_rate_limitint登录接口限流;默认 6
refresh_rate_limitintrefresh 接口限流;默认 1
ip_whitelistsmap[string][]string内置 ip 认证策略使用的命名 IP 白名单(IP 或 CIDR 条目);TOML key 会被转成小写,无参数的 api.IPAuth() 指向 default
lockout.*登录接口的暴力破解防护:enabled 默认 truemax_failures 默认 10window 默认 15mlock_duration 默认 15mstrategylock | backoff)默认 lockbackoff_base 默认 1sbackoff_max 默认 15mkeyuser | ip | user_ip)默认 user_ip
password_policy.*密码强度规则;每个字段都是可选项(零值表示不启用该规则):min_lengthmax_lengthrequire_upperrequire_lowerrequire_digitrequire_symbolmin_char_classesdisallow_usernameblocklisthistory_depth(防重用,需要应用自行实现 security.PasswordHistoryStore)、max_age(过期策略,需要应用自行实现 security.PasswordMetadataLoader)。
token_typejwt_token | opaque_token登录 token 机制;默认 jwt_token。会话控制(并发数限制、强制下线、续期)只在 opaque_token 下可用。
session.*opaque token 的会话调优项,在 jwt_token 下不生效:max_concurrent 默认 0(不限制;并发登录场景下是 best-effort 强制)、on_exceedreject | evict_oldest)默认 evict_oldestidle_ttl 默认 30mmax_lifetime 默认 168h(7 天)、sliding 默认 true

说明:

  • 内置 JWT token generator 签发的 access token 固定 30m 过期;vef.security.token_expires 控制的是 refresh token,不是 access token。
  • 锁定功能默认开启(max_failures = 10);触发后返回 security.ErrAccountLocked(HTTP 429),guard 存储出错时按 fail open 处理。
  • 只有注册了 security.PasswordHistoryStore 时,history_depth > 0 才会把历史密码校验组合进密码策略;只有应用同时接入 security.PasswordMetadataLoadersecurity.NewExpiryPasswordChangeChecker 时,max_age 才会生效。

vef.redis

字段类型含义
enabledbool是否构造 Redis client;默认 false
hoststringRedis host。
portuint16Redis port。
userstringRedis 用户名。
passwordstringRedis 密码。
databaseuint8Redis database 编号。
networkstringtcpunix

说明:

  • 默认 vef.Run(...) 启动图包含 Redis 模块
  • 只有 enabled = true 时才会构造 Redis client;enabledfalse 或未配置时,框架注入的是 nil *redis.Client,并跳过启动 PING
  • 启用后如果不写 host / port / network,会回退到 127.0.0.16379tcp

vef.storage

字段类型含义
providermemory | minio | filesystem存储 provider 选择。
auto_migratebool是否在启动时执行 storage DDL 迁移。
minio.endpointstringMinIO endpoint。
minio.access_keystringMinIO access key。
minio.secret_keystringMinIO secret key。
minio.bucketstringbucket 名。
minio.regionstringregion。
minio.use_sslbool是否使用 HTTPS。
filesystem.rootstringfilesystem provider 根目录。
max_upload_sizeint64单个对象上传大小上限,默认 1 GiB。
claim_ttldurationupload claim 有效期,默认 24h。
max_pending_claimsint单个 principal 可持有的 pending claim 上限,默认 100。
allow_public_uploadsbool是否允许客户端请求 public upload;默认关闭。
sweep_intervalduration过期 claim 扫描间隔,默认 5m。
sweep_batch_sizeint单次 claim sweep 处理上限,默认 200。
delete_worker_intervaldurationpending-delete worker 轮询间隔,默认 5m。
delete_batch_sizeint单次 delete worker 租约批量,默认 100。
delete_concurrencyint单轮对象删除并发上限,默认 8。
delete_max_attemptsint删除重试预算,默认 12。
delete_lease_windowduration删除任务租约窗口,默认 5m。

说明:

  • provider 为空时会选择内存存储并输出警告;对象会在进程重启后丢失。
  • vef.storage.auto_migrate = true 会执行幂等 storage 迁移,并检查 sys_storage_upload_claimsys_storage_upload_partsys_storage_pending_delete
  • filesystem.root 默认是 ./storage
  • minio.bucket 默认依次取 minio.bucketvef.app.namevef-app
  • 上传流程和删除 worker 的调优项在框架内有默认值;应用代码需要解析后的有效值时,应使用 StorageConfigEffective... 方法,而不是直接读取原始字段。

vef.monitor

字段类型含义
sample_intervalduration采样间隔;默认 10s
sample_durationduration采样窗口时长;默认 2s

excluded_mounts 已在 v0.38 移除:overview 的磁盘摘要只报告根文件系统, 挂载点排除不再适用(完整挂载清单仍可通过磁盘详情查询获取)。

vef.mcp

字段类型含义
enabledbool是否启用 MCP server。
require_authbool默认安全:未配置或为 true 时,/mcp 要求 Bearer token;只有显式设为 false 才允许匿名访问。Go 结构体中 MCPConfig.RequireAuth*bool,用于区分未配置和 false。

vef.approval

字段类型含义
auto_migratebool显式开启时才会在启动时执行 approval DDL 迁移;ApprovalConfig.ApplyDefaults() 不会自动打开它。
timeout_scan_intervalduration超时扫描器轮询节奏,默认 1m。
pre_warning_scan_intervalduration预警扫描器轮询节奏,默认 5m。
cleanup_scan_intervalduration保留期清理任务节奏,默认 24h。
delegation_max_depthint委托链最大深度,默认 10。
form_snapshot_retentiondurationapv_form_snapshot 保留期,默认 90 天。
urge_record_retentiondurationapv_urge_record 保留期,默认 30 天。
cc_record_retentionduration已读 apv_cc_record 记录保留期,默认 90 天。
business_binding.consistencysynchronous | eventual业务表投影模式;默认 synchronous(失败回滚审批动作)。eventual 先提交期望状态、由 worker 收敛(v0.38)。
business_binding.scan_intervaldurationeventual 投影 worker 的扫描节奏,默认 10s(v0.38)。
business_binding.batch_sizeint每次扫描认领的投影数,默认 100(v0.38)。

原本归属 [vef.approval] 的 outbox 配置已在 v0.21 移至 [vef.event.transports.outbox],详见 事件总线

vef.event

字段类型含义
default_transportstring路由回退使用的 transport 名(默认 memory)。
async_queue_sizeintWithAsync 异步队列容量,默认 4096
async_workersint异步队列 worker 数量,默认 4
publish_timeoutduration单次 transport Publish 调用上限,默认 5s
transports.memory.*内存 transport 配置:queue_size 默认 1024full_policy 默认 errorpublish_timeout 默认不设上限,且只在 full_policy = "block" 时生效。
transports.outbox.*outbox transport 配置:enabledrelay_interval 默认 10smax_retries 默认 10batch_size 默认 100lease_multiplier 默认 4min_lease 默认 15ssink 默认 memorycleanup_interval 默认 1hcompleted_ttl 默认 168h;cleanup 字段属于框架配置,不是 event/transport/outbox.Config 字段。
transports.redis_stream.*Redis Streams transport 配置:enabledstream_prefix 默认 vef:events:max_len_approx 默认 0(不裁剪)、block_timeout 默认 5sclaim_idle 默认 60sclaim_interval 默认 30sclaim_batch_size 默认 64reaper_concurrency 默认 4handler_timeout 默认 30ssetup_timeout 默认 5sconsumer_id 默认前缀 vefstart_id 默认 0"$" 表示新建 group 跳过 backlog)、idle_group_retention 默认 0(关闭孤儿消费组回收)、idle_group_sweep_interval 默认 10m
middleware.*bool中间件开关:loggingtracingtracing_strictmetricsrecoverinbox
inbox.*Inbox 去重表配置:retention 默认 168hprocessing_lease 默认 10mcleanup_interval 默认 1h
routing[]{pattern, transports}路由规则列表,按 path.Match 语义自顶向下匹配。

config 包 API 参考

Top-Level Public Symbols

SymbolKindSignature or value
config.AppConfigTYPEgithub.com/coldsmirk/vef-framework-go/config.AppConfig
config.ApprovalConfigTYPEgithub.com/coldsmirk/vef-framework-go/config.ApprovalConfig
config.ConfigTYPEgithub.com/coldsmirk/vef-framework-go/config.Config
config.CORSConfigTYPEgithub.com/coldsmirk/vef-framework-go/config.CORSConfig
config.DBKindTYPEgithub.com/coldsmirk/vef-framework-go/config.DBKind
config.DataSourceConfigTYPEgithub.com/coldsmirk/vef-framework-go/config.DataSourceConfig
config.DataSourcesConfigTYPEgithub.com/coldsmirk/vef-framework-go/config.DataSourcesConfig
config.DefaultClaimTTLCONSTtime.Duration = 86400000000000
config.DefaultDeleteBatchSizeCONSTint = 100
config.DefaultDeleteConcurrencyCONSTint = 8
config.DefaultDeleteLeaseWindowCONSTtime.Duration = 300000000000
config.DefaultDeleteMaxAttemptsCONSTint = 12
config.DefaultDeleteWorkerIntervalCONSTtime.Duration = 300000000000
config.DefaultLockoutBackoffBaseCONSTtime.Duration = 1000000000
config.DefaultLockoutBackoffMaxCONSTtime.Duration = 900000000000
config.DefaultLockoutLockDurationCONSTtime.Duration = 900000000000
config.DefaultLockoutMaxFailuresCONSTint = 10
config.DefaultLockoutWindowCONSTtime.Duration = 900000000000
config.DefaultMaxPendingClaimsCONSTint = 100
config.DefaultMaxUploadSizeCONSTint64 = 1073741824
config.DefaultSessionIdleTTLCONSTtime.Duration = 1800000000000
config.DefaultSessionMaxLifetimeCONSTtime.Duration = 604800000000000
config.DefaultSweepBatchSizeCONSTint = 200
config.DefaultSweepIntervalCONSTtime.Duration = 300000000000
config.EnvConfigPathCONSTuntyped string = "VEF_CONFIG_PATH"
config.EnvI18NLanguageCONSTuntyped string = "VEF_I18N_LANGUAGE"
config.EnvPrefixCONSTuntyped string = "VEF"
config.EnvLogLevelCONSTuntyped string = "VEF_LOG_LEVEL"
config.ErrInboxRetentionTooShortVARerror
config.ErrInvalidLockoutKeyVARerror
config.ErrInvalidLockoutStrategyVARerror
config.ErrInvalidSessionOnExceedVARerror
config.ErrInvalidTokenTypeVARerror
config.EventConfigTYPEgithub.com/coldsmirk/vef-framework-go/config.EventConfig
config.EventInboxConfigTYPEgithub.com/coldsmirk/vef-framework-go/config.EventInboxConfig
config.EventMemoryTransportConfigTYPEgithub.com/coldsmirk/vef-framework-go/config.EventMemoryTransportConfig
config.EventMiddlewareConfigTYPEgithub.com/coldsmirk/vef-framework-go/config.EventMiddlewareConfig
config.EventOutboxTransportConfigTYPEgithub.com/coldsmirk/vef-framework-go/config.EventOutboxTransportConfig
config.EventRedisStreamTransportConfigTYPEgithub.com/coldsmirk/vef-framework-go/config.EventRedisStreamTransportConfig
config.EventRoutingRuleTYPEgithub.com/coldsmirk/vef-framework-go/config.EventRoutingRule
config.EventTransportsConfigTYPEgithub.com/coldsmirk/vef-framework-go/config.EventTransportsConfig
config.FilesystemConfigTYPEgithub.com/coldsmirk/vef-framework-go/config.FilesystemConfig
config.LockoutConfigTYPEgithub.com/coldsmirk/vef-framework-go/config.LockoutConfig
config.LockoutKeyTYPEgithub.com/coldsmirk/vef-framework-go/config.LockoutKey
config.LockoutKeyIPCONSTgithub.com/coldsmirk/vef-framework-go/config.LockoutKey = "ip"
config.LockoutKeyUserCONSTgithub.com/coldsmirk/vef-framework-go/config.LockoutKey = "user"
config.LockoutKeyUserIPCONSTgithub.com/coldsmirk/vef-framework-go/config.LockoutKey = "user_ip"
config.LockoutStrategyTYPEgithub.com/coldsmirk/vef-framework-go/config.LockoutStrategy
config.LockoutStrategyBackoffCONSTgithub.com/coldsmirk/vef-framework-go/config.LockoutStrategy = "backoff"
config.LockoutStrategyLockCONSTgithub.com/coldsmirk/vef-framework-go/config.LockoutStrategy = "lock"
config.MCPConfigTYPEgithub.com/coldsmirk/vef-framework-go/config.MCPConfig
config.MinIOConfigTYPEgithub.com/coldsmirk/vef-framework-go/config.MinIOConfig
config.MonitorConfigTYPEgithub.com/coldsmirk/vef-framework-go/config.MonitorConfig
config.MySQLCONSTgithub.com/coldsmirk/vef-framework-go/config.DBKind = "mysql"
config.OracleCONSTgithub.com/coldsmirk/vef-framework-go/config.DBKind = "oracle"
config.PasswordPolicyConfigTYPEgithub.com/coldsmirk/vef-framework-go/config.PasswordPolicyConfig
config.PostgresCONSTgithub.com/coldsmirk/vef-framework-go/config.DBKind = "postgres"
config.PrimaryDataSourceNameCONSTuntyped string = "primary"
config.RedisConfigTYPEgithub.com/coldsmirk/vef-framework-go/config.RedisConfig
config.SQLServerCONSTgithub.com/coldsmirk/vef-framework-go/config.DBKind = "sqlserver"
config.SQLiteCONSTgithub.com/coldsmirk/vef-framework-go/config.DBKind = "sqlite"
config.SecurityConfigTYPEgithub.com/coldsmirk/vef-framework-go/config.SecurityConfig
config.SSLDisableCONSTgithub.com/coldsmirk/vef-framework-go/config.SSLMode = "disable"
config.SSLModeTYPEgithub.com/coldsmirk/vef-framework-go/config.SSLMode
config.SSLRequireCONSTgithub.com/coldsmirk/vef-framework-go/config.SSLMode = "require"
config.SSLVerifyCACONSTgithub.com/coldsmirk/vef-framework-go/config.SSLMode = "verify-ca"
config.SSLVerifyFullCONSTgithub.com/coldsmirk/vef-framework-go/config.SSLMode = "verify-full"
config.SessionConfigTYPEgithub.com/coldsmirk/vef-framework-go/config.SessionConfig
config.SessionExceedEvictOldestCONSTgithub.com/coldsmirk/vef-framework-go/config.SessionExceedPolicy = "evict_oldest"
config.SessionExceedPolicyTYPEgithub.com/coldsmirk/vef-framework-go/config.SessionExceedPolicy
config.SessionExceedRejectCONSTgithub.com/coldsmirk/vef-framework-go/config.SessionExceedPolicy = "reject"
config.StorageConfigTYPEgithub.com/coldsmirk/vef-framework-go/config.StorageConfig
config.StorageFilesystemCONSTgithub.com/coldsmirk/vef-framework-go/config.StorageProvider = "filesystem"
config.StorageMemoryCONSTgithub.com/coldsmirk/vef-framework-go/config.StorageProvider = "memory"
config.StorageMinIOCONSTgithub.com/coldsmirk/vef-framework-go/config.StorageProvider = "minio"
config.StorageProviderTYPEgithub.com/coldsmirk/vef-framework-go/config.StorageProvider
config.TokenTypeTYPEgithub.com/coldsmirk/vef-framework-go/config.TokenType
config.TokenTypeJWTCONSTgithub.com/coldsmirk/vef-framework-go/config.TokenType = "jwt_token"
config.TokenTypeOpaqueCONSTgithub.com/coldsmirk/vef-framework-go/config.TokenType = "opaque_token"

Exported Fields

FieldSignature and config tag
config.AppConfig.Namestring [field_order=1 tag="config:\"name\""]
config.AppConfig.Portuint16 [field_order=2 tag="config:\"port\""]
config.AppConfig.BodyLimitstring [field_order=3 tag="config:\"body_limit\""]
config.AppConfig.TrustedProxies[]string [field_order=4 tag="config:\"trusted_proxies\""]
config.ApprovalConfig.AutoMigratebool [field_order=1 tag="config:\"auto_migrate\""]
config.ApprovalConfig.TimeoutScanIntervaltime.Duration [field_order=2 tag="config:\"timeout_scan_interval\""]
config.ApprovalConfig.PreWarningScanIntervaltime.Duration [field_order=3 tag="config:\"pre_warning_scan_interval\""]
config.ApprovalConfig.CleanupScanIntervaltime.Duration [field_order=4 tag="config:\"cleanup_scan_interval\""]
config.ApprovalConfig.DelegationMaxDepthint [field_order=5 tag="config:\"delegation_max_depth\""]
config.ApprovalConfig.FormSnapshotRetentiontime.Duration [field_order=6 tag="config:\"form_snapshot_retention\""]
config.ApprovalConfig.UrgeRecordRetentiontime.Duration [field_order=7 tag="config:\"urge_record_retention\""]
config.ApprovalConfig.CCRecordRetentiontime.Duration [field_order=8 tag="config:\"cc_record_retention\""]
config.CORSConfig.Enabledbool [field_order=1 tag="config:\"enabled\""]
config.CORSConfig.AllowOrigins[]string [field_order=2 tag="config:\"allow_origins\""]
config.DataSourceConfig.Kindgithub.com/coldsmirk/vef-framework-go/config.DBKind [field_order=1 tag="config:\"type\""]
config.DataSourceConfig.Hoststring [field_order=2 tag="config:\"host\""]
config.DataSourceConfig.Portuint16 [field_order=3 tag="config:\"port\""]
config.DataSourceConfig.Userstring [field_order=4 tag="config:\"user\""]
config.DataSourceConfig.Passwordstring [field_order=5 tag="config:\"password\""]
config.DataSourceConfig.Databasestring [field_order=6 tag="config:\"database\""]
config.DataSourceConfig.Schemastring [field_order=7 tag="config:\"schema\""]
config.DataSourceConfig.Pathstring [field_order=8 tag="config:\"path\""]
config.DataSourceConfig.EnableSQLGuardbool [field_order=9 tag="config:\"enable_sql_guard\""]
config.DataSourceConfig.SSLModegithub.com/coldsmirk/vef-framework-go/config.SSLMode [field_order=10 tag="config:\"ssl_mode\""]
config.DataSourceConfig.SSLRootCertstring [field_order=11 tag="config:\"ssl_root_cert\""]
config.DataSourcesConfig.Mapmap[string]github.com/coldsmirk/vef-framework-go/config.DataSourceConfig [field_order=1 tag=""]
config.EventConfig.DefaultTransportstring [field_order=1 tag="config:\"default_transport\""]
config.EventConfig.AsyncQueueSizeint [field_order=2 tag="config:\"async_queue_size\""]
config.EventConfig.AsyncWorkersint [field_order=3 tag="config:\"async_workers\""]
config.EventConfig.PublishTimeouttime.Duration [field_order=4 tag="config:\"publish_timeout\""]
config.EventConfig.Transportsgithub.com/coldsmirk/vef-framework-go/config.EventTransportsConfig [field_order=5 tag="config:\"transports\""]
config.EventConfig.Middlewaregithub.com/coldsmirk/vef-framework-go/config.EventMiddlewareConfig [field_order=6 tag="config:\"middleware\""]
config.EventConfig.Inboxgithub.com/coldsmirk/vef-framework-go/config.EventInboxConfig [field_order=7 tag="config:\"inbox\""]
config.EventConfig.Routing[]github.com/coldsmirk/vef-framework-go/config.EventRoutingRule [field_order=8 tag="config:\"routing\""]
config.EventInboxConfig.Retentiontime.Duration [field_order=1 tag="config:\"retention\""]
config.EventInboxConfig.ProcessingLeasetime.Duration [field_order=2 tag="config:\"processing_lease\""]
config.EventInboxConfig.CleanupIntervaltime.Duration [field_order=3 tag="config:\"cleanup_interval\""]
config.EventMemoryTransportConfig.QueueSizeint [field_order=1 tag="config:\"queue_size\""]
config.EventMemoryTransportConfig.FullPolicystring [field_order=2 tag="config:\"full_policy\""]
config.EventMemoryTransportConfig.PublishTimeouttime.Duration [field_order=3 tag="config:\"publish_timeout\""]
config.EventMiddlewareConfig.Loggingbool [field_order=1 tag="config:\"logging\""]
config.EventMiddlewareConfig.Tracingbool [field_order=2 tag="config:\"tracing\""]
config.EventMiddlewareConfig.TracingStrictbool [field_order=3 tag="config:\"tracing_strict\""]
config.EventMiddlewareConfig.Metricsbool [field_order=4 tag="config:\"metrics\""]
config.EventMiddlewareConfig.Recoverbool [field_order=5 tag="config:\"recover\""]
config.EventMiddlewareConfig.Inboxbool [field_order=6 tag="config:\"inbox\""]
config.EventOutboxTransportConfig.Enabledbool [field_order=1 tag="config:\"enabled\""]
config.EventOutboxTransportConfig.RelayIntervaltime.Duration [field_order=2 tag="config:\"relay_interval\""]
config.EventOutboxTransportConfig.MaxRetriesint [field_order=3 tag="config:\"max_retries\""]
config.EventOutboxTransportConfig.BatchSizeint [field_order=4 tag="config:\"batch_size\""]
config.EventOutboxTransportConfig.LeaseMultiplierint [field_order=5 tag="config:\"lease_multiplier\""]
config.EventOutboxTransportConfig.MinLeasetime.Duration [field_order=6 tag="config:\"min_lease\""]
config.EventOutboxTransportConfig.SinkNamestring [field_order=7 tag="config:\"sink\""]
config.EventOutboxTransportConfig.CleanupIntervaltime.Duration [field_order=8 tag="config:\"cleanup_interval\""]
config.EventOutboxTransportConfig.CompletedTTLtime.Duration [field_order=9 tag="config:\"completed_ttl\""]
config.EventRedisStreamTransportConfig.Enabledbool [field_order=1 tag="config:\"enabled\""]
config.EventRedisStreamTransportConfig.StreamPrefixstring [field_order=2 tag="config:\"stream_prefix\""]
config.EventRedisStreamTransportConfig.MaxLenApproxint64 [field_order=3 tag="config:\"max_len_approx\""]
config.EventRedisStreamTransportConfig.BlockTimeouttime.Duration [field_order=4 tag="config:\"block_timeout\""]
config.EventRedisStreamTransportConfig.ClaimIdletime.Duration [field_order=5 tag="config:\"claim_idle\""]
config.EventRedisStreamTransportConfig.ClaimIntervaltime.Duration [field_order=6 tag="config:\"claim_interval\""]
config.EventRedisStreamTransportConfig.ClaimBatchSizeint64 [field_order=7 tag="config:\"claim_batch_size\""]
config.EventRedisStreamTransportConfig.ReaperConcurrencyint [field_order=8 tag="config:\"reaper_concurrency\""]
config.EventRedisStreamTransportConfig.HandlerTimeouttime.Duration [field_order=9 tag="config:\"handler_timeout\""]
config.EventRedisStreamTransportConfig.SetupTimeouttime.Duration [field_order=10 tag="config:\"setup_timeout\""]
config.EventRedisStreamTransportConfig.ConsumerIDstring [field_order=11 tag="config:\"consumer_id\""]
config.EventRedisStreamTransportConfig.StartIDstring [field_order=12 tag="config:\"start_id\""]
config.EventRedisStreamTransportConfig.IdleGroupRetentiontime.Duration [field_order=13 tag="config:\"idle_group_retention\""]
config.EventRedisStreamTransportConfig.IdleGroupSweepIntervaltime.Duration [field_order=14 tag="config:\"idle_group_sweep_interval\""]
config.EventRoutingRule.Patternstring [field_order=1 tag="config:\"pattern\""]
config.EventRoutingRule.Transports[]string [field_order=2 tag="config:\"transports\""]
config.EventTransportsConfig.Memorygithub.com/coldsmirk/vef-framework-go/config.EventMemoryTransportConfig [field_order=1 tag="config:\"memory\""]
config.EventTransportsConfig.Outboxgithub.com/coldsmirk/vef-framework-go/config.EventOutboxTransportConfig [field_order=2 tag="config:\"outbox\""]
config.EventTransportsConfig.RedisStreamgithub.com/coldsmirk/vef-framework-go/config.EventRedisStreamTransportConfig [field_order=3 tag="config:\"redis_stream\""]
config.FilesystemConfig.Rootstring [field_order=1 tag="config:\"root\""]
config.LockoutConfig.Enabled*bool [field_order=1 tag="config:\"enabled\""]
config.LockoutConfig.MaxFailuresint [field_order=2 tag="config:\"max_failures\""]
config.LockoutConfig.Windowtime.Duration [field_order=3 tag="config:\"window\""]
config.LockoutConfig.LockDurationtime.Duration [field_order=4 tag="config:\"lock_duration\""]
config.LockoutConfig.Strategygithub.com/coldsmirk/vef-framework-go/config.LockoutStrategy [field_order=5 tag="config:\"strategy\""]
config.LockoutConfig.BackoffBasetime.Duration [field_order=6 tag="config:\"backoff_base\""]
config.LockoutConfig.BackoffMaxtime.Duration [field_order=7 tag="config:\"backoff_max\""]
config.LockoutConfig.Keygithub.com/coldsmirk/vef-framework-go/config.LockoutKey [field_order=8 tag="config:\"key\""]
config.MCPConfig.Enabledbool [field_order=1 tag="config:\"enabled\""]
config.MCPConfig.RequireAuth*bool [field_order=2 tag="config:\"require_auth\""]
config.MinIOConfig.Endpointstring [field_order=1 tag="config:\"endpoint\""]
config.MinIOConfig.AccessKeystring [field_order=2 tag="config:\"access_key\""]
config.MinIOConfig.SecretKeystring [field_order=3 tag="config:\"secret_key\""]
config.MinIOConfig.Bucketstring [field_order=4 tag="config:\"bucket\""]
config.MinIOConfig.Regionstring [field_order=5 tag="config:\"region\""]
config.MinIOConfig.UseSSLbool [field_order=6 tag="config:\"use_ssl\""]
config.MonitorConfig.SampleIntervaltime.Duration [field_order=1 tag="config:\"sample_interval\""]
config.MonitorConfig.SampleDurationtime.Duration [field_order=2 tag="config:\"sample_duration\""]
config.MonitorConfig.ExcludedMounts[]string [field_order=3 tag="config:\"excluded_mounts\""]
config.PasswordPolicyConfig.MinLengthint [field_order=1 tag="config:\"min_length\""]
config.PasswordPolicyConfig.MaxLengthint [field_order=2 tag="config:\"max_length\""]
config.PasswordPolicyConfig.RequireUpperbool [field_order=3 tag="config:\"require_upper\""]
config.PasswordPolicyConfig.RequireLowerbool [field_order=4 tag="config:\"require_lower\""]
config.PasswordPolicyConfig.RequireDigitbool [field_order=5 tag="config:\"require_digit\""]
config.PasswordPolicyConfig.RequireSymbolbool [field_order=6 tag="config:\"require_symbol\""]
config.PasswordPolicyConfig.MinCharClassesint [field_order=7 tag="config:\"min_char_classes\""]
config.PasswordPolicyConfig.DisallowUsernamebool [field_order=8 tag="config:\"disallow_username\""]
config.PasswordPolicyConfig.Blocklist[]string [field_order=9 tag="config:\"blocklist\""]
config.PasswordPolicyConfig.HistoryDepthint [field_order=10 tag="config:\"history_depth\""]
config.PasswordPolicyConfig.MaxAgetime.Duration [field_order=11 tag="config:\"max_age\""]
config.RedisConfig.Enabledbool [field_order=1 tag="config:\"enabled\""]
config.RedisConfig.Hoststring [field_order=2 tag="config:\"host\""]
config.RedisConfig.Portuint16 [field_order=3 tag="config:\"port\""]
config.RedisConfig.Userstring [field_order=4 tag="config:\"user\""]
config.RedisConfig.Passwordstring [field_order=5 tag="config:\"password\""]
config.RedisConfig.Databaseuint8 [field_order=6 tag="config:\"database\""]
config.RedisConfig.Networkstring [field_order=7 tag="config:\"network\""]
config.SecurityConfig.Secretstring [field_order=1 tag="config:\"secret\""]
config.SecurityConfig.TokenExpirestime.Duration [field_order=2 tag="config:\"token_expires\""]
config.SecurityConfig.RefreshNotBeforetime.Duration [field_order=3 tag="config:\"refresh_not_before\""]
config.SecurityConfig.LoginRateLimitint [field_order=4 tag="config:\"login_rate_limit\""]
config.SecurityConfig.RefreshRateLimitint [field_order=5 tag="config:\"refresh_rate_limit\""]
config.SecurityConfig.IPWhitelistsmap[string][]string [field_order=6 tag="config:\"ip_whitelists\""]
config.SecurityConfig.Lockoutgithub.com/coldsmirk/vef-framework-go/config.LockoutConfig [field_order=7 tag="config:\"lockout\""]
config.SecurityConfig.PasswordPolicygithub.com/coldsmirk/vef-framework-go/config.PasswordPolicyConfig [field_order=8 tag="config:\"password_policy\""]
config.SecurityConfig.TokenTypegithub.com/coldsmirk/vef-framework-go/config.TokenType [field_order=9 tag="config:\"token_type\""]
config.SecurityConfig.Sessiongithub.com/coldsmirk/vef-framework-go/config.SessionConfig [field_order=10 tag="config:\"session\""]
config.SessionConfig.MaxConcurrentint [field_order=1 tag="config:\"max_concurrent\""]
config.SessionConfig.OnExceedgithub.com/coldsmirk/vef-framework-go/config.SessionExceedPolicy [field_order=2 tag="config:\"on_exceed\""]
config.SessionConfig.IdleTTLtime.Duration [field_order=3 tag="config:\"idle_ttl\""]
config.SessionConfig.MaxLifetimetime.Duration [field_order=4 tag="config:\"max_lifetime\""]
config.SessionConfig.Sliding*bool [field_order=5 tag="config:\"sliding\""]
config.StorageConfig.Providergithub.com/coldsmirk/vef-framework-go/config.StorageProvider [field_order=1 tag="config:\"provider\""]
config.StorageConfig.AutoMigratebool [field_order=2 tag="config:\"auto_migrate\""]
config.StorageConfig.MinIOgithub.com/coldsmirk/vef-framework-go/config.MinIOConfig [field_order=3 tag="config:\"minio\""]
config.StorageConfig.Filesystemgithub.com/coldsmirk/vef-framework-go/config.FilesystemConfig [field_order=4 tag="config:\"filesystem\""]
config.StorageConfig.MaxUploadSizeint64 [field_order=5 tag="config:\"max_upload_size\""]
config.StorageConfig.ClaimTTLtime.Duration [field_order=6 tag="config:\"claim_ttl\""]
config.StorageConfig.MaxPendingClaimsint [field_order=7 tag="config:\"max_pending_claims\""]
config.StorageConfig.AllowPublicUploadsbool [field_order=8 tag="config:\"allow_public_uploads\""]
config.StorageConfig.SweepIntervaltime.Duration [field_order=9 tag="config:\"sweep_interval\""]
config.StorageConfig.SweepBatchSizeint [field_order=10 tag="config:\"sweep_batch_size\""]
config.StorageConfig.DeleteWorkerIntervaltime.Duration [field_order=11 tag="config:\"delete_worker_interval\""]
config.StorageConfig.DeleteBatchSizeint [field_order=12 tag="config:\"delete_batch_size\""]
config.StorageConfig.DeleteConcurrencyint [field_order=13 tag="config:\"delete_concurrency\""]
config.StorageConfig.DeleteMaxAttemptsint [field_order=14 tag="config:\"delete_max_attempts\""]
config.StorageConfig.DeleteLeaseWindowtime.Duration [field_order=15 tag="config:\"delete_lease_window\""]

Exported Methods

MethodSignature
config.ApprovalConfig.ApplyDefaultsfunc()
config.Config.Unmarshalfunc(key string, target any) error
config.DataSourcesConfig.Primaryfunc() github.com/coldsmirk/vef-framework-go/config.DataSourceConfig
config.EventConfig.EffectiveAsyncQueueSizefunc() int
config.EventConfig.EffectiveAsyncWorkersfunc() int
config.EventConfig.EffectiveDefaultTransportfunc() string
config.EventConfig.EffectivePublishTimeoutfunc() time.Duration
config.EventConfig.Validatefunc() error
config.EventInboxConfig.EffectiveCleanupIntervalfunc() time.Duration
config.EventInboxConfig.EffectiveProcessingLeasefunc() time.Duration
config.EventInboxConfig.EffectiveRetentionfunc() time.Duration
config.EventOutboxTransportConfig.EffectiveCleanupIntervalfunc() time.Duration
config.EventOutboxTransportConfig.EffectiveCompletedTTLfunc() time.Duration
config.LockoutConfig.IsEnabledfunc() bool
config.LockoutConfig.EffectiveMaxFailuresfunc() int
config.LockoutConfig.EffectiveWindowfunc() time.Duration
config.LockoutConfig.EffectiveLockDurationfunc() time.Duration
config.LockoutConfig.EffectiveStrategyfunc() github.com/coldsmirk/vef-framework-go/config.LockoutStrategy
config.LockoutConfig.EffectiveBackoffBasefunc() time.Duration
config.LockoutConfig.EffectiveBackoffMaxfunc() time.Duration
config.LockoutConfig.EffectiveKeyfunc() github.com/coldsmirk/vef-framework-go/config.LockoutKey
config.LockoutConfig.Validatefunc() error
config.SecurityConfig.EffectiveTokenTypefunc() github.com/coldsmirk/vef-framework-go/config.TokenType
config.SecurityConfig.Validatefunc() error
config.SessionConfig.EffectiveOnExceedfunc() github.com/coldsmirk/vef-framework-go/config.SessionExceedPolicy
config.SessionConfig.EffectiveIdleTTLfunc() time.Duration
config.SessionConfig.EffectiveMaxLifetimefunc() time.Duration
config.SessionConfig.IsSlidingfunc() bool
config.StorageConfig.EffectiveClaimTTLfunc() time.Duration
config.StorageConfig.EffectiveDeleteBatchSizefunc() int
config.StorageConfig.EffectiveDeleteConcurrencyfunc() int
config.StorageConfig.EffectiveDeleteLeaseWindowfunc() time.Duration
config.StorageConfig.EffectiveDeleteMaxAttemptsfunc() int
config.StorageConfig.EffectiveDeleteWorkerIntervalfunc() time.Duration
config.StorageConfig.EffectiveMaxPendingClaimsfunc() int
config.StorageConfig.EffectiveMaxUploadSizefunc() int64
config.StorageConfig.EffectiveSweepBatchSizefunc() int
config.StorageConfig.EffectiveSweepIntervalfunc() time.Duration

Method Semantics

Method familyBehavior
config.Config.Unmarshal(key, target)读取指定 key 并写入 target;内部 Viper 实现使用 config struct tags,并忽略没有 tag 的字段。
config.DataSourcesConfig.Primary()返回 Map[config.PrimaryDataSourceName]。如果 map 中没有 primary,方法会返回零值 config.DataSourceConfig;框架启动阶段会另行校验 primary 是否存在。
config.ApprovalConfig.ApplyDefaults()原地修改 receiver。非正数 duration 或 count 会变成:timeout scan 1m、pre-warning scan 5m、cleanup scan 24h、delegation max depth 10、form snapshot retention 90d、urge record retention 30d、CC record retention 90d。它不会启用 AutoMigrate
config.StorageConfig.Effective...每个 storage accessor 只有在配置值严格为正时才返回配置值;零值或负值都会重新选择导出的默认常量。默认值包括:max upload size config.DefaultMaxUploadSize1073741824,1 GiB)、claim TTL config.DefaultClaimTTL24h)、max pending claims 100、sweep interval 5m、sweep batch size 200、delete worker interval 5m、delete batch size 100、delete concurrency 8、delete max attempts 12、delete lease window 5m
config.EventConfig.EffectiveDefaultTransport()返回 DefaultTransport;未配置时返回 "memory"
config.EventConfig.EffectiveAsyncQueueSize()AsyncQueueSize 为正时返回配置值,否则返回 4096
config.EventConfig.EffectiveAsyncWorkers()AsyncWorkers 为正时返回配置值,否则返回 4
config.EventConfig.EffectivePublishTimeout()PublishTimeout 为正时返回配置值,否则返回 5s
config.EventOutboxTransportConfig.EffectiveCleanupInterval()CleanupInterval 为正时返回配置值,否则返回 1h
config.EventOutboxTransportConfig.EffectiveCompletedTTL()CompletedTTL 为正时返回配置值,否则返回 168h
config.EventInboxConfig.EffectiveRetention()Retention 为正时返回配置值,否则返回 168h
config.EventInboxConfig.EffectiveProcessingLease()ProcessingLease 为正时返回配置值,否则返回 10m
config.EventInboxConfig.EffectiveCleanupInterval()CleanupInterval 为正时返回配置值,否则返回 1h
config.EventConfig.Validate()只在 EventConfig.Middleware.Inbox 为 true 且 EventConfig.Transports.Outbox.Enabled 为 true 时运行。它把 max_retries <= 0 当作 10,按 sum(2^k seconds) 计算最坏 exponential backoff horizon,溢出时饱和并 fail-closed;当 inbox.retention <= horizon 时返回包装 config.ErrInboxRetentionTooShort 的错误。
config.SecurityConfig.EffectiveTokenType()返回 TokenType;未配置时返回 config.TokenTypeJWT"jwt_token")。
config.SecurityConfig.Validate()拒绝超出枚举范围的 TokenType(包装 config.ErrInvalidTokenType)或 SessionConfig.OnExceed(包装 config.ErrInvalidSessionOnExceed),让配置笔误在启动时立即失败。
config.LockoutConfig.IsEnabled()Enabled 为 nil(锁定默认开启)或指向 true 时返回 true
config.LockoutConfig.Effective...()每个 accessor 只有在配置值严格为正时才返回配置值,否则重新选择对应的默认常量:MaxFailures -> config.DefaultLockoutMaxFailures10)、Window -> config.DefaultLockoutWindow15m)、LockDuration -> config.DefaultLockoutLockDuration15m)、Strategy 未配置时 -> config.LockoutStrategyLock"lock")、BackoffBase -> config.DefaultLockoutBackoffBase1s)、BackoffMax -> config.DefaultLockoutBackoffMax15m)、Key 未配置时 -> config.LockoutKeyUserIP"user_ip")。
config.LockoutConfig.Validate()拒绝超出枚举范围的 Strategy(包装 config.ErrInvalidLockoutStrategy)或 Key(包装 config.ErrInvalidLockoutKey)。
config.SessionConfig.EffectiveOnExceed()返回 OnExceed;未配置时返回 config.SessionExceedEvictOldest"evict_oldest")。
config.SessionConfig.EffectiveIdleTTL()IdleTTL 为正时返回配置值,否则返回 config.DefaultSessionIdleTTL30m)。
config.SessionConfig.EffectiveMaxLifetime()MaxLifetime 为正时返回配置值,否则返回 config.DefaultSessionMaxLifetime7 * 24h)。
config.SessionConfig.IsSliding()Sliding 为 nil(默认开启滑动续期)或指向 true 时返回 true

DataSourcesConfig.Map 有意不带 tag。内部配置模块会先把 vef.data_sources unmarshal 成 map[string]config.DataSourceConfig,再包装成 DataSourcesConfig{Map: sources};这样既保留任意数据源名称,也用 config.PrimaryDataSourceName"primary")为全框架 orm.DB 保留主数据源。

延伸阅读

  • 配置:配置项的解释与实际示例
  • 内置资源:这些配置会影响哪些默认模块