网关属性配置

本篇主要讲解如何在 Apache Shenyu 网关配置 ShenYu 的相关属性。

网关属性配置 - 图1

属性配置

  1. shenyu:
  2. netty:
  3. tcp:
  4. webServerFactoryEnabled: true
  5. selectCount: 1
  6. workerCount: 4
  7. serverSocketChannel:
  8. soRcvBuf: 87380
  9. soBackLog: 128
  10. soReuseAddr: false
  11. connectTimeoutMillis: 10000
  12. writeBufferHighWaterMark: 65536
  13. writeBufferLowWaterMark: 32768
  14. writeSpinCount: 16
  15. autoRead: true
  16. allocType: "pooled"
  17. socketChannel:
  18. soKeepAlive: false
  19. soReuseAddr: false
  20. soLinger: -1
  21. tcpNoDelay: true
  22. soRcvBuf: 87380
  23. soSndBuf: 16384
  24. ipTos: 0
  25. allowHalfClosure: false
  26. connectTimeoutMillis: 10000
  27. writeBufferHighWaterMark: 65536
  28. writeBufferLowWaterMark: 32768
  29. writeSpinCount: 16
  30. autoRead: true
  31. allocType: "pooled"
  32. instance:
  33. enabled: false
  34. registerType: zookeeper #etcd #consul
  35. serverLists: localhost:2181 #http://localhost:2379 #localhost:8848
  36. props:
  37. # httpclient:
  38. # strategy: webClient
  39. # connectTimeout: 45000
  40. # responseTimeout: 3000
  41. # readerIdleTime: 3000
  42. # writerIdleTime: 3000
  43. # allIdleTime: 3000
  44. # readTimeout: 3000
  45. # writeTimeout: 3000
  46. # wiretap: false
  47. # keepAlive: false
  48. # pool:
  49. # type: ELASTIC
  50. # name: proxy
  51. # maxConnections: 16
  52. # acquireTimeout: 45000
  53. # maxIdleTime: 3000
  54. # proxy:
  55. # host:
  56. # port:
  57. # username:
  58. # password:
  59. # nonProxyHostsPattern:
  60. # ssl:
  61. # useInsecureTrustManager: false
  62. # keyStoreType: PKCS12
  63. # keyStorePath: classpath:keystore.p12
  64. # keyStorePassword: 123456
  65. # keyStoreProvider:
  66. # keyPassword: 123456
  67. # trustedX509Certificates:
  68. # handshakeTimeout:
  69. # closeNotifyFlushTimeout:
  70. # closeNotifyReadTimeout:
  71. # defaultConfigurationType:
  72. sync:
  73. websocket:
  74. urls: ws://localhost:9095/websocket
  75. # zookeeper:
  76. # url: localhost:2181
  77. # sessionTimeout: 5000
  78. # connectionTimeout: 2000
  79. # http:
  80. # url: http://localhost:9095
  81. # nacos:
  82. # url: localhost:8848
  83. # namespace: 1c10d748-af86-43b9-8265-75f487d20c6c
  84. # username:
  85. # password:
  86. # acm:
  87. # enabled: false
  88. # endpoint: acm.aliyun.com
  89. # namespace:
  90. # accessKey:
  91. # secretKey:
  92. # etcd:
  93. # url: http://localhost:2379
  94. # consul:
  95. # url: http://localhost:8500
  96. # waitTime: 1000
  97. # watchDelay: 1000
  98. cross:
  99. enabled: true
  100. allowedHeaders:
  101. allowedMethods: "*"
  102. allowedOrigin: "*"
  103. allowedExpose: "*"
  104. maxAge: "18000"
  105. allowCredentials: true
  106. switchConfig:
  107. local: true
  108. file:
  109. enabled: true
  110. maxSize : 10
  111. exclude:
  112. enabled: false
  113. paths:
  114. - /favicon.ico
  115. extPlugin:
  116. path:
  117. enabled: true
  118. threads: 1
  119. scheduleTime: 300
  120. scheduleDelay: 30
  121. scheduler:
  122. enabled: false
  123. type: fixed
  124. threads: 16
  125. upstreamCheck:
  126. enabled: false
  127. timeout: 3000
  128. healthyThreshold: 1
  129. unhealthyThreshold: 1
  130. interval: 5000
  131. printEnabled: true
  132. printInterval: 60000

