Silky微服务框架在线文档Silky微服务框架在线文档
首页
文档
配置
源码解析
博文
github
gitee
  • 简体中文
  • English
首页
文档
配置
源码解析
博文
github
gitee
  • 简体中文
  • English
    • 配置

介绍

silky 框架支持通过 json 或 yml 格式的配置文件对各模块行为进行调整。推荐使用 appsettings.yml 作为基础配置,配合 appsettings.{Environment}.yml 覆盖环境差异项。

配置文件读取优先级从低到高为:

  1. appsettings.yml(基础配置)
  2. appsettings.{Environment}.yml(环境专属配置)
  3. 环境变量
  4. 命令行参数

RPC 通信(Rpc)

配置节点:Rpc。适用于所有需要提供或调用 RPC 服务的主机(通用主机、Web 主机、WebSocket 主机)。

属性说明缺省值备注
Host监听的主机 IP0.0.0.00.0.0.0 表示自动获取当前主机 IP
CidrCIDR 网段过滤—当服务器有多张网卡时,通过 CIDR 指定使用哪个网段的 IP
PortRPC 监听端口2200
UseLibuv是否启用 Libuvtrue
IsSsl是否开启 SSLfalse
SslCertificateNameSSL 证书文件名—IsSsl 为 true 时有效
SslCertificatePasswordSSL 证书密码—IsSsl 为 true 时有效
SoBacklogDotNetty SoBacklog 参数1024
TokenRPC 通信密钥—必填,不允许为空;同一集群内所有服务必须配置相同的 Token
ConnectTimeout建立连接的超时时间300单位:ms
RegisterFailureRetryCount注册失败时的重试次数10
TransportClientPoolNumber传输客户端连接池大小50
UseTransportClientPool是否使用连接池true
EnableMonitor是否开启 RPC 调用监控true
CollectMonitorInfoIntervalSeconds监控数据采集间隔30单位:s
EnableHeartbeat是否开启心跳检测true开启后通过发送心跳包保持 DotNetty 长连接存活
HeartbeatWatchIntervalSeconds心跳发送间隔300单位:s;最小值为 60,低于 60 时自动修正为 60
MinThreadPoolSize最小线程池大小CPU核数 × 4
MaxThreadPoolSize最大线程池大小CPU核数 × 10

配置示例(YAML):

Rpc:
  Token: "your-rpc-token"
  Port: 2200
  Host: "0.0.0.0"
  ConnectTimeout: 300
  EnableHeartbeat: true
  HeartbeatWatchIntervalSeconds: 300

服务治理(Governance)

配置节点:Governance。控制 RPC 调用的负载均衡、超时、熔断、重试等治理策略,可在全局配置,也可通过 [Governance] 特性在方法级覆盖。

属性说明缺省值备注
ShuntStrategy负载均衡策略Polling可选值:Polling(轮询)、Random(随机)、HashAlgorithm(哈希一致性)
TimeoutMillSecondsRPC 调用执行超时时间5000单位:ms;超时将触发熔断
EnableCachingInterceptor是否启用缓存拦截true设为 false 时,所有缓存拦截特性均不生效
EnableCircuitBreaker是否启用熔断保护true用户友好类异常(业务异常)不会触发熔断
ExceptionsAllowedBeforeBreaking触发熔断前允许的连续异常次数3
BreakerSeconds熔断持续时长60单位:s;熔断期间该端点不接受新请求
AddressFuseSleepDurationSeconds端点通信异常后进入休眠的时长60单位:s;累计休眠达到上限后自动下线该端点
UnHealthAddressTimesAllowedBeforeRemoving端点被移除前允许进入休眠的次数3
RetryTimes故障转移重试次数3
RetryIntervalMillSeconds故障转移重试间隔50单位:ms
MaxConcurrentHandlingCount单实例最大并发处理数50超出后抛出异常
ApiIsRESTfulStyle是否使用 RESTful 风格路由true影响服务条目路由模板的生成方式

配置示例(YAML):

Governance:
  ShuntStrategy: Polling
  TimeoutMillSeconds: 5000
  EnableCircuitBreaker: true
  ExceptionsAllowedBeforeBreaking: 3
  BreakerSeconds: 60
  RetryTimes: 3
  RetryIntervalMillSeconds: 50
  MaxConcurrentHandlingCount: 50

服务注册中心(RegistryCenter)

配置节点:RegistryCenter。三种注册中心通过 Type 字段区分,只需安装对应的 NuGet 包并配置相应节点。

Zookeeper

NuGet 包:Silky.RegistryCenter.Zookeeper

属性说明缺省值备注
Type注册中心类型Zookeeper固定值,无需修改
ConnectionStringsZookeeper 连接地址—必填;同一集群多节点用逗号分隔,多集群用分号分隔。例:zk1:2181,zk1:2182;zk2:2181
ConnectionTimeout连接超时2000单位:ms
SessionTimeout会话超时8000单位:ms
OperatingTimeout操作超时15000单位:ms
HeartBeatIntervalSecond心跳间隔10单位:s
EnableHeartBeat是否启用心跳true
FuseTimes连接失败熔断次数10
SchemeACL 认证方案World可选:World、Auth、Digest、Ip
AuthACL 认证信息anyone
RoutePath服务端点元数据存储路径/silky/server
SwaggerDocPathSwagger 文档信息存储路径/silky/swagger
RegisterSwaggerDoc是否向注册中心同步 Swagger 文档信息true

配置示例(YAML):

RegistryCenter:
  Type: Zookeeper
  ConnectionStrings: "127.0.0.1:2181"
  ConnectionTimeout: 2000
  SessionTimeout: 8000
  OperatingTimeout: 15000

Nacos

NuGet 包:Silky.RegistryCenter.Nacos

继承自 Nacos .NET SDK 的 NacosSdkOptions,常用字段如下:

属性说明缺省值备注
Type注册中心类型Nacos固定值,无需修改
ServerAddressesNacos 服务地址列表—必填
NamespaceNacos 命名空间—
UserName认证用户名—
Password认证密码—
ServerGroupName服务分组名SILKYGROUPSilky 服务在 Nacos 中注册使用的分组
RegisterSwaggerDoc是否向注册中心同步 Swagger 文档信息true
NamingUseRpc是否使用 gRPC 模式与 Nacos 通信—

配置示例(YAML):

RegistryCenter:
  Type: Nacos
  ServerAddresses:
    - "http://127.0.0.1:8848"
  Namespace: ""
  UserName: "nacos"
  Password: "nacos"
  ServerGroupName: SILKYGROUP

Consul

NuGet 包:Silky.RegistryCenter.Consul

继承自 Consul .NET SDK 的 ConsulClientConfiguration,常用字段如下:

属性说明缺省值备注
Type注册中心类型Consul固定值,无需修改
AddressConsul Agent 地址—必填;例:http://127.0.0.1:8500
TokenConsul ACL Token—
HeartBeatIntervalSecond心跳注册/续约间隔15单位:s
HealthCheckIntervalSecond健康检查间隔10单位:s
HealthCheckTimeoutSecond健康检查超时1单位:s
HealthCheck是否启用健康检查true
RoutePath服务端点元数据存储 KV 路径silky/services
SwaggerDocPathSwagger 文档信息存储 KV 路径silky/swagger
RegisterSwaggerDoc是否向注册中心同步 Swagger 文档信息true

配置示例(YAML):

RegistryCenter:
  Type: Consul
  Address: "http://127.0.0.1:8500"
  HeartBeatIntervalSecond: 15
  HealthCheck: true

分布式缓存(DistributedCache)

配置节点:DistributedCache。NuGet 包:Silky.Caching(Redis 支持需额外引入 Silky.Caching.StackExchangeRedis)。

属性说明缺省值备注
HideErrors缓存操作出错时是否隐藏错误true
KeyPrefix缓存 Key 的全局前缀""空字符串,即无前缀

Redis 子节点:

属性说明缺省值备注
IsEnabled是否启用 Redis 作为缓存后端false设为 true 后 Redis 替换默认内存缓存
ConfigurationRedis 连接字符串""IsEnabled 为 true 时有效;格式同 StackExchange.Redis

GlobalCacheEntryOptions 子节点(全局缓存过期策略):

属性说明缺省值备注
AbsoluteExpiration绝对过期时间(时间点)—格式:ISO 8601
AbsoluteExpirationRelativeToNow相对当前时间的绝对过期时长—格式:HH:mm:ss 或 d.HH:mm:ss
SlidingExpiration滑动过期时长(无访问则过期)00:20:00默认 20 分钟;不会超过绝对过期时间

配置示例(YAML):

DistributedCache:
  HideErrors: true
  KeyPrefix: "myapp:"
  Redis:
    IsEnabled: true
    Configuration: "127.0.0.1:6379,password=yourpassword"
  GlobalCacheEntryOptions:
    SlidingExpiration: "00:20:00"