属性详解

shenyu.NettyTcpProperties 配置

ShenYu Netty 配置

NameTypeDefaultRequiredDescription
webServerFactoryEnabledBooleantrueNo是否开启自定义参数,true-开启,false-可以自行配置NettyReactiveWebServerFactory
selectCountInteger1NoNetty 选择器数
workerCountInteger4NoNetty 工作线程数
ServerSocketChannelConfig
soRcvBufInteger87380NoSocket参数,TCP数据接收缓冲区大小
soBackLogInteger128NoSocket参数,服务端接受连接的队列长度
soReuseAddrBooleanfalseNoSocket 参数,是否复用地址
connectTimeoutMillisInteger10000NoNetty 参数,连接超时时间
writeBufferHighWaterMarkInteger65536NoNetty 参数,通道水位线上限
writeBufferLowWaterMarkInteger32768NoNetty 参数,通道水位线下限
writeSpinCountInteger16NoNetty参数,一个Loop写操作执行的最大次数
autoReadBooleantrueNoNetty参数,自动读取
allocTypeStringpooledNoNetty参数,ByteBuf的分配器
SocketChannelConfig
soKeepAliveBooleanfalseNoSocket 参数,是否启用心跳保活机制
soReuseAddrBooleanfalseNoSocket 参数,是否复用地址
soLingerInteger-1NoSocket 参数,关闭 Socket 的延迟时间
tcpNoDelayBooleantrueNoSocket 参数,是否启用 Nagle 算法
soRcvBufInteger87380NoSocket参数,TCP数据接收缓冲区大小
soSndBufInteger128No
ipTosInteger0NoIP参数,设置IP头部的Type-of-Service字段,用于描述IP包的优先级和QoS选项
allowHalfClosureBooleanfalseNoNetty参数,一个连接的远端关闭时本地端是否关闭
connectTimeoutMillisInteger10000NoNetty 参数,连接超时时间
writeBufferHighWaterMarkInteger65536NoNetty 参数,通道水位线上限
writeBufferLowWaterMarkInteger32768NoNetty 参数,通道水位线下限
writeSpinCountInteger16NoNetty参数,一个Loop写操作执行的最大次数
autoReadBooleantrueNoNetty参数,自动读取
allocTypeStringpooledNoNetty参数,ByteBuf的分配器
shenyu.instance 配置

这是 ShenYu 网关注册到注册中心的相关配置,注册中心配置请参考 注册中心配置

名称类型默认值是否必填说明
enabledbooleanfalse是否启动
registerTypeStringzookeeper使用哪个注册中心,目前支持zookeeper、etcd
serverListsStringlocalhost:2181注册中心的地址。若使用集群,用 , 分隔
props使用不同注册类型时,属性取值不同。
  • props配置

使用不同的注册中心时,属性取值不同。

当注册类型为 zookeeper 时,支持的属性配置如下:

名称类型默认值是否必填说明
sessionTimeoutint30000session超时时间(毫秒)
connectionTimeoutint3000连接超时时间(毫秒)

当注册类型为 etcd 时,支持的属性配置如下:

名称类型默认值是否必填说明
etcdTimeoutint30000etcd超时时间(毫秒)
etcdTTLint5租约生存时间(秒)
shenyu.httpclient 配置

这是 ShenYu 网关中代理Http及SpringCloud协议后,用于发送代理请求的HttpClient配置。

NameTypeDefaultRequiredDescription
strategyStringwebClientNoHttpClientPlugin实现策略(默认使用webClietnt):
- webClient:使用WebClientPlugin
- netty:使用NettyHttpClientPlugin
connectTimeoutint45000No连接超时时间 (毫秒),默认值为 45000
responseTimeoutint3000No结果超时时间 (毫秒),默认值为 3000
readerIdleTimeint3000No指定读空闲超时时间 (毫秒),默认值为 3000
writerIdleTimeint3000No指定写空闲超时时间 (毫秒),默认值为 3000
allIdleTimeint3000No指定读和写超时时间 (毫秒),默认值为 3000
readTimeoutint3000No读取超时 (毫秒),默认值为 3000
writeTimeoutint3000No输出超时 (millisecond),默认值为 3000
wiretapBooleanfalseNo启用 Netty HttpClient 的窃听调试,默认值为 false
keepAliveBooleanfalseNo启用或禁用请求的 Keep-Alive 支持,默认值为 false
poolHttpClient 连接池配置
proxyHttpClient 代理配置
sslHttpClient SSL配置
  • pool config

HttpClient连接池配置:

NameTypeDefaultRequiredDescription
typeStringELASTICNoHttpClient连接池类型,默认值为ELASTIC
- ELASTIC: 连接池可以按需缓存和增长。
- FIXED: 连接池缓存并重用,有固定的最大连接数。
- DISABLED: 连接池总是会创建一个新的连接。
nameStringproxyNo连接池映射名称,默认为proxy
maxConnectionsint2可用处理器数,最小值为16No仅适用于 FIXED 类型,在现有连接上开始挂起获取之前的最大连接数。
默认值为可用处理器数2。
(最小值为 16)
acquireTimeoutint45000No仅适用于 FIXED 类型,等待获取连接的最长时间(毫秒)。默认值为 45000
maxIdleTimeintNULLNoChannel 空闲多久关闭,如果为空,没有最大空闲关闭时间。
  • Proxy config

Netty HttpClient 代理的相关配置:

NameTypeDefaultRequiredDescription
hostStringnullNoNetty HttpClient 代理配置的主机名。
portStringnullNoNetty HttpClient 的代理配置端口。
usernameStringnullNoNetty HttpClient 代理配置的用户名。
passwordStringnullNoNetty HttpClient 代理配置的密码。
nonProxyHostsPatternStringnullNo直连的主机列表的正则表达式 (Java)。
  • SSL config

网关路由可以同时支持路由到http和https的后端服务,以下为SSL相关配置:

NameTypeDefaultRequiredDescription
useInsecureTrustManagerBooleanfalseNo是否信任所有下游证书,默认false
keyStoreTypeStringPKCS12NoSSL 证书类型。
keyStorePathStringNoSSL 证书路径,可以放在 classpath 下。
keyStorePasswordStringNoSSL 证书密码。
keyStoreProviderStringNoSSL 证书提供者。
keyPasswordStringNoSSL 证书Key的密码。
trustedX509CertificatesArrayNullNo配置自己的信任的证书列表。
handshakeTimeoutint10000NoSSL握手超时时间(毫秒),默认值为 10000
closeNotifyFlushTimeoutint3000NoSSL close_notify 刷新超时(毫秒)默认值为 3000
closeNotifyReadTimeoutint0NoSSL close_notify 读取超时(毫秒)默认值为 0
defaultConfigurationTypeStringTCPNoSslContextBuilder 的默认配置, 默认为 TCP.
- H2: SslProvider 将根据 OpenSsl.isAlpnSupported()、SslProvider.HTTP2_CIPHERS、ALPN 支持、HTTP/1.1 和 HTTP/2 支持进行设置
- TCP: SslProvider 将根据 OpenSsl.isAvailable() 设置
- NONE: 不会有默认配置
过滤器相关配置
  • shenyu.file 配置

文件过滤器的相关配置。

名称类型默认值是否必填说明
enabledBooleanfalse是否开启文件大小过滤
maxSizeInteger10No上传文件最大值 ,(单位:MB)
  • shenyu.cross 配置

跨域相关配置。