JWT 认证(JwtSettings)

配置节点:JwtSettings。NuGet 包:Silky.Jwt。用于 JWT Token 的签发与验证。

属性说明缺省值备注
SecretJWT 签名密钥—必填;同一集群中签发和验证服务必须使用相同密钥
Algorithm签名算法HS256可选值:HS256、HS384、HS512、RS256 等
Issuer签发方http://silky.com/issuer
Audience受众方http://silky.com/audience
ExpiredTimeToken 有效时长24单位:小时

配置示例(YAML):

JwtSettings:
  Secret: "your-jwt-secret-key-at-least-16-chars"
  Algorithm: HS256
  Issuer: "https://your-domain.com/issuer"
  Audience: "https://your-domain.com/audience"
  ExpiredTime: 24

网关(Gateway)

配置节点:Gateway。

注意

此配置节点仅对网关主机(Silky.Http.Core)有效,在业务微服务中配置不会生效。

属性说明缺省值备注
JwtSecret网关解析 JWT Token 使用的密钥—必须与签发 Token 的服务中 JwtSettings:Secret 一致
ResponseContentTypeHTTP 响应的 Content-Type—不配置时由框架自动决定
IgnoreWrapperPathPatterns不需要统一包装响应的路径模式列表静态资源及健康检查路径数组;支持正则;默认包含 /*.(js|css|html) 和 /(healthchecks|healthz)

配置示例(YAML):

Gateway:
  JwtSecret: "your-jwt-secret-key-at-least-16-chars"
  IgnoreWrapperPathPatterns:
    - "\\/.*\\.(js|css|html)"
    - "\\/(healthchecks|healthz)"
    - "\\/api\\/file\\/.*"

跨域(CorsAccessor)

配置节点:CorsAccessor。NuGet 包:Silky.Http.CorsAccessor。适用于 Web 主机和网关主机。

属性说明缺省值备注
PolicyNameCORS 策略名称App.CorsAccessor.Policy
WithOrigins允许的来源域名列表[](空数组)空数组时允许所有来源(AllowAnyOrigin)
WithHeaders允许的请求头列表—未配置时允许所有请求头
WithExposedHeaders暴露给客户端的响应头列表—
WithMethods允许的 HTTP 方法列表—未配置时允许所有方法
AllowCredentials是否允许携带凭证(Cookie/Authorization)true
SetPreflightMaxAge预检请求(OPTIONS)缓存时长—单位:s

配置示例(YAML):

CorsAccessor:
  WithOrigins:
    - "https://your-frontend.com"
  AllowCredentials: true
  WithHeaders:
    - "Authorization"
    - "Content-Type"

审计日志(Auditing)

配置节点:Auditing。NuGet 包:Silky.Http.Auditing。

属性说明缺省值备注
IsEnabled是否启用审计日志true
IsEnabledForAnonymousUsers是否记录匿名用户的请求true
IsEnabledForGetRequests是否记录 GET 请求falseGET 请求通常是查询操作,默认不记录
HideErrors审计日志写入出错时是否隐藏错误true
AlwaysLogOnException发生异常时是否强制记录审计日志true

配置示例(YAML):

Auditing:
  IsEnabled: true
  IsEnabledForAnonymousUsers: true
  IsEnabledForGetRequests: false
  AlwaysLogOnException: true

WebSocket(WebSocket)

配置节点:WebSocket。NuGet 包:Silky.WebSocket。仅适用于 WebSocket 主机。

属性说明缺省值备注
PortWebSocket 监听端口3000
IsSsl是否启用 SSL/WSSfalse
SslCertificateNameSSL 证书文件名—IsSsl 为 true 时有效
SslCertificatePasswordSSL 证书密码—IsSsl 为 true 时有效
WaitTimeWebSocket 握手等待时间1单位:s
KeepClean是否在会话结束后清理资源false
TokenWebSocket 连接密钥websocket

配置示例(YAML):

WebSocket:
  Port: 3000
  IsSsl: false
  Token: "websocket"

Swagger 文档(SwaggerDocument)

配置节点:SwaggerDocument。NuGet 包:Silky.Http.Swagger。适用于 Web 主机和网关主机。

属性说明缺省值备注
TitleSwagger UI 标题Swagger UI
DescriptionAPI 描述Swagger Document
VersionAPI 版本v1.0.0
RoutePrefixSwagger UI 路由前缀""空字符串表示根路径 /
OrganizationMode文档分组模式AllAndGroupNoGroup:不分组;Group:按服务分组;AllAndGroup:全量文档 + 服务分组
ShowMode服务条目显示方式AllAll:全部显示;Interface:只显示接口定义;RegisterCenter:只显示注册中心中的服务
EnableMultipleServiceKey是否支持多服务键(ServiceKey)展示true
EnableHashRouteHeader是否在请求头中启用哈希路由true
EnableAuthorized是否启用 Swagger 安全认证(Bearer Token)true
FormatAsV2是否以 OpenAPI v2 格式输出truefalse 则输出 OpenAPI v3
DocExpansionState文档默认展开状态List可选:List、Full、None
ShowDashboardService是否在 Swagger 中显示 Dashboard 内置服务false
XmlComments要加载的 XML 注释文件路径列表—
Groups自定义服务分组配置[]每项包含 ApplicationInterface、Title、Description、Version

配置示例(YAML):

SwaggerDocument:
  Title: "My Service API"
  Version: "v1.0.0"
  OrganizationMode: AllAndGroup
  EnableAuthorized: true
  RoutePrefix: ""
  XmlComments:
    - "MyService.Application.Contracts.xml"

控制台仪表盘(Dashboard)

配置节点:Dashboard。NuGet 包:Silky.Http.Dashboard。适用于网关主机。

属性说明缺省值备注
StatsPollingInterval仪表盘统计数据轮询间隔2000单位:ms
UseAuth是否启用登录验证true
UseTenant是否支持租户登录true
DashboardLoginApi仪表盘登录接口路径/api/account/login
UserNameFiledName登录请求中用户名字段名UserName
PasswordFiledName登录请求中密码字段名Password
TenantNameFiledName登录请求中租户名字段名TenantName
WrapperResponse是否对登录接口响应进行统一包装true
DisplayWebApiInSwagger是否在 Swagger 中显示仪表盘自身的 APIfalse
PathBase仪表盘路由基础路径—用于反向代理场景下的路径前缀
ExternalLinks仪表盘中显示的外部链接列表[]每项包含 Title、Path、Icon

配置示例(YAML):

Dashboard:
  UseAuth: true
  UseTenant: false
  DashboardLoginApi: "/api/account/login"
  StatsPollingInterval: 2000

分布式事务(DistributedTransaction)

配置节点:DistributedTransaction。NuGet 包:Silky.Transaction.Tcc。

属性说明缺省值备注
TransactionType分布式事务类型Tcc目前仅支持 Tcc(Try-Confirm-Cancel)
ScheduledInitDelay定时任务启动延迟20单位:s;应用启动后延迟多久开始执行定时恢复任务
ScheduledRecoveryDelay事务恢复定时任务执行间隔30单位:s
ScheduledCleanDelay事务清理定时任务执行间隔120单位:s
RecoverDelayTime事务超过该时长仍未完成时触发恢复259200单位:s,默认 3 天
CleanDelayTime事务超过该时长后触发清理86400单位:s,默认 1 天
Limit每次定时恢复/清理处理的最大记录数100
RetryMax事务恢复最大重试次数10
PhyDeleted是否物理删除已完成的事务记录truefalse 则标记删除(软删除)
StoreDays事务记录最长保留天数3

配置示例(YAML):

DistributedTransaction:
  TransactionType: Tcc
  ScheduledRecoveryDelay: 30
  RetryMax: 10
  PhyDeleted: true
  StoreDays: 3

HTTP 限流(RateLimiting)

配置节点:RateLimiting。NuGet 包:Silky.Http.RateLimit。基于 AspNetCoreRateLimit 实现,支持客户端 IP 限流和客户端 ID 限流两种策略。

客户端 IP 限流

配置节点:RateLimiting:Ip,策略配置:RateLimiting:Ip:Policies

RateLimiting:
  Ip:
    EnableEndpointRateLimiting: true
    StackBlockedRequests: false
    RealIpHeader: X-Real-IP
    GeneralRules:
      - Endpoint: "*"
        Period: "1s"
        Limit: 100

客户端 ID 限流

配置节点:RateLimiting:Client,策略配置:RateLimiting:Client:Policies

RateLimiting:
  Client:
    EnableEndpointRateLimiting: true
    ClientIdHeader: X-ClientId
    GeneralRules:
      - Endpoint: "*"
        Period: "1m"
        Limit: 1000

提示

更完整的 AspNetCoreRateLimit 配置文档请参阅 AspNetCoreRateLimit 官方文档。

编辑当前页