名称类型默认值是否必填说明
enabledBooleanfalse是否支持跨域请求
allowedHeadersStringx-requested-with, authorization, Content-Type, Authorization, credential, X-XSRF-TOKEN, token, username, clientNo允许的Header头,多个请用 “,” 分割。新的”allowedHeaders”会在默认值基础上,去除重复的追加到”Access-Control-Allow-Headers”。
allowedMethodsStringNo允许的方法
allowedOriginString““No允许的Origin,当取值为””时,使用request.getHeaders().getOrigin()设置Access-Control-Allow-Origin
allowedExposeString“*”No允许的Expose
maxAgeString“18000”No最大年龄 (ms)
allowCredentialsBooleantrueNo允许认证
  • shenyu.exclude 配置

拒绝指定请求经过网关的相关配置

名称类型默认值是否必填说明
enabledBooleanfalse是否拒绝指定请求经过网关
pathsArray匹配该列表的请求不经过网关(支持路径匹配)
shenyu.sync 配置

网关和Admin端使用数据同步的相关配置。

使用websocket进行数据同步的属性配置如下:

名称类型默认值是否必填说明
urlsStringAdmin的websocket服务地址,多个地址用 , 分开 。

使用zookeeper进行数据同步的属性配置如下:

名称类型默认值是否必填说明
urlStringzookeeper的连接地址
sessionTimeoutintsession的超时时间(毫秒)
connectionTimeoutint连接超时时间(毫秒)

使用http长轮询进行数据同步的属性配置如下:

名称类型默认值是否必填说明
urlStringAdmin的服务地址

使用nacos进行数据同步的属性配置如下:

名称类型默认值是否必填说明
urlStringnacos连接地址
namespaceString命名空间
usernameString用户名
passwordString密码
acm阿里云ACM服务配置
  • acm配置
名称类型默认值是否必填说明
enabledbooleanfalse是否启用
endpointStringACM服务地址
namespaceStringnamespace
accessKeyStringaccessKey
secretKeyStringsecretKey

使用etcd进行数据同步的属性配置如下:

名称类型默认值是否必填说明
urlStringetcd连接地址

使用consul进行数据同步的属性配置如下:

名称类型默认值是否必填说明
urlStringconsul连接地址
waitTimeint请求consul服务拉取配置信息的超时时间(毫秒)
watchDelayint同步间隔(毫秒)
shenyu.extPlugin config

Apache ShenYu对于动态加载自定义插件的配置

NameTypeDefaultRequiredDescription
enabledBooleantrueNo是否开启动态加载自定义插件,默认开启
pathStringFalse动态加载自定义插件的路径,如果没配,默认为相对于当前网关路径下的 :/ext/lib,用户也可以使用-Dplugin-ext指定
threadsInteger1False动态加载自定义插件的线程数
scheduleTimeInteger300False动态加载自定义插件的间隔时间 ,单元:秒
scheduleDelayInteger30False网关启动多久后去动态加载,单元:秒
shenyu.scheduler config

Apache ShenYu 调度线程模型配置

NameTypeDefaultRequiredDescription
enabledBooleanfalseNo是否开启使用调度线程
typeStringfixedFalse调度线程池类型,默认为fixed,不配置或者其他则为弹性线程池
threadsIntegerMath.max((Runtime.getRuntime().availableProcessors() << 1) + 1, 16)False固定线程池类型时候的线程数量
shenyu.upstreamCheck config

Apache ShenYu动态检测upstream的配置

NameTypeDefaultRequiredDescription
enabledBooleanfalseNo是否检测
timeoutInteger3000False超时配置 (ms)
healthyThresholdInteger1False健康因子
unhealthyThresholdInteger1False不健康因子
intervalInteger5000False检测的调度间隔时间
printEnabledBooleantrueNo是否打印日志
printIntervalInteger60000False打印日志的间隔调度时间
shenyu.switchConfig config

Apache ShenYu开关配置

NameTypeDefaultRequiredDescription
localBooleantrueNo是否开启本地模式,如果开启,本地操作数据,默认开启