You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shenyu.apache.org by gi...@apache.org on 2024/02/06 08:58:13 UTC
(shenyu-website) branch asf-site updated: deploy: 9d4f8c6cffb7486f9989ed2a096128e9e8f29bc4
This is an automated email from the ASF dual-hosted git repository.
github-bot pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/shenyu-website.git
The following commit(s) were added to refs/heads/asf-site by this push:
new 7a73e1d52d deploy: 9d4f8c6cffb7486f9989ed2a096128e9e8f29bc4
7a73e1d52d is described below
commit 7a73e1d52d5824d218fb5f18c76529167b7509cc
Author: github-actions[bot] <gi...@users.noreply.github.com>
AuthorDate: Tue Feb 6 08:58:03 2024 +0000
deploy: 9d4f8c6cffb7486f9989ed2a096128e9e8f29bc4
---
404.html | 8 +-
assets/js/052ca6ab.5d3c03fa.js | 1 -
assets/js/052ca6ab.e18dd455.js | 1 +
assets/js/0824112e.76a78464.js | 1 -
assets/js/0824112e.c440c474.js | 1 +
assets/js/08867c29.1cb89afb.js | 1 +
assets/js/08867c29.575f9d27.js | 1 -
assets/js/0b6e15f8.9a233e2f.js | 1 -
assets/js/0b6e15f8.ecfd37b4.js | 1 +
assets/js/0f6f7a4b.e4697001.js | 1 -
assets/js/0f6f7a4b.ffbf5baa.js | 1 +
assets/js/116e6d8f.3e1f0aca.js | 1 +
assets/js/116e6d8f.4ad60f80.js | 1 -
assets/js/119a2ec9.2c81be7e.js | 1 -
assets/js/119a2ec9.799ad161.js | 1 +
assets/js/1659b332.4ae08e87.js | 1 -
assets/js/1659b332.d26906dd.js | 1 +
assets/js/1a04ab40.361837d1.js | 1 -
assets/js/1a04ab40.e8d5f7d3.js | 1 +
assets/js/259d3cfe.7a491066.js | 1 -
assets/js/259d3cfe.a6bec726.js | 1 +
assets/js/267487da.8e94fa86.js | 1 -
assets/js/267487da.bbca7a99.js | 1 +
assets/js/2de77161.37fb498c.js | 1 +
assets/js/2de77161.a151e455.js | 1 -
assets/js/2f9b393f.724f3b92.js | 1 -
assets/js/2f9b393f.b087af8f.js | 1 +
assets/js/380526c3.5f571ebc.js | 1 +
assets/js/380526c3.f4987f4e.js | 1 -
assets/js/3b810fa0.b57b644a.js | 1 -
assets/js/3b810fa0.ff6954c3.js | 1 +
assets/js/3be0678d.75c1a525.js | 1 -
assets/js/3be0678d.7d2c2952.js | 1 +
assets/js/3c1d5675.c6025dad.js | 1 +
assets/js/3c1d5675.d1e270ca.js | 1 -
assets/js/3c32e005.3646e338.js | 1 +
assets/js/3c32e005.b18879b8.js | 1 -
assets/js/3e30bf86.3f06ccd5.js | 1 -
assets/js/3e30bf86.a24e374c.js | 1 +
assets/js/3e51ef3b.18f219e7.js | 1 +
assets/js/3e51ef3b.e7c3a9d5.js | 1 -
assets/js/3ec2dd5b.692b3ec5.js | 1 -
assets/js/3ec2dd5b.8cb6dba2.js | 1 +
assets/js/40ddf5e5.238d2cf2.js | 1 -
assets/js/40ddf5e5.a6b094da.js | 1 +
assets/js/43105b19.130403a1.js | 1 +
assets/js/43105b19.82d49a5e.js | 1 -
assets/js/44e9e6f4.2f432c18.js | 1 +
assets/js/44e9e6f4.569b4a06.js | 1 -
assets/js/4521f334.086103cb.js | 1 -
assets/js/4521f334.d37e8c60.js | 1 +
assets/js/4fb2eb56.1e37d6ca.js | 1 -
assets/js/4fb2eb56.353599e5.js | 1 +
assets/js/4fdb0457.66668ab1.js | 1 -
assets/js/4fdb0457.975d2194.js | 1 +
assets/js/5410ef7f.52e86794.js | 1 -
assets/js/5410ef7f.9f7332cd.js | 1 +
assets/js/54cfa241.06d723be.js | 1 +
assets/js/54cfa241.cb2224c7.js | 1 -
assets/js/55672386.02cf6b60.js | 1 -
assets/js/55672386.13121425.js | 1 +
assets/js/55b3f2e2.578d7072.js | 1 +
assets/js/55b3f2e2.712e7762.js | 1 -
assets/js/55f15e0e.77410e40.js | 1 -
assets/js/55f15e0e.b9b47f8a.js | 1 +
assets/js/5727a7c9.0d8468a6.js | 1 -
assets/js/5727a7c9.7faf4132.js | 1 +
assets/js/58ee83e2.742b5644.js | 1 +
assets/js/58ee83e2.85f61392.js | 1 -
assets/js/59735065.58dfac59.js | 1 -
assets/js/59735065.8db51641.js | 1 +
assets/js/60d30544.2b74d1c3.js | 1 -
assets/js/60d30544.fd7577f1.js | 1 +
assets/js/616119c6.165e1025.js | 1 +
assets/js/616119c6.652a34b0.js | 1 -
assets/js/63b97ac0.4f550892.js | 1 +
assets/js/63b97ac0.bbea5fe0.js | 1 -
assets/js/7540611d.72c3abb0.js | 1 -
assets/js/7540611d.b8f76799.js | 1 +
assets/js/7e9bc4f1.24eb57e3.js | 1 -
assets/js/7e9bc4f1.3b80375b.js | 1 +
assets/js/817af225.1438e71a.js | 1 +
assets/js/817af225.6b500455.js | 1 -
assets/js/81ecd7d9.61a8618f.js | 1 +
assets/js/81ecd7d9.b3261f54.js | 1 -
assets/js/82b01cda.46b70d1d.js | 1 -
assets/js/82b01cda.8ec779bd.js | 1 +
assets/js/831027cc.27597026.js | 1 +
assets/js/831027cc.9164f485.js | 1 -
assets/js/8452233b.0de85ebe.js | 1 +
assets/js/8452233b.f9b678f2.js | 1 -
assets/js/84fc8ece.1708e7ab.js | 1 -
assets/js/84fc8ece.dd910cb1.js | 1 +
assets/js/87137adb.776f3129.js | 1 -
assets/js/87137adb.a0a98f1d.js | 1 +
assets/js/8877b104.880d152d.js | 1 +
assets/js/8877b104.ce29e30a.js | 1 -
assets/js/8afb6277.58c9122d.js | 1 +
assets/js/8afb6277.82521001.js | 1 -
assets/js/8fcb083f.4d4723ac.js | 1 -
assets/js/8fcb083f.5ef3166a.js | 1 +
assets/js/947a0520.3c342a36.js | 1 -
assets/js/947a0520.f869fd31.js | 1 +
assets/js/94c195cb.02c77882.js | 1 -
assets/js/94c195cb.7fce5618.js | 1 +
assets/js/95e485e3.73ec6c94.js | 1 -
assets/js/95e485e3.fe46e905.js | 1 +
assets/js/97f557ce.2d0d6a5b.js | 1 +
assets/js/97f557ce.f7865a60.js | 1 -
assets/js/9bd813a2.1618d77d.js | 1 +
assets/js/9bd813a2.32d48fd9.js | 1 -
assets/js/9e8596f8.00949832.js | 1 -
assets/js/9e8596f8.437c2659.js | 1 +
assets/js/a0096cbe.31d91c97.js | 1 -
assets/js/a0096cbe.6771056c.js | 1 +
assets/js/a3552f5a.93a212a0.js | 1 -
assets/js/a3552f5a.c083adf2.js | 1 +
assets/js/a7023ddc.1b1273f4.js | 1 -
assets/js/a7023ddc.823c5cf3.js | 1 +
assets/js/aa12c159.9c4d5b35.js | 1 -
assets/js/aa12c159.e9ce10e1.js | 1 +
assets/js/ad622095.67d6e43c.js | 1 -
assets/js/ad622095.b27779df.js | 1 +
assets/js/b157d6b8.37c83ff8.js | 1 +
assets/js/b157d6b8.8c7c05cb.js | 1 -
assets/js/b5d8c0a0.734de33f.js | 1 +
assets/js/b5d8c0a0.f2ffcb61.js | 1 -
assets/js/b82d0e2d.ca6bf3e0.js | 1 +
assets/js/b82d0e2d.f8fba15f.js | 1 -
assets/js/ba4a7a1c.6ab6ab59.js | 1 -
assets/js/ba4a7a1c.ce6b3a80.js | 1 +
assets/js/bb2b5f22.6a4e407f.js | 1 -
assets/js/bb2b5f22.fa000122.js | 1 +
assets/js/bb7fdef6.d595a2be.js | 1 +
assets/js/bb7fdef6.ed3ae5b1.js | 1 -
assets/js/bce5470e.93edeb81.js | 1 +
assets/js/bce5470e.ef528753.js | 1 -
assets/js/bd113394.2ae3fedc.js | 1 +
assets/js/bd113394.43a13e90.js | 1 -
assets/js/c4cf7888.75c7dd7e.js | 1 +
assets/js/c4cf7888.b4011902.js | 1 -
assets/js/c59f34d8.7e73ab53.js | 1 +
assets/js/c59f34d8.b2738929.js | 1 -
assets/js/c5b72fd0.16b838a2.js | 1 +
assets/js/c5b72fd0.3d14bf67.js | 1 -
assets/js/c67c2a3d.84b9461d.js | 1 +
assets/js/c67c2a3d.efbc139b.js | 1 -
assets/js/caa240e0.0fbd3900.js | 1 -
assets/js/caa240e0.8dab0a5e.js | 1 +
assets/js/cd0e252c.0a5b7581.js | 1 -
assets/js/cd0e252c.3c3e254f.js | 1 +
assets/js/cdce4d88.5df4c5b3.js | 1 +
assets/js/cdce4d88.f16a9f0f.js | 1 -
assets/js/ce6a09fc.1b57ff1f.js | 1 +
assets/js/ce6a09fc.5168cd57.js | 1 -
assets/js/cee33d69.4017ff71.js | 1 +
assets/js/cee33d69.a36bc7bb.js | 1 -
assets/js/d124637b.07677b61.js | 1 -
assets/js/d124637b.d01999f1.js | 1 +
assets/js/d34575f9.8441b3f9.js | 1 +
assets/js/d34575f9.e0dbef4e.js | 1 -
assets/js/d4ae858d.243414e6.js | 1 +
assets/js/d4ae858d.fb092fd0.js | 1 -
assets/js/d9d26c48.4fe7ef1f.js | 1 -
assets/js/d9d26c48.998e7342.js | 1 +
assets/js/defe2309.870f044c.js | 1 +
assets/js/defe2309.a624f17b.js | 1 -
assets/js/e0f5783e.a7a455d3.js | 1 +
assets/js/e0f5783e.e8a5b2af.js | 1 -
assets/js/e14e2680.985d5361.js | 1 +
assets/js/e14e2680.d8bd0eec.js | 1 -
assets/js/e1b162fa.80dfc6b9.js | 1 -
assets/js/e1b162fa.8405d6d3.js | 1 +
assets/js/e55ca4fc.0b9ef92d.js | 1 +
assets/js/e55ca4fc.b4289fe7.js | 1 -
assets/js/e6da6e1b.29633dea.js | 1 -
assets/js/e6da6e1b.8f59d57c.js | 1 +
assets/js/e800dce1.7e360074.js | 1 -
assets/js/e800dce1.af9f08d6.js | 1 +
assets/js/ea353db9.2c656743.js | 1 -
assets/js/ea353db9.9e4fee73.js | 1 +
assets/js/eade0d33.6ba18654.js | 1 -
assets/js/eade0d33.9e4785c3.js | 1 +
assets/js/efd0111a.d0f40179.js | 1 +
assets/js/efd0111a.fca3f6ab.js | 1 -
assets/js/f292e823.134d7958.js | 1 -
assets/js/f292e823.f1f5cbbf.js | 1 +
assets/js/f2ce4146.11a1ce74.js | 1 -
assets/js/f2ce4146.437df4f5.js | 1 +
assets/js/main.38e23c42.js | 2 -
assets/js/main.f80cece7.js | 2 +
...js.LICENSE.txt => main.f80cece7.js.LICENSE.txt} | 0
assets/js/runtime~main.3f429ee8.js | 1 +
assets/js/runtime~main.80cd9f2f.js | 1 -
.../index.html | 12 +-
.../index.html | 12 +-
.../index.html | 12 +-
.../index.html | 12 +-
.../index.html | 12 +-
blog/E2eTest-Analysis/index.html | 12 +-
blog/IntegrationTest-Analysis/index.html | 12 +-
.../index.html | 12 +-
.../index.html | 10 +-
.../index.html | 12 +-
.../index.html | 12 +-
.../index.html | 12 +-
.../index.html | 12 +-
.../index.html | 12 +-
.../index.html | 12 +-
.../index.html | 12 +-
.../index.html | 12 +-
blog/SPI-SourceCode-Analysis-SPI/index.html | 10 +-
.../index.html | 12 +-
.../index.html | 10 +-
blog/atom.xml | 142 ++++++-------
blog/index.html | 10 +-
blog/page/2/index.html | 93 +++++----
blog/rss.xml | 142 ++++++-------
blog/tags/apache-shen-yu/index.html | 206 +++++++++---------
blog/tags/context-path/index.html | 10 +-
blog/tags/data-sync/index.html | 98 ++++-----
blog/tags/divide/index.html | 10 +-
blog/tags/dubbo/index.html | 10 +-
blog/tags/e-2-e-test/index.html | 10 +-
blog/tags/etcd/index.html | 10 +-
blog/tags/ext/index.html | 10 +-
blog/tags/first-start/index.html | 10 +-
blog/tags/http/index.html | 12 +-
blog/tags/index.html | 8 +-
blog/tags/integration-test/index.html | 10 +-
blog/tags/load-balance/index.html | 10 +-
blog/tags/nacos/index.html | 10 +-
blog/tags/param-mapping/index.html | 10 +-
blog/tags/plugin/index.html | 16 +-
blog/tags/rate-limiter/index.html | 10 +-
blog/tags/register-center/index.html | 10 +-
blog/tags/spi/index.html | 40 ++--
blog/tags/websocket/index.html | 10 +-
blog/tags/zookeeper/index.html | 10 +-
community/code-suggestions/index.html | 10 +-
community/committer/index.html | 10 +-
community/community/index.html | 10 +-
community/contributor-guide/index.html | 10 +-
community/create-repository/index.html | 10 +-
community/faq/index.html | 10 +-
community/icla/index.html | 10 +-
community/issue-pr/index.html | 10 +-
community/pmc/index.html | 10 +-
community/release-guide/index.html | 10 +-
.../shenyu-client-dotnet-release-guide/index.html | 10 +-
.../shenyu-client-golang-release-guide/index.html | 10 +-
community/shenyu-nginx-release-guide/index.html | 10 +-
community/shenyu-wasm-release-guide/index.html | 10 +-
community/use-apache-email/index.html | 10 +-
community/user-registration/index.html | 10 +-
.../admin/dictionary-management/index.html | 8 +-
.../admin/plugin-handle-explanation/index.html | 8 +-
.../admin/selector-and-rule/index.html | 8 +-
docs/2.3.0-Legacy/design/config/index.html | 8 +-
docs/2.3.0-Legacy/design/data-sync/index.html | 8 +-
.../2.3.0-Legacy/design/database-design/index.html | 8 +-
docs/2.3.0-Legacy/design/meta-data/index.html | 8 +-
.../developer-guide/custom-filter/index.html | 8 +-
.../custom-parsing-ip-and-host/index.html | 8 +-
.../developer-guide/custom-plugin/index.html | 8 +-
.../developer-guide/custom-result/index.html | 8 +-
.../custom-sign-algorithm/index.html | 8 +-
.../developer-soul-client/index.html | 8 +-
.../developer-guide/file-and-image/index.html | 8 +-
.../developer-guide/soul-optimize/index.html | 8 +-
.../2.3.0-Legacy/developer-guide/thread/index.html | 8 +-
docs/2.3.0-Legacy/doc-download/index.html | 8 +-
docs/2.3.0-Legacy/index/index.html | 8 +-
.../plugins/context-path-plugin/index.html | 8 +-
docs/2.3.0-Legacy/plugins/divide-plugin/index.html | 8 +-
docs/2.3.0-Legacy/plugins/dubbo-plugin/index.html | 8 +-
.../2.3.0-Legacy/plugins/hystrix-plugin/index.html | 8 +-
.../2.3.0-Legacy/plugins/monitor-plugin/index.html | 8 +-
.../plugins/rate-limiter-plugin/index.html | 8 +-
.../plugins/redirect-plugin/index.html | 8 +-
.../plugins/resilience4j-plugin/index.html | 8 +-
.../2.3.0-Legacy/plugins/rewrite-plugin/index.html | 8 +-
.../plugins/sentinel-plugin/index.html | 8 +-
docs/2.3.0-Legacy/plugins/sign-plugin/index.html | 8 +-
docs/2.3.0-Legacy/plugins/sofa-plugin/index.html | 8 +-
.../plugins/spring-cloud-plugin/index.html | 8 +-
docs/2.3.0-Legacy/plugins/waf-plugin/index.html | 8 +-
.../plugins/websocket-plugin/index.html | 8 +-
.../quick-start/quick-start-dubbo/index.html | 8 +-
.../quick-start/quick-start-grpc/index.html | 8 +-
.../quick-start/quick-start-http/index.html | 8 +-
.../quick-start/quick-start-sofa/index.html | 8 +-
.../quick-start/quick-start-springcloud/index.html | 8 +-
.../quick-start/quick-start-tars/index.html | 8 +-
.../register-center-access/index.html | 8 +-
.../register-center-design/index.html | 8 +-
docs/2.3.0-Legacy/team/index.html | 8 +-
.../users-guide/dubbo-proxy/index.html | 8 +-
.../2.3.0-Legacy/users-guide/http-proxy/index.html | 8 +-
.../users-guide/sofa-rpc-proxy/index.html | 8 +-
.../users-guide/soul-set-up/index.html | 8 +-
.../users-guide/spring-cloud-proxy/index.html | 8 +-
.../users-guide/use-data-sync/index.html | 8 +-
.../2.4.0/deployment/deployment-cluster/index.html | 8 +-
docs/2.4.0/deployment/deployment-custom/index.html | 8 +-
docs/2.4.0/deployment/deployment-docker/index.html | 8 +-
docs/2.4.0/deployment/deployment-helm/index.html | 8 +-
docs/2.4.0/deployment/deployment-k8s/index.html | 8 +-
docs/2.4.0/deployment/deployment-local/index.html | 8 +-
.../2.4.0/deployment/deployment-package/index.html | 8 +-
docs/2.4.0/design/data-sync/index.html | 8 +-
docs/2.4.0/design/database-design/index.html | 8 +-
docs/2.4.0/design/flow-control/index.html | 8 +-
.../2.4.0/design/register-center-design/index.html | 8 +-
docs/2.4.0/design/spi-design/index.html | 8 +-
docs/2.4.0/developer/custom-filter/index.html | 8 +-
.../custom-parsing-ip-and-host/index.html | 8 +-
docs/2.4.0/developer/custom-plugin/index.html | 8 +-
docs/2.4.0/developer/custom-result/index.html | 8 +-
.../developer/custom-sign-algorithm/index.html | 8 +-
.../developer/developer-shenyu-client/index.html | 8 +-
docs/2.4.0/developer/file-and-image/index.html | 8 +-
docs/2.4.0/developer/shenyu-optimize/index.html | 8 +-
.../developer/spi/custom-load-balance/index.html | 8 +-
.../developer/spi/custom-match-mode/index.html | 8 +-
.../spi/custom-metrics-monitor/index.html | 8 +-
.../developer/spi/custom-parameter-data/index.html | 8 +-
.../spi/custom-predicate-judge/index.html | 8 +-
.../developer/spi/custom-rate-limiter/index.html | 8 +-
docs/2.4.0/developer/thread-model/index.html | 8 +-
docs/2.4.0/index/index.html | 8 +-
.../jwt-plugin/index.html | 8 +-
.../oauth2-plugin/index.html | 8 +-
.../sign-plugin/index.html | 8 +-
.../waf-plugin/index.html | 8 +-
.../fault-tolerance/hystrix-plugin/index.html | 8 +-
.../fault-tolerance/rate-limiter-plugin/index.html | 8 +-
.../fault-tolerance/resilience4j-plugin/index.html | 8 +-
.../fault-tolerance/sentinel-plugin/index.html | 8 +-
.../http-handle/context-path-plugin/index.html | 8 +-
.../http-handle/divide-plugin/index.html | 8 +-
.../http-handle/modify-response-plugin/index.html | 8 +-
.../http-handle/param-mapping-plugin/index.html | 8 +-
.../http-handle/redirect-plugin/index.html | 8 +-
.../http-handle/request-plugin/index.html | 8 +-
.../http-handle/rewrite-plugin/index.html | 8 +-
.../http-handle/websocket-plugin/index.html | 8 +-
.../observability/logging-plugin/index.html | 8 +-
.../observability/monitor-plugin/index.html | 8 +-
.../rpc-proxy/dubbo-plugin/index.html | 8 +-
.../plugin-center/rpc-proxy/grpc-plugin/index.html | 8 +-
.../rpc-proxy/motan-plugin/index.html | 8 +-
.../plugin-center/rpc-proxy/sofa-plugin/index.html | 8 +-
.../rpc-proxy/spring-cloud-plugin/index.html | 8 +-
.../plugin-center/rpc-proxy/tars-plugin/index.html | 8 +-
.../2.4.0/quick-start/quick-start-dubbo/index.html | 8 +-
docs/2.4.0/quick-start/quick-start-grpc/index.html | 8 +-
docs/2.4.0/quick-start/quick-start-http/index.html | 8 +-
.../2.4.0/quick-start/quick-start-motan/index.html | 8 +-
docs/2.4.0/quick-start/quick-start-sofa/index.html | 8 +-
.../quick-start/quick-start-springcloud/index.html | 8 +-
docs/2.4.0/quick-start/quick-start-tars/index.html | 8 +-
.../admin-usage/data-permission/index.html | 8 +-
.../admin-usage/dictionary-management/index.html | 8 +-
.../plugin-handle-explanation/index.html | 8 +-
.../admin-usage/role-management/index.html | 8 +-
.../admin-usage/selector-and-rule/index.html | 8 +-
.../admin-property-config/index.html | 8 +-
.../client-property-config/index.html | 8 +-
.../gateway-property-config/index.html | 8 +-
docs/2.4.0/user-guide/proxy/dubbo-proxy/index.html | 8 +-
docs/2.4.0/user-guide/proxy/grpc-proxy/index.html | 8 +-
docs/2.4.0/user-guide/proxy/http-proxy/index.html | 8 +-
docs/2.4.0/user-guide/proxy/motan-proxy/index.html | 8 +-
.../user-guide/proxy/sofa-rpc-proxy/index.html | 8 +-
.../user-guide/proxy/spring-cloud-proxy/index.html | 8 +-
docs/2.4.0/user-guide/proxy/tars-proxy/index.html | 8 +-
.../user-guide/register-center-access/index.html | 8 +-
docs/2.4.0/user-guide/use-data-sync/index.html | 8 +-
.../2.4.1/deployment/deployment-cluster/index.html | 8 +-
docs/2.4.1/deployment/deployment-custom/index.html | 8 +-
docs/2.4.1/deployment/deployment-docker/index.html | 8 +-
docs/2.4.1/deployment/deployment-helm/index.html | 8 +-
docs/2.4.1/deployment/deployment-k8s/index.html | 8 +-
docs/2.4.1/deployment/deployment-local/index.html | 8 +-
.../2.4.1/deployment/deployment-package/index.html | 8 +-
docs/2.4.1/deployment/deployment-quick/index.html | 8 +-
docs/2.4.1/design/data-sync/index.html | 8 +-
docs/2.4.1/design/database-design/index.html | 8 +-
docs/2.4.1/design/flow-control/index.html | 8 +-
.../2.4.1/design/register-center-design/index.html | 8 +-
docs/2.4.1/design/spi-design/index.html | 8 +-
docs/2.4.1/developer/custom-filter/index.html | 8 +-
.../custom-parsing-ip-and-host/index.html | 8 +-
docs/2.4.1/developer/custom-plugin/index.html | 8 +-
docs/2.4.1/developer/custom-result/index.html | 8 +-
.../developer/custom-sign-algorithm/index.html | 8 +-
.../developer/developer-shenyu-client/index.html | 8 +-
docs/2.4.1/developer/file-and-image/index.html | 8 +-
docs/2.4.1/developer/local-model/index.html | 8 +-
docs/2.4.1/developer/shenyu-optimize/index.html | 8 +-
.../developer/spi/custom-load-balance/index.html | 8 +-
.../developer/spi/custom-match-mode/index.html | 8 +-
.../spi/custom-metrics-monitor/index.html | 8 +-
.../developer/spi/custom-parameter-data/index.html | 8 +-
.../spi/custom-predicate-judge/index.html | 8 +-
.../developer/spi/custom-rate-limiter/index.html | 8 +-
docs/2.4.1/developer/thread-model/index.html | 8 +-
docs/2.4.1/index/index.html | 8 +-
.../cryptor-request-plugin/index.html | 8 +-
.../cryptor-response-plugin/index.html | 8 +-
.../jwt-plugin/index.html | 8 +-
.../oauth2-plugin/index.html | 8 +-
.../sign-plugin/index.html | 8 +-
.../waf-plugin/index.html | 8 +-
.../common/general-context-plugin/index.html | 8 +-
.../fault-tolerance/hystrix-plugin/index.html | 8 +-
.../fault-tolerance/rate-limiter-plugin/index.html | 8 +-
.../fault-tolerance/resilience4j-plugin/index.html | 8 +-
.../fault-tolerance/sentinel-plugin/index.html | 8 +-
.../http-handle/context-path-plugin/index.html | 8 +-
.../http-handle/modify-response-plugin/index.html | 8 +-
.../http-handle/param-mapping-plugin/index.html | 8 +-
.../http-handle/redirect-plugin/index.html | 8 +-
.../http-handle/request-plugin/index.html | 8 +-
.../http-handle/rewrite-plugin/index.html | 8 +-
.../observability/logging-plugin/index.html | 8 +-
.../observability/monitor-plugin/index.html | 8 +-
.../plugin-center/proxy/divide-plugin/index.html | 8 +-
.../plugin-center/proxy/dubbo-plugin/index.html | 8 +-
.../plugin-center/proxy/grpc-plugin/index.html | 8 +-
.../plugin-center/proxy/motan-plugin/index.html | 8 +-
.../plugin-center/proxy/sofa-plugin/index.html | 8 +-
.../proxy/spring-cloud-plugin/index.html | 8 +-
.../plugin-center/proxy/tars-plugin/index.html | 8 +-
.../2.4.1/quick-start/quick-start-dubbo/index.html | 8 +-
docs/2.4.1/quick-start/quick-start-grpc/index.html | 8 +-
docs/2.4.1/quick-start/quick-start-http/index.html | 8 +-
.../2.4.1/quick-start/quick-start-motan/index.html | 8 +-
docs/2.4.1/quick-start/quick-start-sofa/index.html | 8 +-
.../quick-start/quick-start-springcloud/index.html | 8 +-
docs/2.4.1/quick-start/quick-start-tars/index.html | 8 +-
.../admin-usage/data-permission/index.html | 8 +-
.../admin-usage/dictionary-management/index.html | 8 +-
.../plugin-handle-explanation/index.html | 8 +-
.../admin-usage/role-management/index.html | 8 +-
.../admin-usage/selector-and-rule/index.html | 8 +-
.../admin-property-config/index.html | 8 +-
.../client-property-config/index.html | 8 +-
.../gateway-property-config/index.html | 8 +-
docs/2.4.1/user-guide/proxy/dubbo-proxy/index.html | 8 +-
docs/2.4.1/user-guide/proxy/grpc-proxy/index.html | 8 +-
docs/2.4.1/user-guide/proxy/http-proxy/index.html | 8 +-
docs/2.4.1/user-guide/proxy/motan-proxy/index.html | 8 +-
.../user-guide/proxy/sofa-rpc-proxy/index.html | 8 +-
.../user-guide/proxy/spring-cloud-proxy/index.html | 8 +-
docs/2.4.1/user-guide/proxy/tars-proxy/index.html | 8 +-
.../user-guide/register-center-access/index.html | 8 +-
docs/2.4.1/user-guide/use-data-sync/index.html | 8 +-
.../2.4.2/deployment/deployment-cluster/index.html | 8 +-
docs/2.4.2/deployment/deployment-custom/index.html | 8 +-
.../deployment-docker-compose/index.html | 8 +-
docs/2.4.2/deployment/deployment-docker/index.html | 8 +-
docs/2.4.2/deployment/deployment-helm/index.html | 8 +-
docs/2.4.2/deployment/deployment-k8s/index.html | 8 +-
docs/2.4.2/deployment/deployment-local/index.html | 8 +-
.../2.4.2/deployment/deployment-package/index.html | 8 +-
docs/2.4.2/deployment/deployment-quick/index.html | 8 +-
docs/2.4.2/design/data-sync/index.html | 8 +-
docs/2.4.2/design/database-design/index.html | 8 +-
docs/2.4.2/design/flow-control/index.html | 8 +-
.../2.4.2/design/register-center-design/index.html | 8 +-
docs/2.4.2/design/spi-design/index.html | 8 +-
docs/2.4.2/developer/custom-filter/index.html | 8 +-
.../custom-parsing-ip-and-host/index.html | 8 +-
docs/2.4.2/developer/custom-plugin/index.html | 8 +-
docs/2.4.2/developer/custom-result/index.html | 8 +-
.../developer/custom-sign-algorithm/index.html | 8 +-
docs/2.4.2/developer/debug-agent/index.html | 8 +-
.../developer/developer-shenyu-client/index.html | 8 +-
docs/2.4.2/developer/file-and-image/index.html | 8 +-
docs/2.4.2/developer/integration-test/index.html | 8 +-
docs/2.4.2/developer/local-model/index.html | 8 +-
docs/2.4.2/developer/shenyu-optimize/index.html | 8 +-
.../developer/spi/custom-load-balance/index.html | 8 +-
.../developer/spi/custom-match-mode/index.html | 8 +-
.../spi/custom-metrics-monitor/index.html | 8 +-
.../developer/spi/custom-parameter-data/index.html | 8 +-
.../spi/custom-predicate-judge/index.html | 8 +-
.../developer/spi/custom-rate-limiter/index.html | 8 +-
docs/2.4.2/developer/thread-model/index.html | 8 +-
docs/2.4.2/index/index.html | 8 +-
.../cryptor-request-plugin/index.html | 8 +-
.../cryptor-response-plugin/index.html | 8 +-
.../jwt-plugin/index.html | 8 +-
.../oauth2-plugin/index.html | 8 +-
.../sign-plugin/index.html | 8 +-
.../waf-plugin/index.html | 8 +-
.../common/general-context-plugin/index.html | 8 +-
.../fault-tolerance/hystrix-plugin/index.html | 8 +-
.../fault-tolerance/rate-limiter-plugin/index.html | 8 +-
.../fault-tolerance/resilience4j-plugin/index.html | 8 +-
.../fault-tolerance/sentinel-plugin/index.html | 8 +-
.../http-process/contextpath-plugin/index.html | 8 +-
.../http-process/modifyresponse-plugin/index.html | 8 +-
.../http-process/parammapping-plugin/index.html | 8 +-
.../http-process/redirect-plugin/index.html | 8 +-
.../http-process/request-plugin/index.html | 8 +-
.../http-process/rewrite-plugin/index.html | 8 +-
.../observability/logging-plugin/index.html | 8 +-
.../observability/monitor-plugin/index.html | 8 +-
.../plugin-center/proxy/divide-plugin/index.html | 8 +-
.../plugin-center/proxy/dubbo-plugin/index.html | 8 +-
.../plugin-center/proxy/grpc-plugin/index.html | 8 +-
.../plugin-center/proxy/motan-plugin/index.html | 8 +-
.../plugin-center/proxy/mqtt-plugin/index.html | 8 +-
.../plugin-center/proxy/sofa-plugin/index.html | 8 +-
.../proxy/spring-cloud-plugin/index.html | 8 +-
.../plugin-center/proxy/tars-plugin/index.html | 8 +-
.../2.4.2/quick-start/quick-start-dubbo/index.html | 8 +-
docs/2.4.2/quick-start/quick-start-grpc/index.html | 8 +-
docs/2.4.2/quick-start/quick-start-http/index.html | 8 +-
.../2.4.2/quick-start/quick-start-motan/index.html | 8 +-
docs/2.4.2/quick-start/quick-start-sofa/index.html | 8 +-
.../quick-start/quick-start-springcloud/index.html | 8 +-
docs/2.4.2/quick-start/quick-start-tars/index.html | 8 +-
.../admin-usage/data-permission/index.html | 8 +-
.../admin-usage/dictionary-management/index.html | 8 +-
.../plugin-handle-explanation/index.html | 8 +-
.../admin-usage/role-management/index.html | 8 +-
.../admin-usage/selector-and-rule/index.html | 8 +-
.../observability/observability/index.html | 8 +-
.../user-guide/observability/tracing/index.html | 8 +-
.../admin-property-config/index.html | 8 +-
.../client-property-config/index.html | 8 +-
.../gateway-property-config/index.html | 8 +-
docs/2.4.2/user-guide/proxy/dubbo-proxy/index.html | 8 +-
docs/2.4.2/user-guide/proxy/grpc-proxy/index.html | 8 +-
docs/2.4.2/user-guide/proxy/http-proxy/index.html | 8 +-
docs/2.4.2/user-guide/proxy/motan-proxy/index.html | 8 +-
.../user-guide/proxy/sofa-rpc-proxy/index.html | 8 +-
.../user-guide/proxy/spring-cloud-proxy/index.html | 8 +-
docs/2.4.2/user-guide/proxy/tars-proxy/index.html | 8 +-
.../user-guide/register-center-access/index.html | 8 +-
.../user-guide/register-center-instance/index.html | 8 +-
docs/2.4.2/user-guide/use-data-sync/index.html | 8 +-
docs/2.4.3/deployment/deployment-before/index.html | 8 +-
.../2.4.3/deployment/deployment-cluster/index.html | 8 +-
docs/2.4.3/deployment/deployment-custom/index.html | 8 +-
.../deployment-docker-compose/index.html | 8 +-
docs/2.4.3/deployment/deployment-docker/index.html | 8 +-
docs/2.4.3/deployment/deployment-helm/index.html | 8 +-
docs/2.4.3/deployment/deployment-k8s/index.html | 8 +-
docs/2.4.3/deployment/deployment-local/index.html | 8 +-
.../2.4.3/deployment/deployment-package/index.html | 8 +-
docs/2.4.3/deployment/deployment-quick/index.html | 8 +-
docs/2.4.3/design/data-sync/index.html | 8 +-
docs/2.4.3/design/database-design/index.html | 8 +-
docs/2.4.3/design/flow-control/index.html | 8 +-
.../2.4.3/design/register-center-design/index.html | 8 +-
docs/2.4.3/design/spi-design/index.html | 8 +-
docs/2.4.3/developer/custom-filter/index.html | 8 +-
.../custom-parsing-ip-and-host/index.html | 8 +-
docs/2.4.3/developer/custom-plugin/index.html | 8 +-
docs/2.4.3/developer/custom-result/index.html | 8 +-
.../developer/custom-sign-algorithm/index.html | 8 +-
.../developer/developer-shenyu-client/index.html | 8 +-
docs/2.4.3/developer/file-and-image/index.html | 8 +-
docs/2.4.3/developer/integration-test/index.html | 8 +-
docs/2.4.3/developer/local-model/index.html | 8 +-
docs/2.4.3/developer/shenyu-optimize/index.html | 8 +-
.../developer/spi/custom-load-balance/index.html | 8 +-
.../developer/spi/custom-match-mode/index.html | 8 +-
.../spi/custom-metrics-monitor/index.html | 8 +-
.../developer/spi/custom-parameter-data/index.html | 8 +-
.../spi/custom-predicate-judge/index.html | 8 +-
.../developer/spi/custom-rate-limiter/index.html | 8 +-
docs/2.4.3/developer/thread-model/index.html | 8 +-
docs/2.4.3/index/index.html | 8 +-
.../cryptor-request-plugin/index.html | 8 +-
.../cryptor-response-plugin/index.html | 8 +-
.../jwt-plugin/index.html | 8 +-
.../oauth2-plugin/index.html | 8 +-
.../sign-plugin/index.html | 8 +-
.../waf-plugin/index.html | 8 +-
.../plugin-center/cache/cache-plugin/index.html | 8 +-
.../common/general-context-plugin/index.html | 8 +-
.../fault-tolerance/hystrix-plugin/index.html | 8 +-
.../fault-tolerance/rate-limiter-plugin/index.html | 8 +-
.../fault-tolerance/resilience4j-plugin/index.html | 8 +-
.../fault-tolerance/sentinel-plugin/index.html | 8 +-
.../http-process/contextpath-plugin/index.html | 8 +-
.../http-process/modifyresponse-plugin/index.html | 8 +-
.../http-process/parammapping-plugin/index.html | 8 +-
.../http-process/redirect-plugin/index.html | 8 +-
.../http-process/request-plugin/index.html | 8 +-
.../http-process/rewrite-plugin/index.html | 8 +-
.../observability/logging-plugin/index.html | 8 +-
.../observability/logging-rocketmq/index.html | 8 +-
.../observability/metrics-plugin/index.html | 8 +-
.../plugin-center/proxy/divide-plugin/index.html | 8 +-
.../plugin-center/proxy/dubbo-plugin/index.html | 8 +-
.../plugin-center/proxy/grpc-plugin/index.html | 8 +-
.../plugin-center/proxy/motan-plugin/index.html | 8 +-
.../plugin-center/proxy/mqtt-plugin/index.html | 8 +-
.../plugin-center/proxy/sofa-plugin/index.html | 8 +-
.../proxy/spring-cloud-plugin/index.html | 8 +-
.../plugin-center/proxy/tars-plugin/index.html | 8 +-
.../proxy/websocket-plugin/index.html | 8 +-
.../2.4.3/quick-start/quick-start-dubbo/index.html | 8 +-
docs/2.4.3/quick-start/quick-start-grpc/index.html | 8 +-
docs/2.4.3/quick-start/quick-start-http/index.html | 8 +-
.../2.4.3/quick-start/quick-start-motan/index.html | 8 +-
docs/2.4.3/quick-start/quick-start-sofa/index.html | 8 +-
.../quick-start/quick-start-springcloud/index.html | 8 +-
docs/2.4.3/quick-start/quick-start-tars/index.html | 8 +-
.../quick-start/quick-start-websocket/index.html | 8 +-
.../admin-usage/data-permission/index.html | 8 +-
.../admin-usage/dictionary-management/index.html | 8 +-
.../plugin-handle-explanation/index.html | 8 +-
.../admin-usage/role-management/index.html | 8 +-
.../admin-usage/selector-and-rule/index.html | 8 +-
.../admin-property-config/index.html | 8 +-
.../client-property-config/index.html | 8 +-
.../gateway-property-config/index.html | 8 +-
docs/2.4.3/user-guide/proxy/dubbo-proxy/index.html | 8 +-
docs/2.4.3/user-guide/proxy/grpc-proxy/index.html | 8 +-
docs/2.4.3/user-guide/proxy/http-proxy/index.html | 8 +-
docs/2.4.3/user-guide/proxy/motan-proxy/index.html | 8 +-
.../user-guide/proxy/sofa-rpc-proxy/index.html | 8 +-
.../user-guide/proxy/spring-cloud-proxy/index.html | 8 +-
.../user-guide/proxy/websocket-proxy/index.html | 8 +-
.../user-guide/register-center-access/index.html | 8 +-
.../user-guide/register-center-instance/index.html | 8 +-
docs/2.4.3/user-guide/tars-proxy/index.html | 8 +-
docs/2.4.3/user-guide/use-data-sync/index.html | 8 +-
docs/2.5.0/deployment/deployment-before/index.html | 8 +-
.../2.5.0/deployment/deployment-cluster/index.html | 8 +-
docs/2.5.0/deployment/deployment-custom/index.html | 8 +-
.../deployment-docker-compose/index.html | 8 +-
docs/2.5.0/deployment/deployment-docker/index.html | 8 +-
docs/2.5.0/deployment/deployment-helm/index.html | 8 +-
docs/2.5.0/deployment/deployment-k8s/index.html | 8 +-
docs/2.5.0/deployment/deployment-local/index.html | 8 +-
.../2.5.0/deployment/deployment-package/index.html | 8 +-
docs/2.5.0/deployment/deployment-quick/index.html | 8 +-
docs/2.5.0/design/data-sync/index.html | 8 +-
docs/2.5.0/design/database-design/index.html | 8 +-
docs/2.5.0/design/flow-control/index.html | 8 +-
.../2.5.0/design/register-center-design/index.html | 8 +-
docs/2.5.0/design/spi-design/index.html | 8 +-
docs/2.5.0/developer/custom-filter/index.html | 8 +-
.../custom-parsing-ip-and-host/index.html | 8 +-
docs/2.5.0/developer/custom-plugin/index.html | 8 +-
docs/2.5.0/developer/custom-result/index.html | 8 +-
.../developer/custom-sign-algorithm/index.html | 8 +-
.../developer/developer-shenyu-client/index.html | 8 +-
docs/2.5.0/developer/file-and-image/index.html | 8 +-
docs/2.5.0/developer/integration-test/index.html | 8 +-
docs/2.5.0/developer/local-model/index.html | 8 +-
docs/2.5.0/developer/shenyu-optimize/index.html | 8 +-
.../developer/spi/custom-load-balance/index.html | 8 +-
.../developer/spi/custom-match-mode/index.html | 8 +-
.../spi/custom-metrics-monitor/index.html | 8 +-
.../developer/spi/custom-mock-generator/index.html | 8 +-
.../developer/spi/custom-parameter-data/index.html | 8 +-
.../spi/custom-predicate-judge/index.html | 8 +-
.../developer/spi/custom-rate-limiter/index.html | 8 +-
docs/2.5.0/developer/thread-model/index.html | 8 +-
docs/2.5.0/index/index.html | 8 +-
.../plugin-center/cache/cache-plugin/index.html | 8 +-
.../common/general-context-plugin/index.html | 8 +-
.../fault-tolerance/hystrix-plugin/index.html | 8 +-
.../fault-tolerance/rate-limiter-plugin/index.html | 8 +-
.../fault-tolerance/resilience4j-plugin/index.html | 8 +-
.../fault-tolerance/sentinel-plugin/index.html | 8 +-
.../http-process/contextpath-plugin/index.html | 8 +-
.../http-process/modifyresponse-plugin/index.html | 8 +-
.../http-process/parammapping-plugin/index.html | 8 +-
.../http-process/redirect-plugin/index.html | 8 +-
.../http-process/request-plugin/index.html | 8 +-
.../http-process/rewrite-plugin/index.html | 8 +-
.../plugin-center/mock/mock-plugin/index.html | 8 +-
.../observability/logging-aliyun-sls/index.html | 8 +-
.../observability/logging-elasticsearch/index.html | 8 +-
.../observability/logging-kafka/index.html | 8 +-
.../observability/logging-plugin/index.html | 8 +-
.../observability/logging-rocketmq/index.html | 8 +-
.../observability/metrics-plugin/index.html | 8 +-
.../plugin-center/proxy/divide-plugin/index.html | 8 +-
.../plugin-center/proxy/dubbo-plugin/index.html | 8 +-
.../plugin-center/proxy/grpc-plugin/index.html | 8 +-
.../plugin-center/proxy/motan-plugin/index.html | 8 +-
.../plugin-center/proxy/mqtt-plugin/index.html | 8 +-
.../plugin-center/proxy/sofa-plugin/index.html | 8 +-
.../proxy/spring-cloud-plugin/index.html | 8 +-
.../plugin-center/proxy/tars-plugin/index.html | 8 +-
.../proxy/websocket-plugin/index.html | 8 +-
.../security/cryptor-request-plugin/index.html | 8 +-
.../security/cryptor-response-plugin/index.html | 8 +-
.../plugin-center/security/jwt-plugin/index.html | 8 +-
.../security/oauth2-plugin/index.html | 8 +-
.../plugin-center/security/sign-plugin/index.html | 8 +-
.../plugin-center/security/waf-plugin/index.html | 8 +-
.../2.5.0/quick-start/quick-start-dubbo/index.html | 8 +-
docs/2.5.0/quick-start/quick-start-grpc/index.html | 8 +-
docs/2.5.0/quick-start/quick-start-http/index.html | 8 +-
.../2.5.0/quick-start/quick-start-motan/index.html | 8 +-
docs/2.5.0/quick-start/quick-start-sofa/index.html | 8 +-
.../quick-start/quick-start-springcloud/index.html | 8 +-
docs/2.5.0/quick-start/quick-start-tars/index.html | 8 +-
.../quick-start/quick-start-websocket/index.html | 8 +-
.../admin-usage/data-permission/index.html | 8 +-
.../admin-usage/dictionary-management/index.html | 8 +-
.../plugin-handle-explanation/index.html | 8 +-
.../admin-usage/role-management/index.html | 8 +-
.../admin-usage/selector-and-rule/index.html | 8 +-
.../admin-property-config/index.html | 8 +-
.../client-property-config/index.html | 8 +-
.../gateway-property-config/index.html | 8 +-
.../register-center-access/index.html | 8 +-
.../register-center-instance/index.html | 8 +-
.../property-config/use-data-sync/index.html | 8 +-
docs/2.5.0/user-guide/proxy/dubbo-proxy/index.html | 8 +-
docs/2.5.0/user-guide/proxy/grpc-proxy/index.html | 8 +-
docs/2.5.0/user-guide/proxy/http-proxy/index.html | 8 +-
docs/2.5.0/user-guide/proxy/motan-proxy/index.html | 8 +-
.../user-guide/proxy/sofa-rpc-proxy/index.html | 8 +-
.../user-guide/proxy/spring-cloud-proxy/index.html | 8 +-
docs/2.5.0/user-guide/proxy/tars-proxy/index.html | 8 +-
.../user-guide/proxy/websocket-proxy/index.html | 8 +-
docs/2.5.1/deployment/deployment-before/index.html | 8 +-
.../2.5.1/deployment/deployment-cluster/index.html | 8 +-
docs/2.5.1/deployment/deployment-custom/index.html | 8 +-
.../deployment-docker-compose/index.html | 8 +-
docs/2.5.1/deployment/deployment-docker/index.html | 8 +-
docs/2.5.1/deployment/deployment-helm/index.html | 8 +-
docs/2.5.1/deployment/deployment-k8s/index.html | 8 +-
docs/2.5.1/deployment/deployment-local/index.html | 8 +-
.../2.5.1/deployment/deployment-package/index.html | 8 +-
docs/2.5.1/deployment/deployment-quick/index.html | 8 +-
docs/2.5.1/design/data-sync/index.html | 8 +-
docs/2.5.1/design/database-design/index.html | 8 +-
docs/2.5.1/design/flow-control/index.html | 8 +-
.../2.5.1/design/register-center-design/index.html | 8 +-
docs/2.5.1/design/spi-design/index.html | 8 +-
docs/2.5.1/developer/custom-filter/index.html | 8 +-
.../custom-jwt-covert-algorithm/index.html | 8 +-
.../custom-parsing-ip-and-host/index.html | 8 +-
docs/2.5.1/developer/custom-plugin/index.html | 8 +-
docs/2.5.1/developer/custom-result/index.html | 8 +-
.../developer/custom-sign-algorithm/index.html | 8 +-
.../developer/developer-shenyu-client/index.html | 8 +-
docs/2.5.1/developer/file-and-image/index.html | 8 +-
docs/2.5.1/developer/integration-test/index.html | 8 +-
docs/2.5.1/developer/local-model/index.html | 8 +-
docs/2.5.1/developer/shenyu-optimize/index.html | 8 +-
.../developer/spi/custom-load-balance/index.html | 8 +-
.../developer/spi/custom-match-mode/index.html | 8 +-
.../spi/custom-metrics-monitor/index.html | 8 +-
.../developer/spi/custom-mock-generator/index.html | 8 +-
.../developer/spi/custom-parameter-data/index.html | 8 +-
.../spi/custom-predicate-judge/index.html | 8 +-
.../developer/spi/custom-rate-limiter/index.html | 8 +-
docs/2.5.1/developer/thread-model/index.html | 8 +-
docs/2.5.1/index/index.html | 8 +-
.../plugin-center/cache/cache-plugin/index.html | 8 +-
.../common/general-context-plugin/index.html | 8 +-
.../fault-tolerance/hystrix-plugin/index.html | 8 +-
.../fault-tolerance/rate-limiter-plugin/index.html | 8 +-
.../fault-tolerance/resilience4j-plugin/index.html | 8 +-
.../fault-tolerance/sentinel-plugin/index.html | 8 +-
.../http-process/contextpath-plugin/index.html | 8 +-
.../http-process/modifyresponse-plugin/index.html | 8 +-
.../http-process/parammapping-plugin/index.html | 8 +-
.../http-process/redirect-plugin/index.html | 8 +-
.../http-process/request-plugin/index.html | 8 +-
.../http-process/rewrite-plugin/index.html | 8 +-
.../plugin-center/mock/mock-plugin/index.html | 8 +-
.../observability/logging-aliyun-sls/index.html | 8 +-
.../observability/logging-elasticsearch/index.html | 8 +-
.../observability/logging-kafka/index.html | 8 +-
.../observability/logging-plugin/index.html | 8 +-
.../observability/logging-pulsar/index.html | 8 +-
.../observability/logging-rocketmq/index.html | 8 +-
.../observability/logging-tencent-cls/index.html | 8 +-
.../observability/metrics-plugin/index.html | 8 +-
.../plugin-center/proxy/brpc-plugin/index.html | 8 +-
.../plugin-center/proxy/divide-plugin/index.html | 8 +-
.../plugin-center/proxy/dubbo-plugin/index.html | 8 +-
.../plugin-center/proxy/grpc-plugin/index.html | 8 +-
.../plugin-center/proxy/motan-plugin/index.html | 8 +-
.../plugin-center/proxy/mqtt-plugin/index.html | 8 +-
.../plugin-center/proxy/sofa-plugin/index.html | 8 +-
.../proxy/spring-cloud-plugin/index.html | 8 +-
.../plugin-center/proxy/tars-plugin/index.html | 8 +-
.../proxy/websocket-plugin/index.html | 8 +-
.../plugin-center/security/casdoor/index.html | 8 +-
.../security/cryptor-request-plugin/index.html | 8 +-
.../security/cryptor-response-plugin/index.html | 8 +-
.../plugin-center/security/jwt-plugin/index.html | 8 +-
.../security/oauth2-plugin/index.html | 8 +-
.../plugin-center/security/sign-plugin/index.html | 8 +-
.../plugin-center/security/waf-plugin/index.html | 8 +-
docs/2.5.1/quick-start/quick-start-brpc/index.html | 8 +-
.../2.5.1/quick-start/quick-start-dubbo/index.html | 8 +-
docs/2.5.1/quick-start/quick-start-grpc/index.html | 8 +-
docs/2.5.1/quick-start/quick-start-http/index.html | 8 +-
.../2.5.1/quick-start/quick-start-motan/index.html | 8 +-
docs/2.5.1/quick-start/quick-start-sofa/index.html | 8 +-
.../quick-start/quick-start-springcloud/index.html | 8 +-
docs/2.5.1/quick-start/quick-start-tars/index.html | 8 +-
.../quick-start/quick-start-websocket/index.html | 8 +-
.../admin-usage/data-permission/index.html | 8 +-
.../admin-usage/dictionary-management/index.html | 8 +-
.../plugin-handle-explanation/index.html | 8 +-
.../admin-usage/role-management/index.html | 8 +-
.../admin-usage/selector-and-rule/index.html | 8 +-
.../admin-property-config/index.html | 8 +-
.../client-property-config/index.html | 8 +-
.../gateway-property-config/index.html | 8 +-
.../register-center-access/index.html | 8 +-
.../register-center-instance/index.html | 8 +-
.../property-config/use-data-sync/index.html | 8 +-
docs/2.5.1/user-guide/proxy/brpc-proxy/index.html | 8 +-
docs/2.5.1/user-guide/proxy/dubbo-proxy/index.html | 8 +-
docs/2.5.1/user-guide/proxy/grpc-proxy/index.html | 8 +-
docs/2.5.1/user-guide/proxy/http-proxy/index.html | 8 +-
docs/2.5.1/user-guide/proxy/motan-proxy/index.html | 8 +-
.../user-guide/proxy/sofa-rpc-proxy/index.html | 8 +-
.../user-guide/proxy/spring-cloud-proxy/index.html | 8 +-
docs/2.5.1/user-guide/proxy/tars-proxy/index.html | 8 +-
.../user-guide/proxy/websocket-proxy/index.html | 8 +-
.../sdk-usage/shenyu-sdk-consul/index.html | 8 +-
.../sdk-usage/shenyu-sdk-etcd/index.html | 8 +-
.../sdk-usage/shenyu-sdk-eureka/index.html | 8 +-
.../sdk-usage/shenyu-sdk-nacos/index.html | 8 +-
.../sdk-usage/shenyu-sdk-zookeeper/index.html | 8 +-
.../2.6.0/benchmark-test/benchmark-test/index.html | 8 +-
docs/2.6.0/deployment/deployment-before/index.html | 8 +-
.../2.6.0/deployment/deployment-cluster/index.html | 8 +-
docs/2.6.0/deployment/deployment-custom/index.html | 8 +-
.../deployment-docker-compose/index.html | 8 +-
docs/2.6.0/deployment/deployment-docker/index.html | 8 +-
docs/2.6.0/deployment/deployment-helm/index.html | 8 +-
docs/2.6.0/deployment/deployment-k8s/index.html | 8 +-
docs/2.6.0/deployment/deployment-local/index.html | 8 +-
.../2.6.0/deployment/deployment-package/index.html | 8 +-
docs/2.6.0/deployment/deployment-quick/index.html | 8 +-
docs/2.6.0/design/data-sync/index.html | 8 +-
docs/2.6.0/design/database-design/index.html | 8 +-
docs/2.6.0/design/flow-control/index.html | 8 +-
.../2.6.0/design/register-center-design/index.html | 8 +-
docs/2.6.0/design/spi-design/index.html | 8 +-
docs/2.6.0/design/wasm-plugin-design/index.html | 8 +-
docs/2.6.0/developer/custom-filter/index.html | 8 +-
.../custom-jwt-covert-algorithm/index.html | 8 +-
.../custom-parsing-ip-and-host/index.html | 8 +-
docs/2.6.0/developer/custom-plugin/index.html | 8 +-
docs/2.6.0/developer/custom-result/index.html | 8 +-
.../developer/custom-sign-algorithm/index.html | 8 +-
.../developer/developer-shenyu-client/index.html | 8 +-
docs/2.6.0/developer/file-and-image/index.html | 8 +-
docs/2.6.0/developer/integration-test/index.html | 8 +-
docs/2.6.0/developer/local-model/index.html | 8 +-
docs/2.6.0/developer/shenyu-optimize/index.html | 8 +-
.../developer/spi/custom-load-balance/index.html | 8 +-
.../developer/spi/custom-match-mode/index.html | 8 +-
.../spi/custom-metrics-monitor/index.html | 8 +-
.../developer/spi/custom-mock-generator/index.html | 8 +-
.../developer/spi/custom-parameter-data/index.html | 8 +-
.../spi/custom-predicate-judge/index.html | 8 +-
.../developer/spi/custom-rate-limiter/index.html | 8 +-
docs/2.6.0/developer/thread-model/index.html | 8 +-
docs/2.6.0/index/index.html | 8 +-
.../plugin-center/cache/cache-plugin/index.html | 8 +-
.../common/general-context-plugin/index.html | 8 +-
.../discovery/discovery-mode/index.html | 8 +-
.../fault-tolerance/hystrix-plugin/index.html | 8 +-
.../fault-tolerance/rate-limiter-plugin/index.html | 8 +-
.../fault-tolerance/resilience4j-plugin/index.html | 8 +-
.../fault-tolerance/sentinel-plugin/index.html | 8 +-
.../http-process/contextpath-plugin/index.html | 8 +-
.../http-process/modifyresponse-plugin/index.html | 8 +-
.../http-process/parammapping-plugin/index.html | 8 +-
.../http-process/redirect-plugin/index.html | 8 +-
.../http-process/request-plugin/index.html | 8 +-
.../http-process/rewrite-plugin/index.html | 8 +-
.../plugin-center/mock/mock-plugin/index.html | 8 +-
.../observability/logging-aliyun-sls/index.html | 8 +-
.../observability/logging-elasticsearch/index.html | 8 +-
.../observability/logging-huawei-lts/index.html | 8 +-
.../observability/logging-kafka/index.html | 8 +-
.../observability/logging-plugin/index.html | 8 +-
.../observability/logging-pulsar/index.html | 8 +-
.../observability/logging-rocketmq/index.html | 8 +-
.../observability/logging-tencent-cls/index.html | 8 +-
.../observability/metrics-plugin/index.html | 8 +-
.../plugin-center/proxy/brpc-plugin/index.html | 8 +-
.../plugin-center/proxy/divide-plugin/index.html | 8 +-
.../plugin-center/proxy/dubbo-plugin/index.html | 8 +-
.../plugin-center/proxy/grpc-plugin/index.html | 8 +-
.../plugin-center/proxy/motan-plugin/index.html | 8 +-
.../plugin-center/proxy/mqtt-plugin/index.html | 8 +-
.../plugin-center/proxy/sofa-plugin/index.html | 8 +-
.../proxy/spring-cloud-plugin/index.html | 8 +-
.../plugin-center/proxy/tars-plugin/index.html | 8 +-
.../plugin-center/proxy/tcp-plugin/index.html | 8 +-
.../proxy/websocket-plugin/index.html | 8 +-
.../plugin-center/security/casdoor/index.html | 8 +-
.../security/cryptor-request-plugin/index.html | 8 +-
.../security/cryptor-response-plugin/index.html | 8 +-
.../plugin-center/security/jwt-plugin/index.html | 8 +-
.../security/oauth2-plugin/index.html | 8 +-
.../plugin-center/security/sign-plugin/index.html | 8 +-
.../plugin-center/security/waf-plugin/index.html | 8 +-
docs/2.6.0/quick-start/quick-start-brpc/index.html | 8 +-
.../2.6.0/quick-start/quick-start-dubbo/index.html | 8 +-
docs/2.6.0/quick-start/quick-start-grpc/index.html | 8 +-
docs/2.6.0/quick-start/quick-start-http/index.html | 8 +-
.../2.6.0/quick-start/quick-start-motan/index.html | 8 +-
docs/2.6.0/quick-start/quick-start-sofa/index.html | 8 +-
.../quick-start/quick-start-springcloud/index.html | 8 +-
docs/2.6.0/quick-start/quick-start-tars/index.html | 8 +-
.../quick-start/quick-start-websocket/index.html | 8 +-
.../user-guide/admin-usage/api-document/index.html | 8 +-
.../admin-usage/data-permission/index.html | 8 +-
.../admin-usage/dictionary-management/index.html | 8 +-
.../plugin-handle-explanation/index.html | 8 +-
.../admin-usage/role-management/index.html | 8 +-
.../admin-usage/selector-and-rule/index.html | 8 +-
.../api-doc/shenyu-annotation-apidoc/index.html | 8 +-
.../user-guide/api-doc/swagger-apidoc/index.html | 8 +-
.../kubernetes-controller/build-deploy/index.html | 8 +-
.../kubernetes-controller/config/index.html | 8 +-
.../admin-property-config/index.html | 8 +-
.../client-property-config/index.html | 8 +-
.../gateway-property-config/index.html | 8 +-
.../register-center-access/index.html | 8 +-
.../register-center-instance/index.html | 8 +-
.../property-config/use-data-sync/index.html | 8 +-
docs/2.6.0/user-guide/proxy/brpc-proxy/index.html | 8 +-
docs/2.6.0/user-guide/proxy/dubbo-proxy/index.html | 8 +-
docs/2.6.0/user-guide/proxy/grpc-proxy/index.html | 8 +-
docs/2.6.0/user-guide/proxy/http-proxy/index.html | 8 +-
docs/2.6.0/user-guide/proxy/motan-proxy/index.html | 8 +-
.../user-guide/proxy/sofa-rpc-proxy/index.html | 8 +-
.../user-guide/proxy/spring-cloud-proxy/index.html | 8 +-
docs/2.6.0/user-guide/proxy/tars-proxy/index.html | 8 +-
.../user-guide/proxy/websocket-proxy/index.html | 8 +-
.../sdk-usage/shenyu-sdk-consul/index.html | 8 +-
.../sdk-usage/shenyu-sdk-etcd/index.html | 8 +-
.../sdk-usage/shenyu-sdk-eureka/index.html | 8 +-
.../sdk-usage/shenyu-sdk-nacos/index.html | 8 +-
.../sdk-usage/shenyu-sdk-zookeeper/index.html | 8 +-
docs/benchmark-test/benchmark-test/index.html | 8 +-
docs/deployment/deployment-before/index.html | 8 +-
docs/deployment/deployment-cluster/index.html | 8 +-
docs/deployment/deployment-custom/index.html | 8 +-
.../deployment-docker-compose/index.html | 8 +-
docs/deployment/deployment-docker/index.html | 8 +-
docs/deployment/deployment-helm/index.html | 8 +-
docs/deployment/deployment-k8s/index.html | 8 +-
docs/deployment/deployment-local/index.html | 8 +-
docs/deployment/deployment-package/index.html | 8 +-
docs/deployment/deployment-quick/index.html | 8 +-
docs/design/data-sync/index.html | 8 +-
docs/design/database-design/index.html | 8 +-
docs/design/flow-control/index.html | 8 +-
docs/design/register-center-design/index.html | 8 +-
docs/design/spi-design/index.html | 8 +-
docs/design/wasm-plugin-design/index.html | 8 +-
docs/developer/custom-filter/index.html | 8 +-
.../custom-jwt-covert-algorithm/index.html | 8 +-
.../custom-parsing-ip-and-host/index.html | 8 +-
docs/developer/custom-plugin/index.html | 8 +-
docs/developer/custom-result/index.html | 8 +-
docs/developer/custom-sign-algorithm/index.html | 8 +-
docs/developer/developer-shenyu-client/index.html | 8 +-
docs/developer/file-and-image/index.html | 8 +-
docs/developer/integration-test/index.html | 8 +-
docs/developer/local-model/index.html | 8 +-
docs/developer/notice-alert/index.html | 8 +-
docs/developer/shenyu-optimize/index.html | 8 +-
docs/developer/spi/custom-load-balance/index.html | 8 +-
docs/developer/spi/custom-match-mode/index.html | 8 +-
.../spi/custom-metrics-monitor/index.html | 8 +-
.../developer/spi/custom-mock-generator/index.html | 8 +-
.../developer/spi/custom-parameter-data/index.html | 8 +-
.../spi/custom-predicate-judge/index.html | 8 +-
docs/developer/spi/custom-rate-limiter/index.html | 8 +-
docs/developer/thread-model/index.html | 8 +-
docs/index/index.html | 8 +-
docs/next/benchmark-test/benchmark-test/index.html | 8 +-
docs/next/deployment/deployment-before/index.html | 8 +-
docs/next/deployment/deployment-cluster/index.html | 8 +-
docs/next/deployment/deployment-custom/index.html | 8 +-
.../deployment-docker-compose/index.html | 8 +-
docs/next/deployment/deployment-docker/index.html | 8 +-
docs/next/deployment/deployment-helm/index.html | 8 +-
docs/next/deployment/deployment-k8s/index.html | 8 +-
docs/next/deployment/deployment-local/index.html | 8 +-
docs/next/deployment/deployment-package/index.html | 8 +-
docs/next/deployment/deployment-quick/index.html | 8 +-
docs/next/design/data-sync/index.html | 8 +-
docs/next/design/database-design/index.html | 8 +-
docs/next/design/flow-control/index.html | 8 +-
docs/next/design/register-center-design/index.html | 8 +-
docs/next/design/spi-design/index.html | 8 +-
docs/next/design/wasm-plugin-design/index.html | 8 +-
docs/next/developer/custom-filter/index.html | 8 +-
.../custom-jwt-covert-algorithm/index.html | 8 +-
.../custom-parsing-ip-and-host/index.html | 8 +-
docs/next/developer/custom-plugin/index.html | 8 +-
docs/next/developer/custom-result/index.html | 8 +-
.../developer/custom-sign-algorithm/index.html | 8 +-
.../developer/developer-shenyu-client/index.html | 8 +-
docs/next/developer/file-and-image/index.html | 8 +-
docs/next/developer/integration-test/index.html | 8 +-
docs/next/developer/local-model/index.html | 8 +-
docs/next/developer/notice-alert/index.html | 8 +-
docs/next/developer/shenyu-optimize/index.html | 8 +-
.../developer/spi/custom-load-balance/index.html | 8 +-
.../developer/spi/custom-match-mode/index.html | 8 +-
.../spi/custom-metrics-monitor/index.html | 8 +-
.../developer/spi/custom-mock-generator/index.html | 8 +-
.../developer/spi/custom-parameter-data/index.html | 8 +-
.../spi/custom-predicate-judge/index.html | 8 +-
.../developer/spi/custom-rate-limiter/index.html | 8 +-
docs/next/developer/thread-model/index.html | 8 +-
docs/next/index/index.html | 8 +-
.../plugin-center/cache/cache-plugin/index.html | 8 +-
.../common/general-context-plugin/index.html | 8 +-
.../fault-tolerance/hystrix-plugin/index.html | 8 +-
.../fault-tolerance/rate-limiter-plugin/index.html | 8 +-
.../fault-tolerance/resilience4j-plugin/index.html | 8 +-
.../fault-tolerance/sentinel-plugin/index.html | 8 +-
.../http-process/contextpath-plugin/index.html | 8 +-
.../http-process/modifyresponse-plugin/index.html | 8 +-
.../http-process/parammapping-plugin/index.html | 8 +-
.../http-process/redirect-plugin/index.html | 8 +-
.../http-process/request-plugin/index.html | 8 +-
.../http-process/rewrite-plugin/index.html | 8 +-
.../next/plugin-center/mock/mock-plugin/index.html | 8 +-
.../observability/logging-aliyun-sls/index.html | 8 +-
.../observability/logging-elasticsearch/index.html | 8 +-
.../observability/logging-huawei-lts/index.html | 8 +-
.../observability/logging-kafka/index.html | 8 +-
.../observability/logging-plugin/index.html | 8 +-
.../observability/logging-pulsar/index.html | 8 +-
.../observability/logging-rocketmq/index.html | 8 +-
.../observability/logging-tencent-cls/index.html | 8 +-
.../observability/metrics-plugin/index.html | 8 +-
.../plugin-center/proxy/divide-plugin/index.html | 8 +-
.../plugin-center/proxy/dubbo-plugin/index.html | 8 +-
.../plugin-center/proxy/grpc-plugin/index.html | 8 +-
.../plugin-center/proxy/motan-plugin/index.html | 8 +-
.../plugin-center/proxy/mqtt-plugin/index.html | 8 +-
.../plugin-center/proxy/sofa-plugin/index.html | 8 +-
.../proxy/spring-cloud-plugin/index.html | 8 +-
.../plugin-center/proxy/tars-plugin/index.html | 8 +-
.../next/plugin-center/proxy/tcp-plugin/index.html | 8 +-
.../proxy/websocket-plugin/index.html | 8 +-
.../next/plugin-center/security/casdoor/index.html | 8 +-
.../security/cryptor-request-plugin/index.html | 8 +-
.../security/cryptor-response-plugin/index.html | 8 +-
.../plugin-center/security/jwt-plugin/index.html | 8 +-
.../security/oauth2-plugin/index.html | 8 +-
.../plugin-center/security/sign-plugin/index.html | 8 +-
.../plugin-center/security/waf-plugin/index.html | 8 +-
docs/next/quick-start/quick-start-dubbo/index.html | 8 +-
docs/next/quick-start/quick-start-grpc/index.html | 8 +-
docs/next/quick-start/quick-start-http/index.html | 8 +-
docs/next/quick-start/quick-start-motan/index.html | 8 +-
docs/next/quick-start/quick-start-sofa/index.html | 8 +-
.../quick-start/quick-start-springcloud/index.html | 8 +-
docs/next/quick-start/quick-start-tars/index.html | 8 +-
.../quick-start/quick-start-websocket/index.html | 8 +-
.../user-guide/admin-usage/api-document/index.html | 8 +-
.../admin-usage/data-permission/index.html | 8 +-
.../admin-usage/dictionary-management/index.html | 8 +-
.../plugin-handle-explanation/index.html | 8 +-
.../admin-usage/role-management/index.html | 8 +-
.../admin-usage/selector-and-rule/index.html | 8 +-
.../api-doc/shenyu-annotation-apidoc/index.html | 8 +-
.../user-guide/api-doc/swagger-apidoc/index.html | 8 +-
.../user-guide/discovery/discovery-mode/index.html | 8 +-
.../kubernetes-controller/build-deploy/index.html | 8 +-
.../kubernetes-controller/config/index.html | 8 +-
.../admin-property-config/index.html | 8 +-
.../client-property-config/index.html | 8 +-
.../gateway-property-config/index.html | 8 +-
.../register-center-access/index.html | 8 +-
.../register-center-instance/index.html | 8 +-
.../property-config/use-data-sync/index.html | 8 +-
docs/next/user-guide/proxy/dubbo-proxy/index.html | 8 +-
docs/next/user-guide/proxy/grpc-proxy/index.html | 8 +-
docs/next/user-guide/proxy/http-proxy/index.html | 8 +-
docs/next/user-guide/proxy/motan-proxy/index.html | 8 +-
.../user-guide/proxy/sofa-rpc-proxy/index.html | 8 +-
.../user-guide/proxy/spring-cloud-proxy/index.html | 8 +-
docs/next/user-guide/proxy/tars-proxy/index.html | 8 +-
.../user-guide/proxy/websocket-proxy/index.html | 8 +-
.../sdk-usage/shenyu-sdk-consul/index.html | 8 +-
.../sdk-usage/shenyu-sdk-etcd/index.html | 8 +-
.../sdk-usage/shenyu-sdk-eureka/index.html | 8 +-
.../sdk-usage/shenyu-sdk-feign/index.html | 8 +-
.../sdk-usage/shenyu-sdk-nacos/index.html | 8 +-
.../sdk-usage/shenyu-sdk-zookeeper/index.html | 8 +-
docs/plugin-center/cache/cache-plugin/index.html | 8 +-
.../common/general-context-plugin/index.html | 8 +-
.../fault-tolerance/hystrix-plugin/index.html | 8 +-
.../fault-tolerance/rate-limiter-plugin/index.html | 8 +-
.../fault-tolerance/resilience4j-plugin/index.html | 8 +-
.../fault-tolerance/sentinel-plugin/index.html | 8 +-
.../http-process/contextpath-plugin/index.html | 8 +-
.../http-process/modifyresponse-plugin/index.html | 8 +-
.../http-process/parammapping-plugin/index.html | 8 +-
.../http-process/redirect-plugin/index.html | 8 +-
.../http-process/request-plugin/index.html | 8 +-
.../http-process/rewrite-plugin/index.html | 8 +-
docs/plugin-center/mock/mock-plugin/index.html | 8 +-
.../observability/logging-aliyun-sls/index.html | 8 +-
.../observability/logging-elasticsearch/index.html | 8 +-
.../observability/logging-huawei-lts/index.html | 8 +-
.../observability/logging-kafka/index.html | 8 +-
.../observability/logging-plugin/index.html | 8 +-
.../observability/logging-pulsar/index.html | 8 +-
.../observability/logging-rocketmq/index.html | 8 +-
.../observability/logging-tencent-cls/index.html | 8 +-
.../observability/metrics-plugin/index.html | 8 +-
docs/plugin-center/proxy/divide-plugin/index.html | 8 +-
docs/plugin-center/proxy/dubbo-plugin/index.html | 8 +-
docs/plugin-center/proxy/grpc-plugin/index.html | 8 +-
docs/plugin-center/proxy/motan-plugin/index.html | 8 +-
docs/plugin-center/proxy/mqtt-plugin/index.html | 8 +-
docs/plugin-center/proxy/sofa-plugin/index.html | 8 +-
.../proxy/spring-cloud-plugin/index.html | 8 +-
docs/plugin-center/proxy/tars-plugin/index.html | 8 +-
docs/plugin-center/proxy/tcp-plugin/index.html | 8 +-
.../proxy/websocket-plugin/index.html | 8 +-
docs/plugin-center/security/casdoor/index.html | 8 +-
.../security/cryptor-request-plugin/index.html | 8 +-
.../security/cryptor-response-plugin/index.html | 8 +-
docs/plugin-center/security/jwt-plugin/index.html | 8 +-
.../security/oauth2-plugin/index.html | 8 +-
docs/plugin-center/security/sign-plugin/index.html | 8 +-
docs/plugin-center/security/waf-plugin/index.html | 8 +-
docs/quick-start/quick-start-dubbo/index.html | 8 +-
docs/quick-start/quick-start-grpc/index.html | 8 +-
docs/quick-start/quick-start-http/index.html | 8 +-
docs/quick-start/quick-start-motan/index.html | 8 +-
docs/quick-start/quick-start-sofa/index.html | 8 +-
.../quick-start/quick-start-springcloud/index.html | 8 +-
docs/quick-start/quick-start-tars/index.html | 8 +-
docs/quick-start/quick-start-websocket/index.html | 8 +-
.../user-guide/admin-usage/api-document/index.html | 8 +-
.../admin-usage/data-permission/index.html | 8 +-
.../admin-usage/dictionary-management/index.html | 8 +-
.../plugin-handle-explanation/index.html | 8 +-
.../admin-usage/role-management/index.html | 8 +-
.../admin-usage/selector-and-rule/index.html | 8 +-
.../api-doc/shenyu-annotation-apidoc/index.html | 8 +-
docs/user-guide/api-doc/swagger-apidoc/index.html | 8 +-
.../user-guide/discovery/discovery-mode/index.html | 8 +-
.../kubernetes-controller/build-deploy/index.html | 8 +-
.../kubernetes-controller/config/index.html | 8 +-
.../admin-property-config/index.html | 8 +-
.../client-property-config/index.html | 8 +-
.../gateway-property-config/index.html | 8 +-
.../register-center-access/index.html | 8 +-
.../register-center-instance/index.html | 8 +-
.../property-config/use-data-sync/index.html | 8 +-
docs/user-guide/proxy/dubbo-proxy/index.html | 8 +-
docs/user-guide/proxy/grpc-proxy/index.html | 8 +-
docs/user-guide/proxy/http-proxy/index.html | 8 +-
docs/user-guide/proxy/motan-proxy/index.html | 8 +-
docs/user-guide/proxy/sofa-rpc-proxy/index.html | 8 +-
.../user-guide/proxy/spring-cloud-proxy/index.html | 8 +-
docs/user-guide/proxy/tars-proxy/index.html | 8 +-
docs/user-guide/proxy/websocket-proxy/index.html | 8 +-
.../sdk-usage/shenyu-sdk-consul/index.html | 8 +-
.../sdk-usage/shenyu-sdk-etcd/index.html | 8 +-
.../sdk-usage/shenyu-sdk-eureka/index.html | 8 +-
.../sdk-usage/shenyu-sdk-feign/index.html | 8 +-
.../sdk-usage/shenyu-sdk-nacos/index.html | 8 +-
.../sdk-usage/shenyu-sdk-zookeeper/index.html | 8 +-
document/index.html | 8 +-
download/index.html | 8 +-
event/2.2.0-release/index.html | 10 +-
event/2.3.0-release/index.html | 10 +-
event/2.4.0-release/index.html | 10 +-
event/2.4.1-release/index.html | 10 +-
event/2.4.2-release/index.html | 10 +-
event/2.4.3-release/index.html | 10 +-
event/2.5.0-release/index.html | 10 +-
event/2.5.1-release/index.html | 10 +-
event/2.6.0-release/index.html | 10 +-
event/2.6.1-release/index.html | 10 +-
event/client-dotnet-1.0.0-release/index.html | 10 +-
event/client-golang-1.0.0-release/index.html | 10 +-
event/index.html | 8 +-
event/nginx-1.0.0-1-release/index.html | 10 +-
event/shenyu-wasm-1.0.0-release/index.html | 10 +-
helloReact/index.html | 8 +-
helm/index/index.html | 10 +-
index.html | 8 +-
markdown-page/index.html | 8 +-
news/Apache-ShenYu-Committer-2021-07-27/index.html | 8 +-
news/Apache-ShenYu-Committer-2021-09-08/index.html | 8 +-
news/Apache-ShenYu-Committer-2021-11-11/index.html | 8 +-
news/Apache-ShenYu-Committer-2021-12-08/index.html | 8 +-
news/Apache-ShenYu-Committer-2022-02-28/index.html | 8 +-
news/Apache-ShenYu-Committer-2022-04-20/index.html | 8 +-
news/Apache-ShenYu-Committer-2022-07-04/index.html | 8 +-
news/Apache-ShenYu-Committer-2022-08-04/index.html | 8 +-
news/Apache-ShenYu-Committer-2022-08-08/index.html | 8 +-
news/Apache-ShenYu-Committer-2023-06-14/index.html | 8 +-
news/Apache-ShenYu-GSOC2023-2023-04-18/index.html | 8 +-
news/Apache-ShenYu-OSPP2023-2023-05-19/index.html | 8 +-
news/Apache-ShenYu-PPMC-2021-11-05/index.html | 8 +-
.../index.html | 8 +-
.../index.html | 8 +-
.../Apache-ShenYu-release-version-2.4.3/index.html | 8 +-
.../Apache-ShenYu-release-version-2.5.1/index.html | 8 +-
.../Apache-ShenYu-release-version-2.6.0/index.html | 8 +-
.../index.html | 8 +-
news/index.html | 8 +-
news/page/2/index.html | 8 +-
news/tags/apache-shen-yu-wasm/index.html | 8 +-
news/tags/apache-shen-yu/index.html | 8 +-
news/tags/gsoc-2023/index.html | 8 +-
news/tags/index.html | 8 +-
news/tags/ospp-2023/index.html | 8 +-
news/tags/wasm/index.html | 8 +-
pdf/apache_shenyu_docs_en.pdf | Bin 4622 -> 4628 bytes
pdf/apache_shenyu_docs_zh.pdf | Bin 6480 -> 6486 bytes
search/index.html | 10 +-
shenyuClientDotnet/consul/index.html | 10 +-
shenyuClientDotnet/etcd/index.html | 10 +-
shenyuClientDotnet/http/index.html | 10 +-
shenyuClientDotnet/nacos/index.html | 10 +-
shenyuClientDotnet/next/consul/index.html | 10 +-
shenyuClientDotnet/next/etcd/index.html | 10 +-
shenyuClientDotnet/next/http/index.html | 10 +-
shenyuClientDotnet/next/nacos/index.html | 10 +-
shenyuClientDotnet/next/zookeeper/index.html | 10 +-
shenyuClientDotnet/zookeeper/index.html | 10 +-
shenyuClientGolang/consul/index.html | 10 +-
shenyuClientGolang/etcd/index.html | 10 +-
shenyuClientGolang/http/index.html | 10 +-
shenyuClientGolang/nacos/index.html | 10 +-
shenyuClientGolang/next/consul/index.html | 10 +-
shenyuClientGolang/next/etcd/index.html | 10 +-
shenyuClientGolang/next/http/index.html | 10 +-
shenyuClientGolang/next/nacos/index.html | 10 +-
shenyuClientGolang/next/zookeeper/index.html | 10 +-
shenyuClientGolang/zookeeper/index.html | 10 +-
shenyuNginx/index/index.html | 10 +-
team/index.html | 8 +-
users/index.html | 8 +-
versions/index.html | 8 +-
zh/404.html | 8 +-
zh/assets/js/004a8706.ccda231e.js | 1 -
zh/assets/js/004a8706.d2b4001a.js | 1 +
zh/assets/js/01a34b95.101f95d6.js | 1 +
zh/assets/js/01a34b95.ea5549a6.js | 1 -
zh/assets/js/043520ee.4110eaa5.js | 1 +
zh/assets/js/043520ee.7e7911ea.js | 1 -
zh/assets/js/07aa3753.526f10cc.js | 1 +
zh/assets/js/07aa3753.fc68b86f.js | 1 -
zh/assets/js/08b174f3.1e78793e.js | 1 +
zh/assets/js/08b174f3.6658cd45.js | 1 -
zh/assets/js/08df4d3e.0a024e1d.js | 1 +
zh/assets/js/08df4d3e.a7c6eee8.js | 1 -
zh/assets/js/0bf34941.e664a2fa.js | 1 -
zh/assets/js/0bf34941.f1035774.js | 1 +
zh/assets/js/1176234e.5916e408.js | 1 +
zh/assets/js/1176234e.94e237e4.js | 1 -
zh/assets/js/11b1825b.25fa5630.js | 1 -
zh/assets/js/11b1825b.74249361.js | 1 +
zh/assets/js/132e4f44.25baddaa.js | 1 +
zh/assets/js/132e4f44.57eedc11.js | 1 -
zh/assets/js/2498cb36.8aad43d1.js | 1 -
zh/assets/js/2498cb36.e9f52775.js | 1 +
zh/assets/js/29181f97.56bd4ba2.js | 1 +
zh/assets/js/29181f97.682cdac7.js | 1 -
zh/assets/js/2b8fdfea.0d279d18.js | 1 +
zh/assets/js/2b8fdfea.e86a5715.js | 1 -
zh/assets/js/2c7455a0.9f455b45.js | 1 -
zh/assets/js/2c7455a0.c103b864.js | 1 +
zh/assets/js/2ddbda6b.671c8291.js | 1 -
zh/assets/js/2ddbda6b.af6ea0b8.js | 1 +
zh/assets/js/2fbcdd2b.a0372f8e.js | 1 +
zh/assets/js/2fbcdd2b.e168eabd.js | 1 -
zh/assets/js/321537af.0bdcb786.js | 1 -
zh/assets/js/321537af.79825924.js | 1 +
zh/assets/js/354c138e.b1562b25.js | 1 +
zh/assets/js/354c138e.e1988c1e.js | 1 -
zh/assets/js/35e29d8a.2d5bac03.js | 1 -
zh/assets/js/35e29d8a.eccff257.js | 1 +
zh/assets/js/38fb0855.7c3ffffb.js | 1 +
zh/assets/js/38fb0855.f4e4a885.js | 1 -
zh/assets/js/3c2baceb.9301ef4f.js | 1 -
zh/assets/js/3c2baceb.a249ff4a.js | 1 +
zh/assets/js/3d802670.677407f9.js | 1 +
zh/assets/js/3d802670.f1787226.js | 1 -
zh/assets/js/3e30bf86.3f06ccd5.js | 1 -
zh/assets/js/3e30bf86.a24e374c.js | 1 +
zh/assets/js/42dca312.a6377c23.js | 1 -
zh/assets/js/42dca312.e7c7dcad.js | 1 +
zh/assets/js/43ea63f0.90fa59ed.js | 1 -
zh/assets/js/43ea63f0.9da0f2fc.js | 1 +
zh/assets/js/47bba419.47fbbc38.js | 1 +
zh/assets/js/47bba419.bad25e0b.js | 1 -
zh/assets/js/48ac8416.138ab92d.js | 1 +
zh/assets/js/48ac8416.1ab02113.js | 1 -
zh/assets/js/49904786.7c1b9445.js | 1 +
zh/assets/js/49904786.8a2ecc05.js | 1 -
zh/assets/js/49e7e128.21142d56.js | 1 -
zh/assets/js/49e7e128.7cfde851.js | 1 +
zh/assets/js/5044e832.0cd944ec.js | 1 +
zh/assets/js/5044e832.67be1d92.js | 1 -
zh/assets/js/5857e074.5f9b5fe8.js | 1 -
zh/assets/js/5857e074.ab742a27.js | 1 +
zh/assets/js/58d80521.38be8783.js | 1 -
zh/assets/js/58d80521.9ba2bdbe.js | 1 +
zh/assets/js/59565bb7.7a4cf37c.js | 1 +
zh/assets/js/59565bb7.d4fefdd1.js | 1 -
zh/assets/js/5c568eba.507cf313.js | 1 +
zh/assets/js/5c568eba.6da58290.js | 1 -
zh/assets/js/5d1f44e6.24b8f1bd.js | 1 +
zh/assets/js/5d1f44e6.ddb49d23.js | 1 -
zh/assets/js/64ddfa4d.18e23032.js | 1 +
zh/assets/js/64ddfa4d.84919a70.js | 1 -
zh/assets/js/69e68cac.bae52b80.js | 1 +
zh/assets/js/69e68cac.cd6cfb23.js | 1 -
zh/assets/js/6ed95132.bd8f29d2.js | 1 -
zh/assets/js/6ed95132.daff1252.js | 1 +
zh/assets/js/70d58edf.5b5c08fd.js | 1 -
zh/assets/js/70d58edf.b937ffba.js | 1 +
zh/assets/js/7135f35e.403c1b86.js | 1 +
zh/assets/js/7135f35e.5d0eb6d8.js | 1 -
zh/assets/js/758785e3.143f5cb6.js | 1 -
zh/assets/js/758785e3.7a1397a9.js | 1 +
zh/assets/js/76e12585.bebad4fc.js | 1 +
zh/assets/js/76e12585.ec3f9a3d.js | 1 -
zh/assets/js/799948ce.2b3d51de.js | 1 -
zh/assets/js/799948ce.51e803d9.js | 1 +
zh/assets/js/7bb6d109.22ac0c85.js | 1 +
zh/assets/js/7bb6d109.d68a7522.js | 1 -
zh/assets/js/7d5b84f0.eb5ac647.js | 1 +
zh/assets/js/7d5b84f0.faedb0b4.js | 1 -
zh/assets/js/7e7f4309.4501af2b.js | 1 +
zh/assets/js/7e7f4309.73d6bb56.js | 1 -
zh/assets/js/8dfcabf3.621c6329.js | 1 -
zh/assets/js/8dfcabf3.d02390c1.js | 1 +
zh/assets/js/95e485e3.deec2e01.js | 1 -
zh/assets/js/95e485e3.fcf79af8.js | 1 +
zh/assets/js/9f1f1d8b.2a07f647.js | 1 -
zh/assets/js/9f1f1d8b.60d69876.js | 1 +
zh/assets/js/a3964000.72b18a61.js | 1 +
zh/assets/js/a3964000.ad1e71cd.js | 1 -
zh/assets/js/a417d5bc.50541e0e.js | 1 +
zh/assets/js/a417d5bc.994b567d.js | 1 -
zh/assets/js/a7084103.12709ce2.js | 1 -
zh/assets/js/a7084103.560d6690.js | 1 +
zh/assets/js/b1b9b75a.1939cf5b.js | 1 +
zh/assets/js/b1b9b75a.b0f5b3bb.js | 1 -
zh/assets/js/b42ed7de.60b1e155.js | 1 +
zh/assets/js/b42ed7de.9ef8b4cf.js | 1 -
zh/assets/js/bbaffe6b.8f82842b.js | 1 +
zh/assets/js/bbaffe6b.e0bef25a.js | 1 -
zh/assets/js/bd8d6e06.a8919aad.js | 1 -
zh/assets/js/bd8d6e06.d6a389c9.js | 1 +
zh/assets/js/bf06b8b1.8536c967.js | 1 +
zh/assets/js/bf06b8b1.99d1255c.js | 1 -
zh/assets/js/bfb16af5.34cc8d1f.js | 1 -
zh/assets/js/bfb16af5.ab1d257b.js | 1 +
zh/assets/js/c0a1427a.137276b6.js | 1 +
zh/assets/js/c0a1427a.625684da.js | 1 -
zh/assets/js/c2673bf5.4b670309.js | 1 +
zh/assets/js/c2673bf5.5cd3e2cb.js | 1 -
zh/assets/js/c2cb83aa.1b77e35e.js | 1 -
zh/assets/js/c2cb83aa.7951f98b.js | 1 +
zh/assets/js/c5cc403f.00264f80.js | 1 +
zh/assets/js/c5cc403f.bd4c80a8.js | 1 -
zh/assets/js/c73bc142.315b682d.js | 1 +
zh/assets/js/c73bc142.b8150633.js | 1 -
zh/assets/js/c967a27f.782f8e30.js | 1 +
zh/assets/js/c967a27f.de436721.js | 1 -
zh/assets/js/ca6cd059.18dcf288.js | 1 +
zh/assets/js/ca6cd059.bf7107ac.js | 1 -
zh/assets/js/cdf7c864.825c368f.js | 1 +
zh/assets/js/cdf7c864.cf95571b.js | 1 -
zh/assets/js/cfb2e8e5.079d337b.js | 1 +
zh/assets/js/cfb2e8e5.c16a857a.js | 1 -
zh/assets/js/d0c8fed6.285ae1d6.js | 1 +
zh/assets/js/d0c8fed6.37a5a40e.js | 1 -
zh/assets/js/d2ed4b72.8c03707c.js | 1 -
zh/assets/js/d2ed4b72.e60b261f.js | 1 +
zh/assets/js/d3a0de0e.76d9d535.js | 1 -
zh/assets/js/d3a0de0e.d5bcbb01.js | 1 +
zh/assets/js/d4b084f0.113045e1.js | 1 -
zh/assets/js/d4b084f0.82e16b0e.js | 1 +
zh/assets/js/d5445dc7.31f7c9e7.js | 1 +
zh/assets/js/d5445dc7.35dd26e8.js | 1 -
zh/assets/js/dab02110.4692fba6.js | 1 +
zh/assets/js/dab02110.cffc00eb.js | 1 -
zh/assets/js/dfbefa0a.bdc4bd81.js | 1 +
zh/assets/js/dfbefa0a.cde95cab.js | 1 -
zh/assets/js/e388bdf9.f1c0ede5.js | 1 -
zh/assets/js/e388bdf9.f3be9e20.js | 1 +
zh/assets/js/e3dc4f65.40131ffb.js | 1 -
zh/assets/js/e3dc4f65.8fe83766.js | 1 +
zh/assets/js/e492e8f5.68225ce6.js | 1 +
zh/assets/js/e492e8f5.cb650767.js | 1 -
zh/assets/js/e4bc4cf6.a1a3f886.js | 1 -
zh/assets/js/e4bc4cf6.d0b17bca.js | 1 +
zh/assets/js/e4f9bda5.96937dc2.js | 1 +
zh/assets/js/e4f9bda5.c8fa69d8.js | 1 -
zh/assets/js/e7c0330d.b352d049.js | 1 +
zh/assets/js/e7c0330d.fb0a47d0.js | 1 -
zh/assets/js/e8309287.49936cf3.js | 1 -
zh/assets/js/e8309287.ab17d8ce.js | 1 +
zh/assets/js/e980f106.5c9c95ed.js | 1 -
zh/assets/js/e980f106.ba5c1c16.js | 1 +
zh/assets/js/eb2312e3.105b3457.js | 1 +
zh/assets/js/eb2312e3.a413e9ec.js | 1 -
zh/assets/js/ec388103.6f20b012.js | 1 -
zh/assets/js/ec388103.d9a5d0fd.js | 1 +
zh/assets/js/edde8715.2d6ec0c5.js | 1 -
zh/assets/js/edde8715.f8f2ec58.js | 1 +
zh/assets/js/f12fab5d.01922498.js | 1 -
zh/assets/js/f12fab5d.12f72090.js | 1 +
zh/assets/js/f3aef7d0.22c7a6cd.js | 1 +
zh/assets/js/f3aef7d0.d642d17b.js | 1 -
zh/assets/js/f3d411b6.8ebfcbf4.js | 1 +
zh/assets/js/f3d411b6.91fe0c80.js | 1 -
zh/assets/js/f9827c10.9a1eba08.js | 1 +
zh/assets/js/f9827c10.a810204b.js | 1 -
zh/assets/js/fc9a49d2.a14cdda3.js | 1 -
zh/assets/js/fc9a49d2.a32d517d.js | 1 +
zh/assets/js/fde8ff6d.20ecf570.js | 1 +
zh/assets/js/fde8ff6d.5b9960a4.js | 1 -
zh/assets/js/ffd3a1ef.265f0aab.js | 1 -
zh/assets/js/ffd3a1ef.fdf65847.js | 1 +
zh/assets/js/main.9d2d6d87.js | 2 -
zh/assets/js/main.e794e7fe.js | 2 +
...js.LICENSE.txt => main.e794e7fe.js.LICENSE.txt} | 0
zh/assets/js/runtime~main.6c420080.js | 1 -
zh/assets/js/runtime~main.f2723b5f.js | 1 +
.../index.html | 12 +-
.../index.html | 12 +-
.../index.html | 12 +-
.../index.html | 12 +-
.../index.html | 12 +-
zh/blog/E2eTest-Analysis/index.html | 12 +-
zh/blog/IntegrationTest-Analysis/index.html | 12 +-
.../index.html | 12 +-
.../index.html | 10 +-
.../index.html | 12 +-
.../index.html | 12 +-
.../index.html | 12 +-
.../index.html | 12 +-
.../index.html | 12 +-
.../index.html | 12 +-
.../index.html | 12 +-
.../index.html | 12 +-
zh/blog/SPI-SourceCode-Analysis-SPI/index.html | 8 +-
.../index.html | 10 +-
.../index.html | 10 +-
zh/blog/atom.xml | 108 +++++-----
zh/blog/index.html | 10 +-
zh/blog/page/2/index.html | 34 +--
zh/blog/rss.xml | 108 +++++-----
zh/blog/tags/apache-shen-yu/index.html | 230 ++++++++++-----------
zh/blog/tags/context-path/index.html | 10 +-
zh/blog/tags/data-sync/index.html | 190 ++++++++---------
zh/blog/tags/divide/index.html | 10 +-
zh/blog/tags/dubbo/index.html | 10 +-
zh/blog/tags/e-2-e-test/index.html | 10 +-
zh/blog/tags/etcd/index.html | 10 +-
zh/blog/tags/ext/index.html | 10 +-
zh/blog/tags/first-start/index.html | 10 +-
zh/blog/tags/http/index.html | 12 +-
zh/blog/tags/index.html | 10 +-
zh/blog/tags/integration-test/index.html | 10 +-
zh/blog/tags/load-balance/index.html | 10 +-
zh/blog/tags/nacos/index.html | 10 +-
zh/blog/tags/param-mapping/index.html | 10 +-
zh/blog/tags/plugin/index.html | 14 +-
zh/blog/tags/rate-limiter/index.html | 10 +-
zh/blog/tags/register-center/index.html | 10 +-
zh/blog/tags/spi/index.html | 24 +--
zh/blog/tags/websocket/index.html | 10 +-
zh/blog/tags/zookeeper/index.html | 10 +-
zh/community/code-suggestions/index.html | 10 +-
zh/community/committer/index.html | 10 +-
zh/community/community/index.html | 10 +-
zh/community/contributor-guide/index.html | 10 +-
zh/community/create-repository/index.html | 10 +-
zh/community/faq/index.html | 10 +-
zh/community/icla/index.html | 10 +-
zh/community/issue-pr/index.html | 10 +-
zh/community/pmc/index.html | 10 +-
zh/community/release-guide/index.html | 10 +-
.../shenyu-client-dotnet-release-guide/index.html | 10 +-
.../shenyu-client-golang-release-guide/index.html | 10 +-
zh/community/shenyu-nginx-release-guide/index.html | 10 +-
zh/community/shenyu-wasm-release-guide/index.html | 10 +-
zh/community/use-apache-email/index.html | 10 +-
zh/community/user-registration/index.html | 10 +-
.../admin/dictionary-management/index.html | 8 +-
.../admin/plugin-handle-explanation/index.html | 8 +-
.../admin/selector-and-rule/index.html | 8 +-
zh/docs/2.3.0-Legacy/design/config/index.html | 8 +-
zh/docs/2.3.0-Legacy/design/data-sync/index.html | 8 +-
.../2.3.0-Legacy/design/database-design/index.html | 8 +-
zh/docs/2.3.0-Legacy/design/meta-data/index.html | 8 +-
.../developer-guide/custom-filter/index.html | 8 +-
.../custom-parsing-ip-and-host/index.html | 8 +-
.../developer-guide/custom-plugin/index.html | 8 +-
.../developer-guide/custom-result/index.html | 8 +-
.../custom-sign-algorithm/index.html | 8 +-
.../developer-soul-client/index.html | 8 +-
.../developer-guide/file-and-image/index.html | 8 +-
.../developer-guide/soul-optimize/index.html | 8 +-
.../2.3.0-Legacy/developer-guide/thread/index.html | 8 +-
zh/docs/2.3.0-Legacy/doc-download/index.html | 8 +-
zh/docs/2.3.0-Legacy/index/index.html | 8 +-
.../plugins/context-path-plugin/index.html | 8 +-
.../2.3.0-Legacy/plugins/divide-plugin/index.html | 8 +-
.../2.3.0-Legacy/plugins/dubbo-plugin/index.html | 8 +-
.../2.3.0-Legacy/plugins/hystrix-plugin/index.html | 8 +-
.../2.3.0-Legacy/plugins/monitor-plugin/index.html | 8 +-
.../plugins/rate-limiter-plugin/index.html | 8 +-
.../plugins/redirect-plugin/index.html | 8 +-
.../plugins/resilience4j-plugin/index.html | 8 +-
.../2.3.0-Legacy/plugins/rewrite-plugin/index.html | 8 +-
.../plugins/sentinel-plugin/index.html | 8 +-
.../2.3.0-Legacy/plugins/sign-plugin/index.html | 8 +-
.../2.3.0-Legacy/plugins/sofa-plugin/index.html | 8 +-
.../plugins/spring-cloud-plugin/index.html | 8 +-
zh/docs/2.3.0-Legacy/plugins/waf-plugin/index.html | 8 +-
.../plugins/websocket-plugin/index.html | 8 +-
.../quick-start/quick-start-dubbo/index.html | 8 +-
.../quick-start/quick-start-grpc/index.html | 8 +-
.../quick-start/quick-start-http/index.html | 8 +-
.../quick-start/quick-start-sofa/index.html | 8 +-
.../quick-start/quick-start-springcloud/index.html | 8 +-
.../quick-start/quick-start-tars/index.html | 8 +-
.../register-center-access/index.html | 8 +-
.../register-center-design/index.html | 8 +-
zh/docs/2.3.0-Legacy/team/index.html | 8 +-
.../users-guide/dubbo-proxy/index.html | 8 +-
.../2.3.0-Legacy/users-guide/http-proxy/index.html | 8 +-
.../users-guide/sofa-rpc-proxy/index.html | 8 +-
.../users-guide/soul-set-up/index.html | 8 +-
.../users-guide/spring-cloud-proxy/index.html | 8 +-
.../users-guide/use-data-sync/index.html | 8 +-
.../2.4.0/deployment/deployment-cluster/index.html | 8 +-
.../2.4.0/deployment/deployment-custom/index.html | 8 +-
.../2.4.0/deployment/deployment-docker/index.html | 8 +-
.../2.4.0/deployment/deployment-helm/index.html | 8 +-
zh/docs/2.4.0/deployment/deployment-k8s/index.html | 8 +-
.../2.4.0/deployment/deployment-local/index.html | 8 +-
.../2.4.0/deployment/deployment-package/index.html | 8 +-
zh/docs/2.4.0/design/data-sync/index.html | 8 +-
zh/docs/2.4.0/design/database-design/index.html | 8 +-
zh/docs/2.4.0/design/flow-control/index.html | 8 +-
.../2.4.0/design/register-center-design/index.html | 8 +-
zh/docs/2.4.0/design/spi-design/index.html | 8 +-
zh/docs/2.4.0/developer/custom-filter/index.html | 8 +-
.../custom-parsing-ip-and-host/index.html | 8 +-
zh/docs/2.4.0/developer/custom-plugin/index.html | 8 +-
zh/docs/2.4.0/developer/custom-result/index.html | 8 +-
.../developer/custom-sign-algorithm/index.html | 8 +-
.../developer/developer-shenyu-client/index.html | 8 +-
zh/docs/2.4.0/developer/file-and-image/index.html | 8 +-
zh/docs/2.4.0/developer/shenyu-optimize/index.html | 8 +-
.../developer/spi/custom-load-balance/index.html | 8 +-
.../developer/spi/custom-match-mode/index.html | 8 +-
.../spi/custom-metrics-monitor/index.html | 8 +-
.../developer/spi/custom-parameter-data/index.html | 8 +-
.../spi/custom-predicate-judge/index.html | 8 +-
.../developer/spi/custom-rate-limiter/index.html | 8 +-
zh/docs/2.4.0/developer/thread-model/index.html | 8 +-
zh/docs/2.4.0/index/index.html | 8 +-
.../jwt-plugin/index.html | 8 +-
.../oauth2-plugin/index.html | 8 +-
.../sign-plugin/index.html | 8 +-
.../waf-plugin/index.html | 8 +-
.../fault-tolerance/hystrix-plugin/index.html | 8 +-
.../fault-tolerance/rate-limiter-plugin/index.html | 8 +-
.../fault-tolerance/resilience4j-plugin/index.html | 8 +-
.../fault-tolerance/sentinel-plugin/index.html | 8 +-
.../http-handle/context-path-plugin/index.html | 8 +-
.../http-handle/divide-plugin/index.html | 8 +-
.../http-handle/modify-response-plugin/index.html | 8 +-
.../http-handle/param-mapping-plugin/index.html | 8 +-
.../http-handle/redirect-plugin/index.html | 8 +-
.../http-handle/request-plugin/index.html | 8 +-
.../http-handle/rewrite-plugin/index.html | 8 +-
.../http-handle/websocket-plugin/index.html | 8 +-
.../observability/logging-plugin/index.html | 8 +-
.../observability/monitor-plugin/index.html | 8 +-
.../rpc-proxy/dubbo-plugin/index.html | 8 +-
.../plugin-center/rpc-proxy/grpc-plugin/index.html | 8 +-
.../rpc-proxy/motan-plugin/index.html | 8 +-
.../plugin-center/rpc-proxy/sofa-plugin/index.html | 8 +-
.../rpc-proxy/spring-cloud-plugin/index.html | 8 +-
.../plugin-center/rpc-proxy/tars-plugin/index.html | 8 +-
.../2.4.0/quick-start/quick-start-dubbo/index.html | 8 +-
.../2.4.0/quick-start/quick-start-grpc/index.html | 8 +-
.../2.4.0/quick-start/quick-start-http/index.html | 8 +-
.../2.4.0/quick-start/quick-start-motan/index.html | 8 +-
.../2.4.0/quick-start/quick-start-sofa/index.html | 8 +-
.../quick-start/quick-start-springcloud/index.html | 8 +-
.../2.4.0/quick-start/quick-start-tars/index.html | 8 +-
.../admin-usage/data-permission/index.html | 8 +-
.../admin-usage/dictionary-management/index.html | 8 +-
.../plugin-handle-explanation/index.html | 8 +-
.../admin-usage/role-management/index.html | 8 +-
.../admin-usage/selector-and-rule/index.html | 8 +-
.../admin-property-config/index.html | 8 +-
.../client-property-config/index.html | 8 +-
.../gateway-property-config/index.html | 8 +-
.../2.4.0/user-guide/proxy/dubbo-proxy/index.html | 8 +-
.../2.4.0/user-guide/proxy/grpc-proxy/index.html | 8 +-
.../2.4.0/user-guide/proxy/http-proxy/index.html | 8 +-
.../2.4.0/user-guide/proxy/motan-proxy/index.html | 8 +-
.../user-guide/proxy/sofa-rpc-proxy/index.html | 8 +-
.../user-guide/proxy/spring-cloud-proxy/index.html | 8 +-
.../2.4.0/user-guide/proxy/tars-proxy/index.html | 8 +-
.../user-guide/register-center-access/index.html | 8 +-
zh/docs/2.4.0/user-guide/use-data-sync/index.html | 8 +-
.../2.4.1/deployment/deployment-cluster/index.html | 8 +-
.../2.4.1/deployment/deployment-custom/index.html | 8 +-
.../2.4.1/deployment/deployment-docker/index.html | 8 +-
.../2.4.1/deployment/deployment-helm/index.html | 8 +-
zh/docs/2.4.1/deployment/deployment-k8s/index.html | 8 +-
.../2.4.1/deployment/deployment-local/index.html | 8 +-
.../2.4.1/deployment/deployment-package/index.html | 8 +-
.../2.4.1/deployment/deployment-quick/index.html | 8 +-
zh/docs/2.4.1/design/data-sync/index.html | 8 +-
zh/docs/2.4.1/design/database-design/index.html | 8 +-
zh/docs/2.4.1/design/flow-control/index.html | 8 +-
.../2.4.1/design/register-center-design/index.html | 8 +-
zh/docs/2.4.1/design/spi-design/index.html | 8 +-
zh/docs/2.4.1/developer/custom-filter/index.html | 8 +-
.../custom-parsing-ip-and-host/index.html | 8 +-
zh/docs/2.4.1/developer/custom-plugin/index.html | 8 +-
zh/docs/2.4.1/developer/custom-result/index.html | 8 +-
.../developer/custom-sign-algorithm/index.html | 8 +-
.../developer/developer-shenyu-client/index.html | 8 +-
zh/docs/2.4.1/developer/file-and-image/index.html | 8 +-
zh/docs/2.4.1/developer/local-model/index.html | 8 +-
zh/docs/2.4.1/developer/shenyu-optimize/index.html | 8 +-
.../developer/spi/custom-load-balance/index.html | 8 +-
.../developer/spi/custom-match-mode/index.html | 8 +-
.../spi/custom-metrics-monitor/index.html | 8 +-
.../developer/spi/custom-parameter-data/index.html | 8 +-
.../spi/custom-predicate-judge/index.html | 8 +-
.../developer/spi/custom-rate-limiter/index.html | 8 +-
zh/docs/2.4.1/developer/thread-model/index.html | 8 +-
zh/docs/2.4.1/index/index.html | 8 +-
.../cryptor-request-plugin/index.html | 8 +-
.../cryptor-response-plugin/index.html | 8 +-
.../jwt-plugin/index.html | 8 +-
.../oauth2-plugin/index.html | 8 +-
.../sign-plugin/index.html | 8 +-
.../waf-plugin/index.html | 8 +-
.../common/general-context-plugin/index.html | 8 +-
.../fault-tolerance/hystrix-plugin/index.html | 8 +-
.../fault-tolerance/rate-limiter-plugin/index.html | 8 +-
.../fault-tolerance/resilience4j-plugin/index.html | 8 +-
.../fault-tolerance/sentinel-plugin/index.html | 8 +-
.../http-handle/context-path-plugin/index.html | 8 +-
.../http-handle/modify-response-plugin/index.html | 8 +-
.../http-handle/param-mapping-plugin/index.html | 8 +-
.../http-handle/redirect-plugin/index.html | 8 +-
.../http-handle/request-plugin/index.html | 8 +-
.../http-handle/rewrite-plugin/index.html | 8 +-
.../observability/logging-plugin/index.html | 8 +-
.../observability/monitor-plugin/index.html | 8 +-
.../plugin-center/proxy/divide-plugin/index.html | 8 +-
.../plugin-center/proxy/dubbo-plugin/index.html | 8 +-
.../plugin-center/proxy/grpc-plugin/index.html | 8 +-
.../plugin-center/proxy/motan-plugin/index.html | 8 +-
.../plugin-center/proxy/sofa-plugin/index.html | 8 +-
.../proxy/spring-cloud-plugin/index.html | 8 +-
.../plugin-center/proxy/tars-plugin/index.html | 8 +-
.../2.4.1/quick-start/quick-start-dubbo/index.html | 8 +-
.../2.4.1/quick-start/quick-start-grpc/index.html | 8 +-
.../2.4.1/quick-start/quick-start-http/index.html | 8 +-
.../2.4.1/quick-start/quick-start-motan/index.html | 8 +-
.../2.4.1/quick-start/quick-start-sofa/index.html | 8 +-
.../quick-start/quick-start-springcloud/index.html | 8 +-
.../2.4.1/quick-start/quick-start-tars/index.html | 8 +-
.../admin-usage/data-permission/index.html | 8 +-
.../admin-usage/dictionary-management/index.html | 8 +-
.../plugin-handle-explanation/index.html | 8 +-
.../admin-usage/role-management/index.html | 8 +-
.../admin-usage/selector-and-rule/index.html | 8 +-
.../admin-property-config/index.html | 8 +-
.../client-property-config/index.html | 8 +-
.../gateway-property-config/index.html | 8 +-
.../2.4.1/user-guide/proxy/dubbo-proxy/index.html | 8 +-
.../2.4.1/user-guide/proxy/grpc-proxy/index.html | 8 +-
.../2.4.1/user-guide/proxy/http-proxy/index.html | 8 +-
.../2.4.1/user-guide/proxy/motan-proxy/index.html | 8 +-
.../user-guide/proxy/sofa-rpc-proxy/index.html | 8 +-
.../user-guide/proxy/spring-cloud-proxy/index.html | 8 +-
.../2.4.1/user-guide/proxy/tars-proxy/index.html | 8 +-
.../user-guide/register-center-access/index.html | 8 +-
zh/docs/2.4.1/user-guide/use-data-sync/index.html | 8 +-
.../2.4.2/deployment/deployment-cluster/index.html | 8 +-
.../2.4.2/deployment/deployment-custom/index.html | 8 +-
.../deployment-docker-compose/index.html | 8 +-
.../2.4.2/deployment/deployment-docker/index.html | 8 +-
.../2.4.2/deployment/deployment-helm/index.html | 8 +-
zh/docs/2.4.2/deployment/deployment-k8s/index.html | 8 +-
.../2.4.2/deployment/deployment-local/index.html | 8 +-
.../2.4.2/deployment/deployment-package/index.html | 8 +-
.../2.4.2/deployment/deployment-quick/index.html | 8 +-
zh/docs/2.4.2/design/data-sync/index.html | 8 +-
zh/docs/2.4.2/design/database-design/index.html | 8 +-
zh/docs/2.4.2/design/flow-control/index.html | 8 +-
.../2.4.2/design/register-center-design/index.html | 8 +-
zh/docs/2.4.2/design/spi-design/index.html | 8 +-
zh/docs/2.4.2/developer/custom-filter/index.html | 8 +-
.../custom-parsing-ip-and-host/index.html | 8 +-
zh/docs/2.4.2/developer/custom-plugin/index.html | 8 +-
zh/docs/2.4.2/developer/custom-result/index.html | 8 +-
.../developer/custom-sign-algorithm/index.html | 8 +-
zh/docs/2.4.2/developer/debug-agent/index.html | 8 +-
.../developer/developer-shenyu-client/index.html | 8 +-
zh/docs/2.4.2/developer/file-and-image/index.html | 8 +-
.../2.4.2/developer/integration-test/index.html | 8 +-
zh/docs/2.4.2/developer/local-model/index.html | 8 +-
zh/docs/2.4.2/developer/shenyu-optimize/index.html | 8 +-
.../developer/spi/custom-load-balance/index.html | 8 +-
.../developer/spi/custom-match-mode/index.html | 8 +-
.../spi/custom-metrics-monitor/index.html | 8 +-
.../developer/spi/custom-parameter-data/index.html | 8 +-
.../spi/custom-predicate-judge/index.html | 8 +-
.../developer/spi/custom-rate-limiter/index.html | 8 +-
zh/docs/2.4.2/developer/thread-model/index.html | 8 +-
zh/docs/2.4.2/index/index.html | 8 +-
.../cryptor-request-plugin/index.html | 8 +-
.../cryptor-response-plugin/index.html | 8 +-
.../jwt-plugin/index.html | 8 +-
.../oauth2-plugin/index.html | 8 +-
.../sign-plugin/index.html | 8 +-
.../waf-plugin/index.html | 8 +-
.../common/general-context-plugin/index.html | 8 +-
.../fault-tolerance/hystrix-plugin/index.html | 8 +-
.../fault-tolerance/rate-limiter-plugin/index.html | 8 +-
.../fault-tolerance/resilience4j-plugin/index.html | 8 +-
.../fault-tolerance/sentinel-plugin/index.html | 8 +-
.../http-process/contextpath-plugin/index.html | 8 +-
.../http-process/modifyresponse-plugin/index.html | 8 +-
.../http-process/parammapping-plugin/index.html | 8 +-
.../http-process/redirect-plugin/index.html | 8 +-
.../http-process/request-plugin/index.html | 8 +-
.../http-process/rewrite-plugin/index.html | 8 +-
.../observability/logging-plugin/index.html | 8 +-
.../observability/monitor-plugin/index.html | 8 +-
.../plugin-center/proxy/divide-plugin/index.html | 8 +-
.../plugin-center/proxy/dubbo-plugin/index.html | 8 +-
.../plugin-center/proxy/grpc-plugin/index.html | 8 +-
.../plugin-center/proxy/motan-plugin/index.html | 8 +-
.../plugin-center/proxy/mqtt-plugin/index.html | 8 +-
.../plugin-center/proxy/sofa-plugin/index.html | 8 +-
.../proxy/spring-cloud-plugin/index.html | 8 +-
.../plugin-center/proxy/tars-plugin/index.html | 8 +-
.../2.4.2/quick-start/quick-start-dubbo/index.html | 8 +-
.../2.4.2/quick-start/quick-start-grpc/index.html | 8 +-
.../2.4.2/quick-start/quick-start-http/index.html | 8 +-
.../2.4.2/quick-start/quick-start-motan/index.html | 8 +-
.../2.4.2/quick-start/quick-start-sofa/index.html | 8 +-
.../quick-start/quick-start-springcloud/index.html | 8 +-
.../2.4.2/quick-start/quick-start-tars/index.html | 8 +-
.../admin-usage/data-permission/index.html | 8 +-
.../admin-usage/dictionary-management/index.html | 8 +-
.../plugin-handle-explanation/index.html | 8 +-
.../admin-usage/role-management/index.html | 8 +-
.../admin-usage/selector-and-rule/index.html | 8 +-
.../observability/observability/index.html | 8 +-
.../user-guide/observability/tracing/index.html | 8 +-
.../admin-property-config/index.html | 8 +-
.../client-property-config/index.html | 8 +-
.../gateway-property-config/index.html | 8 +-
.../2.4.2/user-guide/proxy/dubbo-proxy/index.html | 8 +-
.../2.4.2/user-guide/proxy/grpc-proxy/index.html | 8 +-
.../2.4.2/user-guide/proxy/http-proxy/index.html | 8 +-
.../2.4.2/user-guide/proxy/motan-proxy/index.html | 8 +-
.../user-guide/proxy/sofa-rpc-proxy/index.html | 8 +-
.../user-guide/proxy/spring-cloud-proxy/index.html | 8 +-
.../2.4.2/user-guide/proxy/tars-proxy/index.html | 8 +-
.../user-guide/register-center-access/index.html | 8 +-
.../user-guide/register-center-instance/index.html | 8 +-
zh/docs/2.4.2/user-guide/use-data-sync/index.html | 8 +-
.../2.4.3/deployment/deployment-before/index.html | 8 +-
.../2.4.3/deployment/deployment-cluster/index.html | 8 +-
.../2.4.3/deployment/deployment-custom/index.html | 8 +-
.../deployment-docker-compose/index.html | 8 +-
.../2.4.3/deployment/deployment-docker/index.html | 8 +-
.../2.4.3/deployment/deployment-helm/index.html | 8 +-
zh/docs/2.4.3/deployment/deployment-k8s/index.html | 8 +-
.../2.4.3/deployment/deployment-local/index.html | 8 +-
.../2.4.3/deployment/deployment-package/index.html | 8 +-
.../2.4.3/deployment/deployment-quick/index.html | 8 +-
zh/docs/2.4.3/design/data-sync/index.html | 8 +-
zh/docs/2.4.3/design/database-design/index.html | 8 +-
zh/docs/2.4.3/design/flow-control/index.html | 8 +-
.../2.4.3/design/register-center-design/index.html | 8 +-
zh/docs/2.4.3/design/spi-design/index.html | 8 +-
zh/docs/2.4.3/developer/custom-filter/index.html | 8 +-
.../custom-parsing-ip-and-host/index.html | 8 +-
zh/docs/2.4.3/developer/custom-plugin/index.html | 8 +-
zh/docs/2.4.3/developer/custom-result/index.html | 8 +-
.../developer/custom-sign-algorithm/index.html | 8 +-
.../developer/developer-shenyu-client/index.html | 8 +-
zh/docs/2.4.3/developer/file-and-image/index.html | 8 +-
.../2.4.3/developer/integration-test/index.html | 8 +-
zh/docs/2.4.3/developer/local-model/index.html | 8 +-
zh/docs/2.4.3/developer/shenyu-optimize/index.html | 8 +-
.../developer/spi/custom-load-balance/index.html | 8 +-
.../developer/spi/custom-match-mode/index.html | 8 +-
.../spi/custom-metrics-monitor/index.html | 8 +-
.../developer/spi/custom-parameter-data/index.html | 8 +-
.../spi/custom-predicate-judge/index.html | 8 +-
.../developer/spi/custom-rate-limiter/index.html | 8 +-
zh/docs/2.4.3/developer/thread-model/index.html | 8 +-
zh/docs/2.4.3/index/index.html | 8 +-
.../cryptor-request-plugin/index.html | 8 +-
.../cryptor-response-plugin/index.html | 8 +-
.../jwt-plugin/index.html | 8 +-
.../oauth2-plugin/index.html | 8 +-
.../sign-plugin/index.html | 8 +-
.../waf-plugin/index.html | 8 +-
.../plugin-center/cache/cache-plugin/index.html | 8 +-
.../common/general-context-plugin/index.html | 8 +-
.../fault-tolerance/hystrix-plugin/index.html | 8 +-
.../fault-tolerance/rate-limiter-plugin/index.html | 8 +-
.../fault-tolerance/resilience4j-plugin/index.html | 8 +-
.../fault-tolerance/sentinel-plugin/index.html | 8 +-
.../http-process/contextpath-plugin/index.html | 8 +-
.../http-process/modifyresponse-plugin/index.html | 8 +-
.../http-process/parammapping-plugin/index.html | 8 +-
.../http-process/redirect-plugin/index.html | 8 +-
.../http-process/request-plugin/index.html | 8 +-
.../http-process/rewrite-plugin/index.html | 8 +-
.../observability/logging-plugin/index.html | 8 +-
.../observability/logging-rocketmq/index.html | 8 +-
.../observability/metrics-plugin/index.html | 8 +-
.../plugin-center/proxy/divide-plugin/index.html | 8 +-
.../plugin-center/proxy/dubbo-plugin/index.html | 8 +-
.../plugin-center/proxy/grpc-plugin/index.html | 8 +-
.../plugin-center/proxy/motan-plugin/index.html | 8 +-
.../plugin-center/proxy/mqtt-plugin/index.html | 8 +-
.../plugin-center/proxy/sofa-plugin/index.html | 8 +-
.../proxy/spring-cloud-plugin/index.html | 8 +-
.../plugin-center/proxy/tars-plugin/index.html | 8 +-
.../proxy/websocket-plugin/index.html | 8 +-
.../2.4.3/quick-start/quick-start-dubbo/index.html | 8 +-
.../2.4.3/quick-start/quick-start-grpc/index.html | 8 +-
.../2.4.3/quick-start/quick-start-http/index.html | 8 +-
.../2.4.3/quick-start/quick-start-motan/index.html | 8 +-
.../2.4.3/quick-start/quick-start-sofa/index.html | 8 +-
.../quick-start/quick-start-springcloud/index.html | 8 +-
.../2.4.3/quick-start/quick-start-tars/index.html | 8 +-
.../quick-start/quick-start-websocket/index.html | 8 +-
.../admin-usage/data-permission/index.html | 8 +-
.../admin-usage/dictionary-management/index.html | 8 +-
.../plugin-handle-explanation/index.html | 8 +-
.../admin-usage/role-management/index.html | 8 +-
.../admin-usage/selector-and-rule/index.html | 8 +-
.../admin-property-config/index.html | 8 +-
.../client-property-config/index.html | 8 +-
.../gateway-property-config/index.html | 8 +-
.../2.4.3/user-guide/proxy/dubbo-proxy/index.html | 8 +-
.../2.4.3/user-guide/proxy/grpc-proxy/index.html | 8 +-
.../2.4.3/user-guide/proxy/http-proxy/index.html | 8 +-
.../2.4.3/user-guide/proxy/motan-proxy/index.html | 8 +-
.../user-guide/proxy/sofa-rpc-proxy/index.html | 8 +-
.../user-guide/proxy/spring-cloud-proxy/index.html | 8 +-
.../user-guide/proxy/websocket-proxy/index.html | 8 +-
.../user-guide/register-center-access/index.html | 8 +-
.../user-guide/register-center-instance/index.html | 8 +-
zh/docs/2.4.3/user-guide/tars-proxy/index.html | 8 +-
zh/docs/2.4.3/user-guide/use-data-sync/index.html | 8 +-
.../2.5.0/deployment/deployment-before/index.html | 8 +-
.../2.5.0/deployment/deployment-cluster/index.html | 8 +-
.../2.5.0/deployment/deployment-custom/index.html | 8 +-
.../deployment-docker-compose/index.html | 8 +-
.../2.5.0/deployment/deployment-docker/index.html | 8 +-
.../2.5.0/deployment/deployment-helm/index.html | 8 +-
zh/docs/2.5.0/deployment/deployment-k8s/index.html | 8 +-
.../2.5.0/deployment/deployment-local/index.html | 8 +-
.../2.5.0/deployment/deployment-package/index.html | 8 +-
.../2.5.0/deployment/deployment-quick/index.html | 8 +-
zh/docs/2.5.0/design/data-sync/index.html | 8 +-
zh/docs/2.5.0/design/database-design/index.html | 8 +-
zh/docs/2.5.0/design/flow-control/index.html | 8 +-
.../2.5.0/design/register-center-design/index.html | 8 +-
zh/docs/2.5.0/design/spi-design/index.html | 8 +-
zh/docs/2.5.0/developer/custom-filter/index.html | 8 +-
.../custom-parsing-ip-and-host/index.html | 8 +-
zh/docs/2.5.0/developer/custom-plugin/index.html | 8 +-
zh/docs/2.5.0/developer/custom-result/index.html | 8 +-
.../developer/custom-sign-algorithm/index.html | 8 +-
.../developer/developer-shenyu-client/index.html | 8 +-
zh/docs/2.5.0/developer/file-and-image/index.html | 8 +-
.../2.5.0/developer/integration-test/index.html | 8 +-
zh/docs/2.5.0/developer/local-model/index.html | 8 +-
zh/docs/2.5.0/developer/shenyu-optimize/index.html | 8 +-
.../developer/spi/custom-load-balance/index.html | 8 +-
.../developer/spi/custom-match-mode/index.html | 8 +-
.../spi/custom-metrics-monitor/index.html | 8 +-
.../developer/spi/custom-mock-generator/index.html | 8 +-
.../developer/spi/custom-parameter-data/index.html | 8 +-
.../spi/custom-predicate-judge/index.html | 8 +-
.../developer/spi/custom-rate-limiter/index.html | 8 +-
zh/docs/2.5.0/developer/thread-model/index.html | 8 +-
zh/docs/2.5.0/index/index.html | 8 +-
.../plugin-center/cache/cache-plugin/index.html | 8 +-
.../common/general-context-plugin/index.html | 8 +-
.../fault-tolerance/hystrix-plugin/index.html | 8 +-
.../fault-tolerance/rate-limiter-plugin/index.html | 8 +-
.../fault-tolerance/resilience4j-plugin/index.html | 8 +-
.../fault-tolerance/sentinel-plugin/index.html | 8 +-
.../http-process/contextpath-plugin/index.html | 8 +-
.../http-process/modifyresponse-plugin/index.html | 8 +-
.../http-process/parammapping-plugin/index.html | 8 +-
.../http-process/redirect-plugin/index.html | 8 +-
.../http-process/request-plugin/index.html | 8 +-
.../http-process/rewrite-plugin/index.html | 8 +-
.../plugin-center/mock/mock-plugin/index.html | 8 +-
.../observability/logging-aliyun-sls/index.html | 8 +-
.../observability/logging-elasticsearch/index.html | 8 +-
.../observability/logging-kafka/index.html | 8 +-
.../observability/logging-plugin/index.html | 8 +-
.../observability/logging-rocketmq/index.html | 8 +-
.../observability/metrics-plugin/index.html | 8 +-
.../plugin-center/proxy/divide-plugin/index.html | 8 +-
.../plugin-center/proxy/dubbo-plugin/index.html | 8 +-
.../plugin-center/proxy/grpc-plugin/index.html | 8 +-
.../plugin-center/proxy/motan-plugin/index.html | 8 +-
.../plugin-center/proxy/mqtt-plugin/index.html | 8 +-
.../plugin-center/proxy/sofa-plugin/index.html | 8 +-
.../proxy/spring-cloud-plugin/index.html | 8 +-
.../plugin-center/proxy/tars-plugin/index.html | 8 +-
.../proxy/websocket-plugin/index.html | 8 +-
.../security/cryptor-request-plugin/index.html | 8 +-
.../security/cryptor-response-plugin/index.html | 8 +-
.../plugin-center/security/jwt-plugin/index.html | 8 +-
.../security/oauth2-plugin/index.html | 8 +-
.../plugin-center/security/sign-plugin/index.html | 8 +-
.../plugin-center/security/waf-plugin/index.html | 8 +-
.../2.5.0/quick-start/quick-start-dubbo/index.html | 8 +-
.../2.5.0/quick-start/quick-start-grpc/index.html | 8 +-
.../2.5.0/quick-start/quick-start-http/index.html | 8 +-
.../2.5.0/quick-start/quick-start-motan/index.html | 8 +-
.../2.5.0/quick-start/quick-start-sofa/index.html | 8 +-
.../quick-start/quick-start-springcloud/index.html | 8 +-
.../2.5.0/quick-start/quick-start-tars/index.html | 8 +-
.../quick-start/quick-start-websocket/index.html | 8 +-
.../admin-usage/data-permission/index.html | 8 +-
.../admin-usage/dictionary-management/index.html | 8 +-
.../plugin-handle-explanation/index.html | 8 +-
.../admin-usage/role-management/index.html | 8 +-
.../admin-usage/selector-and-rule/index.html | 8 +-
.../admin-property-config/index.html | 8 +-
.../client-property-config/index.html | 8 +-
.../gateway-property-config/index.html | 8 +-
.../register-center-access/index.html | 8 +-
.../register-center-instance/index.html | 8 +-
.../property-config/use-data-sync/index.html | 8 +-
.../2.5.0/user-guide/proxy/dubbo-proxy/index.html | 8 +-
.../2.5.0/user-guide/proxy/grpc-proxy/index.html | 8 +-
.../2.5.0/user-guide/proxy/http-proxy/index.html | 8 +-
.../2.5.0/user-guide/proxy/motan-proxy/index.html | 8 +-
.../user-guide/proxy/sofa-rpc-proxy/index.html | 8 +-
.../user-guide/proxy/spring-cloud-proxy/index.html | 8 +-
.../2.5.0/user-guide/proxy/tars-proxy/index.html | 8 +-
.../user-guide/proxy/websocket-proxy/index.html | 8 +-
.../2.5.1/deployment/deployment-before/index.html | 8 +-
.../2.5.1/deployment/deployment-cluster/index.html | 8 +-
.../2.5.1/deployment/deployment-custom/index.html | 8 +-
.../deployment-docker-compose/index.html | 8 +-
.../2.5.1/deployment/deployment-docker/index.html | 8 +-
.../2.5.1/deployment/deployment-helm/index.html | 8 +-
zh/docs/2.5.1/deployment/deployment-k8s/index.html | 8 +-
.../2.5.1/deployment/deployment-local/index.html | 8 +-
.../2.5.1/deployment/deployment-package/index.html | 8 +-
.../2.5.1/deployment/deployment-quick/index.html | 8 +-
zh/docs/2.5.1/design/data-sync/index.html | 8 +-
zh/docs/2.5.1/design/database-design/index.html | 8 +-
zh/docs/2.5.1/design/flow-control/index.html | 8 +-
.../2.5.1/design/register-center-design/index.html | 8 +-
zh/docs/2.5.1/design/spi-design/index.html | 8 +-
zh/docs/2.5.1/developer/custom-filter/index.html | 8 +-
.../custom-jwt-covert-algorithm/index.html | 8 +-
.../custom-parsing-ip-and-host/index.html | 8 +-
zh/docs/2.5.1/developer/custom-plugin/index.html | 8 +-
zh/docs/2.5.1/developer/custom-result/index.html | 8 +-
.../developer/custom-sign-algorithm/index.html | 8 +-
.../developer/developer-shenyu-client/index.html | 8 +-
zh/docs/2.5.1/developer/file-and-image/index.html | 8 +-
.../2.5.1/developer/integration-test/index.html | 8 +-
zh/docs/2.5.1/developer/local-model/index.html | 8 +-
zh/docs/2.5.1/developer/shenyu-optimize/index.html | 8 +-
.../developer/spi/custom-load-balance/index.html | 8 +-
.../developer/spi/custom-match-mode/index.html | 8 +-
.../spi/custom-metrics-monitor/index.html | 8 +-
.../developer/spi/custom-mock-generator/index.html | 8 +-
.../developer/spi/custom-parameter-data/index.html | 8 +-
.../spi/custom-predicate-judge/index.html | 8 +-
.../developer/spi/custom-rate-limiter/index.html | 8 +-
zh/docs/2.5.1/developer/thread-model/index.html | 8 +-
zh/docs/2.5.1/index/index.html | 8 +-
.../plugin-center/cache/cache-plugin/index.html | 8 +-
.../common/general-context-plugin/index.html | 8 +-
.../fault-tolerance/hystrix-plugin/index.html | 8 +-
.../fault-tolerance/rate-limiter-plugin/index.html | 8 +-
.../fault-tolerance/resilience4j-plugin/index.html | 8 +-
.../fault-tolerance/sentinel-plugin/index.html | 8 +-
.../http-process/contextpath-plugin/index.html | 8 +-
.../http-process/modifyresponse-plugin/index.html | 8 +-
.../http-process/parammapping-plugin/index.html | 8 +-
.../http-process/redirect-plugin/index.html | 8 +-
.../http-process/request-plugin/index.html | 8 +-
.../http-process/rewrite-plugin/index.html | 8 +-
.../plugin-center/mock/mock-plugin/index.html | 8 +-
.../observability/logging-aliyun-sls/index.html | 8 +-
.../observability/logging-elasticsearch/index.html | 8 +-
.../observability/logging-kafka/index.html | 8 +-
.../observability/logging-plugin/index.html | 8 +-
.../observability/logging-pulsar/index.html | 8 +-
.../observability/logging-rocketmq/index.html | 8 +-
.../observability/logging-tencent-cls/index.html | 8 +-
.../observability/metrics-plugin/index.html | 8 +-
.../plugin-center/proxy/brpc-plugin/index.html | 8 +-
.../plugin-center/proxy/divide-plugin/index.html | 8 +-
.../plugin-center/proxy/dubbo-plugin/index.html | 8 +-
.../plugin-center/proxy/grpc-plugin/index.html | 8 +-
.../plugin-center/proxy/motan-plugin/index.html | 8 +-
.../plugin-center/proxy/mqtt-plugin/index.html | 8 +-
.../plugin-center/proxy/sofa-plugin/index.html | 8 +-
.../proxy/spring-cloud-plugin/index.html | 8 +-
.../plugin-center/proxy/tars-plugin/index.html | 8 +-
.../proxy/websocket-plugin/index.html | 8 +-
.../plugin-center/security/casdoor/index.html | 8 +-
.../security/cryptor-request-plugin/index.html | 8 +-
.../security/cryptor-response-plugin/index.html | 8 +-
.../plugin-center/security/jwt-plugin/index.html | 8 +-
.../security/oauth2-plugin/index.html | 8 +-
.../plugin-center/security/sign-plugin/index.html | 8 +-
.../plugin-center/security/waf-plugin/index.html | 8 +-
.../2.5.1/quick-start/quick-start-brpc/index.html | 8 +-
.../2.5.1/quick-start/quick-start-dubbo/index.html | 8 +-
.../2.5.1/quick-start/quick-start-grpc/index.html | 8 +-
.../2.5.1/quick-start/quick-start-http/index.html | 8 +-
.../2.5.1/quick-start/quick-start-motan/index.html | 8 +-
.../2.5.1/quick-start/quick-start-sofa/index.html | 8 +-
.../quick-start/quick-start-springcloud/index.html | 8 +-
.../2.5.1/quick-start/quick-start-tars/index.html | 8 +-
.../quick-start/quick-start-websocket/index.html | 8 +-
.../admin-usage/data-permission/index.html | 8 +-
.../admin-usage/dictionary-management/index.html | 8 +-
.../plugin-handle-explanation/index.html | 8 +-
.../admin-usage/role-management/index.html | 8 +-
.../admin-usage/selector-and-rule/index.html | 8 +-
.../admin-property-config/index.html | 8 +-
.../client-property-config/index.html | 8 +-
.../gateway-property-config/index.html | 8 +-
.../register-center-access/index.html | 8 +-
.../register-center-instance/index.html | 8 +-
.../property-config/use-data-sync/index.html | 8 +-
.../2.5.1/user-guide/proxy/brpc-proxy/index.html | 8 +-
.../2.5.1/user-guide/proxy/dubbo-proxy/index.html | 8 +-
.../2.5.1/user-guide/proxy/grpc-proxy/index.html | 8 +-
.../2.5.1/user-guide/proxy/http-proxy/index.html | 8 +-
.../2.5.1/user-guide/proxy/motan-proxy/index.html | 8 +-
.../user-guide/proxy/sofa-rpc-proxy/index.html | 8 +-
.../user-guide/proxy/spring-cloud-proxy/index.html | 8 +-
.../2.5.1/user-guide/proxy/tars-proxy/index.html | 8 +-
.../user-guide/proxy/websocket-proxy/index.html | 8 +-
.../sdk-usage/shenyu-sdk-consul/index.html | 8 +-
.../sdk-usage/shenyu-sdk-etcd/index.html | 8 +-
.../sdk-usage/shenyu-sdk-eureka/index.html | 8 +-
.../sdk-usage/shenyu-sdk-nacos/index.html | 8 +-
.../sdk-usage/shenyu-sdk-zookeeper/index.html | 8 +-
.../2.6.0/benchmark-test/benchmark-test/index.html | 8 +-
.../2.6.0/deployment/deployment-before/index.html | 8 +-
.../2.6.0/deployment/deployment-cluster/index.html | 8 +-
.../2.6.0/deployment/deployment-custom/index.html | 8 +-
.../deployment-docker-compose/index.html | 8 +-
.../2.6.0/deployment/deployment-docker/index.html | 8 +-
.../2.6.0/deployment/deployment-helm/index.html | 8 +-
zh/docs/2.6.0/deployment/deployment-k8s/index.html | 8 +-
.../2.6.0/deployment/deployment-local/index.html | 8 +-
.../2.6.0/deployment/deployment-package/index.html | 8 +-
.../2.6.0/deployment/deployment-quick/index.html | 8 +-
zh/docs/2.6.0/design/data-sync/index.html | 8 +-
zh/docs/2.6.0/design/database-design/index.html | 8 +-
zh/docs/2.6.0/design/flow-control/index.html | 8 +-
.../2.6.0/design/register-center-design/index.html | 8 +-
zh/docs/2.6.0/design/spi-design/index.html | 8 +-
zh/docs/2.6.0/design/wasm-plugin-design/index.html | 8 +-
zh/docs/2.6.0/developer/custom-filter/index.html | 8 +-
.../custom-jwt-covert-algorithm/index.html | 8 +-
.../custom-parsing-ip-and-host/index.html | 8 +-
zh/docs/2.6.0/developer/custom-plugin/index.html | 8 +-
zh/docs/2.6.0/developer/custom-result/index.html | 8 +-
.../developer/custom-sign-algorithm/index.html | 8 +-
.../developer/developer-shenyu-client/index.html | 8 +-
zh/docs/2.6.0/developer/file-and-image/index.html | 8 +-
.../2.6.0/developer/integration-test/index.html | 8 +-
zh/docs/2.6.0/developer/local-model/index.html | 8 +-
zh/docs/2.6.0/developer/shenyu-optimize/index.html | 8 +-
.../developer/spi/custom-load-balance/index.html | 8 +-
.../developer/spi/custom-match-mode/index.html | 8 +-
.../spi/custom-metrics-monitor/index.html | 8 +-
.../developer/spi/custom-mock-generator/index.html | 8 +-
.../developer/spi/custom-parameter-data/index.html | 8 +-
.../spi/custom-predicate-judge/index.html | 8 +-
.../developer/spi/custom-rate-limiter/index.html | 8 +-
zh/docs/2.6.0/developer/thread-model/index.html | 8 +-
zh/docs/2.6.0/index/index.html | 8 +-
.../plugin-center/cache/cache-plugin/index.html | 8 +-
.../common/general-context-plugin/index.html | 8 +-
.../discovery/discovery-mode/index.html | 8 +-
.../fault-tolerance/hystrix-plugin/index.html | 8 +-
.../fault-tolerance/rate-limiter-plugin/index.html | 8 +-
.../fault-tolerance/resilience4j-plugin/index.html | 8 +-
.../fault-tolerance/sentinel-plugin/index.html | 8 +-
.../http-process/contextpath-plugin/index.html | 8 +-
.../http-process/modifyresponse-plugin/index.html | 8 +-
.../http-process/parammapping-plugin/index.html | 8 +-
.../http-process/redirect-plugin/index.html | 8 +-
.../http-process/request-plugin/index.html | 8 +-
.../http-process/rewrite-plugin/index.html | 8 +-
.../plugin-center/mock/mock-plugin/index.html | 8 +-
.../observability/logging-aliyun-sls/index.html | 8 +-
.../observability/logging-elasticsearch/index.html | 8 +-
.../observability/logging-huawei-lts/index.html | 8 +-
.../observability/logging-kafka/index.html | 8 +-
.../observability/logging-plugin/index.html | 8 +-
.../observability/logging-pulsar/index.html | 8 +-
.../observability/logging-rocketmq/index.html | 8 +-
.../observability/logging-tencent-cls/index.html | 8 +-
.../observability/metrics-plugin/index.html | 8 +-
.../plugin-center/proxy/brpc-plugin/index.html | 8 +-
.../plugin-center/proxy/divide-plugin/index.html | 8 +-
.../plugin-center/proxy/dubbo-plugin/index.html | 8 +-
.../plugin-center/proxy/grpc-plugin/index.html | 8 +-
.../plugin-center/proxy/motan-plugin/index.html | 8 +-
.../plugin-center/proxy/mqtt-plugin/index.html | 8 +-
.../plugin-center/proxy/sofa-plugin/index.html | 8 +-
.../proxy/spring-cloud-plugin/index.html | 8 +-
.../plugin-center/proxy/tars-plugin/index.html | 8 +-
.../plugin-center/proxy/tcp-plugin/index.html | 8 +-
.../proxy/websocket-plugin/index.html | 8 +-
.../plugin-center/security/casdoor/index.html | 8 +-
.../security/cryptor-request-plugin/index.html | 8 +-
.../security/cryptor-response-plugin/index.html | 8 +-
.../plugin-center/security/jwt-plugin/index.html | 8 +-
.../security/oauth2-plugin/index.html | 8 +-
.../plugin-center/security/sign-plugin/index.html | 8 +-
.../plugin-center/security/waf-plugin/index.html | 8 +-
.../2.6.0/quick-start/quick-start-brpc/index.html | 8 +-
.../2.6.0/quick-start/quick-start-dubbo/index.html | 8 +-
.../2.6.0/quick-start/quick-start-grpc/index.html | 8 +-
.../2.6.0/quick-start/quick-start-http/index.html | 8 +-
.../2.6.0/quick-start/quick-start-motan/index.html | 8 +-
.../2.6.0/quick-start/quick-start-sofa/index.html | 8 +-
.../quick-start/quick-start-springcloud/index.html | 8 +-
.../2.6.0/quick-start/quick-start-tars/index.html | 8 +-
.../quick-start/quick-start-websocket/index.html | 8 +-
.../user-guide/admin-usage/api-document/index.html | 8 +-
.../admin-usage/data-permission/index.html | 8 +-
.../admin-usage/dictionary-management/index.html | 8 +-
.../plugin-handle-explanation/index.html | 8 +-
.../admin-usage/role-management/index.html | 8 +-
.../admin-usage/selector-and-rule/index.html | 8 +-
.../api-doc/shenyu-annotation-apidoc/index.html | 8 +-
.../user-guide/api-doc/swagger-apidoc/index.html | 8 +-
.../kubernetes-controller/build-deploy/index.html | 8 +-
.../kubernetes-controller/config/index.html | 8 +-
.../admin-property-config/index.html | 8 +-
.../client-property-config/index.html | 8 +-
.../gateway-property-config/index.html | 8 +-
.../register-center-access/index.html | 8 +-
.../register-center-instance/index.html | 8 +-
.../property-config/use-data-sync/index.html | 8 +-
.../2.6.0/user-guide/proxy/brpc-proxy/index.html | 8 +-
.../2.6.0/user-guide/proxy/dubbo-proxy/index.html | 8 +-
.../2.6.0/user-guide/proxy/grpc-proxy/index.html | 8 +-
.../2.6.0/user-guide/proxy/http-proxy/index.html | 8 +-
.../2.6.0/user-guide/proxy/motan-proxy/index.html | 8 +-
.../user-guide/proxy/sofa-rpc-proxy/index.html | 8 +-
.../user-guide/proxy/spring-cloud-proxy/index.html | 8 +-
.../2.6.0/user-guide/proxy/tars-proxy/index.html | 8 +-
.../user-guide/proxy/websocket-proxy/index.html | 8 +-
.../sdk-usage/shenyu-sdk-consul/index.html | 8 +-
.../sdk-usage/shenyu-sdk-etcd/index.html | 8 +-
.../sdk-usage/shenyu-sdk-eureka/index.html | 8 +-
.../sdk-usage/shenyu-sdk-nacos/index.html | 8 +-
.../sdk-usage/shenyu-sdk-zookeeper/index.html | 8 +-
zh/docs/benchmark-test/benchmark-test/index.html | 8 +-
zh/docs/deployment/deployment-before/index.html | 8 +-
zh/docs/deployment/deployment-cluster/index.html | 8 +-
zh/docs/deployment/deployment-custom/index.html | 8 +-
.../deployment-docker-compose/index.html | 8 +-
zh/docs/deployment/deployment-docker/index.html | 8 +-
zh/docs/deployment/deployment-helm/index.html | 8 +-
zh/docs/deployment/deployment-k8s/index.html | 8 +-
zh/docs/deployment/deployment-local/index.html | 8 +-
zh/docs/deployment/deployment-package/index.html | 8 +-
zh/docs/deployment/deployment-quick/index.html | 8 +-
zh/docs/design/data-sync/index.html | 8 +-
zh/docs/design/database-design/index.html | 8 +-
zh/docs/design/flow-control/index.html | 8 +-
zh/docs/design/register-center-design/index.html | 8 +-
zh/docs/design/spi-design/index.html | 8 +-
zh/docs/design/wasm-plugin-design/index.html | 8 +-
zh/docs/developer/custom-filter/index.html | 8 +-
.../custom-jwt-covert-algorithm/index.html | 8 +-
.../custom-parsing-ip-and-host/index.html | 8 +-
zh/docs/developer/custom-plugin/index.html | 8 +-
zh/docs/developer/custom-result/index.html | 8 +-
zh/docs/developer/custom-sign-algorithm/index.html | 8 +-
.../developer/developer-shenyu-client/index.html | 8 +-
zh/docs/developer/file-and-image/index.html | 8 +-
zh/docs/developer/integration-test/index.html | 8 +-
zh/docs/developer/local-model/index.html | 8 +-
zh/docs/developer/notice-alert/index.html | 8 +-
zh/docs/developer/shenyu-optimize/index.html | 8 +-
.../developer/spi/custom-load-balance/index.html | 8 +-
zh/docs/developer/spi/custom-match-mode/index.html | 8 +-
.../spi/custom-metrics-monitor/index.html | 8 +-
.../developer/spi/custom-mock-generator/index.html | 8 +-
.../developer/spi/custom-parameter-data/index.html | 8 +-
.../spi/custom-predicate-judge/index.html | 8 +-
.../developer/spi/custom-rate-limiter/index.html | 8 +-
zh/docs/developer/thread-model/index.html | 8 +-
zh/docs/index/index.html | 8 +-
.../next/benchmark-test/benchmark-test/index.html | 8 +-
.../next/deployment/deployment-before/index.html | 8 +-
.../next/deployment/deployment-cluster/index.html | 8 +-
.../next/deployment/deployment-custom/index.html | 8 +-
.../deployment-docker-compose/index.html | 8 +-
.../next/deployment/deployment-docker/index.html | 8 +-
zh/docs/next/deployment/deployment-helm/index.html | 8 +-
zh/docs/next/deployment/deployment-k8s/index.html | 8 +-
.../next/deployment/deployment-local/index.html | 8 +-
.../next/deployment/deployment-package/index.html | 8 +-
.../next/deployment/deployment-quick/index.html | 8 +-
zh/docs/next/design/data-sync/index.html | 8 +-
zh/docs/next/design/database-design/index.html | 8 +-
zh/docs/next/design/flow-control/index.html | 8 +-
.../next/design/register-center-design/index.html | 8 +-
zh/docs/next/design/spi-design/index.html | 8 +-
zh/docs/next/design/wasm-plugin-design/index.html | 8 +-
zh/docs/next/developer/custom-filter/index.html | 8 +-
.../custom-jwt-covert-algorithm/index.html | 8 +-
.../custom-parsing-ip-and-host/index.html | 8 +-
zh/docs/next/developer/custom-plugin/index.html | 8 +-
zh/docs/next/developer/custom-result/index.html | 8 +-
.../developer/custom-sign-algorithm/index.html | 8 +-
.../developer/developer-shenyu-client/index.html | 8 +-
zh/docs/next/developer/file-and-image/index.html | 8 +-
zh/docs/next/developer/integration-test/index.html | 8 +-
zh/docs/next/developer/local-model/index.html | 8 +-
zh/docs/next/developer/notice-alert/index.html | 8 +-
zh/docs/next/developer/shenyu-optimize/index.html | 8 +-
.../developer/spi/custom-load-balance/index.html | 8 +-
.../developer/spi/custom-match-mode/index.html | 8 +-
.../spi/custom-metrics-monitor/index.html | 8 +-
.../developer/spi/custom-mock-generator/index.html | 8 +-
.../developer/spi/custom-parameter-data/index.html | 8 +-
.../spi/custom-predicate-judge/index.html | 8 +-
.../developer/spi/custom-rate-limiter/index.html | 8 +-
zh/docs/next/developer/thread-model/index.html | 8 +-
zh/docs/next/index/index.html | 8 +-
.../plugin-center/cache/cache-plugin/index.html | 8 +-
.../common/general-context-plugin/index.html | 8 +-
.../fault-tolerance/hystrix-plugin/index.html | 8 +-
.../fault-tolerance/rate-limiter-plugin/index.html | 8 +-
.../fault-tolerance/resilience4j-plugin/index.html | 8 +-
.../fault-tolerance/sentinel-plugin/index.html | 8 +-
.../http-process/contextpath-plugin/index.html | 8 +-
.../http-process/modifyresponse-plugin/index.html | 8 +-
.../http-process/parammapping-plugin/index.html | 8 +-
.../http-process/redirect-plugin/index.html | 8 +-
.../http-process/request-plugin/index.html | 8 +-
.../http-process/rewrite-plugin/index.html | 8 +-
.../next/plugin-center/mock/mock-plugin/index.html | 8 +-
.../observability/logging-aliyun-sls/index.html | 8 +-
.../observability/logging-elasticsearch/index.html | 8 +-
.../observability/logging-huawei-lts/index.html | 8 +-
.../observability/logging-kafka/index.html | 8 +-
.../observability/logging-plugin/index.html | 8 +-
.../observability/logging-pulsar/index.html | 8 +-
.../observability/logging-rocketmq/index.html | 8 +-
.../observability/logging-tencent-cls/index.html | 8 +-
.../observability/metrics-plugin/index.html | 8 +-
.../plugin-center/proxy/divide-plugin/index.html | 8 +-
.../plugin-center/proxy/dubbo-plugin/index.html | 8 +-
.../plugin-center/proxy/grpc-plugin/index.html | 8 +-
.../plugin-center/proxy/motan-plugin/index.html | 8 +-
.../plugin-center/proxy/mqtt-plugin/index.html | 8 +-
.../plugin-center/proxy/sofa-plugin/index.html | 8 +-
.../proxy/spring-cloud-plugin/index.html | 8 +-
.../plugin-center/proxy/tars-plugin/index.html | 8 +-
.../next/plugin-center/proxy/tcp-plugin/index.html | 8 +-
.../proxy/websocket-plugin/index.html | 8 +-
.../next/plugin-center/security/casdoor/index.html | 8 +-
.../security/cryptor-request-plugin/index.html | 8 +-
.../security/cryptor-response-plugin/index.html | 8 +-
.../plugin-center/security/jwt-plugin/index.html | 8 +-
.../security/oauth2-plugin/index.html | 8 +-
.../plugin-center/security/sign-plugin/index.html | 8 +-
.../plugin-center/security/waf-plugin/index.html | 8 +-
.../next/quick-start/quick-start-dubbo/index.html | 8 +-
.../next/quick-start/quick-start-grpc/index.html | 8 +-
.../next/quick-start/quick-start-http/index.html | 8 +-
.../next/quick-start/quick-start-motan/index.html | 8 +-
.../next/quick-start/quick-start-sofa/index.html | 8 +-
.../quick-start/quick-start-springcloud/index.html | 8 +-
.../next/quick-start/quick-start-tars/index.html | 8 +-
.../quick-start/quick-start-websocket/index.html | 8 +-
.../user-guide/admin-usage/api-document/index.html | 8 +-
.../admin-usage/data-permission/index.html | 8 +-
.../admin-usage/dictionary-management/index.html | 8 +-
.../plugin-handle-explanation/index.html | 8 +-
.../admin-usage/role-management/index.html | 8 +-
.../admin-usage/selector-and-rule/index.html | 8 +-
.../api-doc/shenyu-annotation-apidoc/index.html | 8 +-
.../user-guide/api-doc/swagger-apidoc/index.html | 8 +-
.../user-guide/discovery/discovery-mode/index.html | 8 +-
.../kubernetes-controller/build-deploy/index.html | 8 +-
.../kubernetes-controller/config/index.html | 8 +-
.../admin-property-config/index.html | 8 +-
.../client-property-config/index.html | 8 +-
.../gateway-property-config/index.html | 8 +-
.../register-center-access/index.html | 8 +-
.../register-center-instance/index.html | 8 +-
.../property-config/use-data-sync/index.html | 8 +-
.../next/user-guide/proxy/dubbo-proxy/index.html | 8 +-
.../next/user-guide/proxy/grpc-proxy/index.html | 8 +-
.../next/user-guide/proxy/http-proxy/index.html | 8 +-
.../next/user-guide/proxy/motan-proxy/index.html | 8 +-
.../user-guide/proxy/sofa-rpc-proxy/index.html | 8 +-
.../user-guide/proxy/spring-cloud-proxy/index.html | 8 +-
.../next/user-guide/proxy/tars-proxy/index.html | 8 +-
.../user-guide/proxy/websocket-proxy/index.html | 8 +-
.../sdk-usage/shenyu-sdk-consul/index.html | 8 +-
.../sdk-usage/shenyu-sdk-etcd/index.html | 8 +-
.../sdk-usage/shenyu-sdk-eureka/index.html | 8 +-
.../sdk-usage/shenyu-sdk-feign/index.html | 8 +-
.../sdk-usage/shenyu-sdk-nacos/index.html | 8 +-
.../sdk-usage/shenyu-sdk-zookeeper/index.html | 8 +-
.../plugin-center/cache/cache-plugin/index.html | 8 +-
.../common/general-context-plugin/index.html | 8 +-
.../fault-tolerance/hystrix-plugin/index.html | 8 +-
.../fault-tolerance/rate-limiter-plugin/index.html | 8 +-
.../fault-tolerance/resilience4j-plugin/index.html | 8 +-
.../fault-tolerance/sentinel-plugin/index.html | 8 +-
.../http-process/contextpath-plugin/index.html | 8 +-
.../http-process/modifyresponse-plugin/index.html | 8 +-
.../http-process/parammapping-plugin/index.html | 8 +-
.../http-process/redirect-plugin/index.html | 8 +-
.../http-process/request-plugin/index.html | 8 +-
.../http-process/rewrite-plugin/index.html | 8 +-
zh/docs/plugin-center/mock/mock-plugin/index.html | 8 +-
.../observability/logging-aliyun-sls/index.html | 8 +-
.../observability/logging-elasticsearch/index.html | 8 +-
.../observability/logging-huawei-lts/index.html | 8 +-
.../observability/logging-kafka/index.html | 8 +-
.../observability/logging-plugin/index.html | 8 +-
.../observability/logging-pulsar/index.html | 8 +-
.../observability/logging-rocketmq/index.html | 8 +-
.../observability/logging-tencent-cls/index.html | 8 +-
.../observability/metrics-plugin/index.html | 8 +-
.../plugin-center/proxy/divide-plugin/index.html | 8 +-
.../plugin-center/proxy/dubbo-plugin/index.html | 8 +-
zh/docs/plugin-center/proxy/grpc-plugin/index.html | 8 +-
.../plugin-center/proxy/motan-plugin/index.html | 8 +-
zh/docs/plugin-center/proxy/mqtt-plugin/index.html | 8 +-
zh/docs/plugin-center/proxy/sofa-plugin/index.html | 8 +-
.../proxy/spring-cloud-plugin/index.html | 8 +-
zh/docs/plugin-center/proxy/tars-plugin/index.html | 8 +-
zh/docs/plugin-center/proxy/tcp-plugin/index.html | 8 +-
.../proxy/websocket-plugin/index.html | 8 +-
zh/docs/plugin-center/security/casdoor/index.html | 8 +-
.../security/cryptor-request-plugin/index.html | 8 +-
.../security/cryptor-response-plugin/index.html | 8 +-
.../plugin-center/security/jwt-plugin/index.html | 8 +-
.../security/oauth2-plugin/index.html | 8 +-
.../plugin-center/security/sign-plugin/index.html | 8 +-
.../plugin-center/security/waf-plugin/index.html | 8 +-
zh/docs/quick-start/quick-start-dubbo/index.html | 8 +-
zh/docs/quick-start/quick-start-grpc/index.html | 8 +-
zh/docs/quick-start/quick-start-http/index.html | 8 +-
zh/docs/quick-start/quick-start-motan/index.html | 8 +-
zh/docs/quick-start/quick-start-sofa/index.html | 8 +-
.../quick-start/quick-start-springcloud/index.html | 8 +-
zh/docs/quick-start/quick-start-tars/index.html | 8 +-
.../quick-start/quick-start-websocket/index.html | 8 +-
.../user-guide/admin-usage/api-document/index.html | 8 +-
.../admin-usage/data-permission/index.html | 8 +-
.../admin-usage/dictionary-management/index.html | 8 +-
.../plugin-handle-explanation/index.html | 8 +-
.../admin-usage/role-management/index.html | 8 +-
.../admin-usage/selector-and-rule/index.html | 8 +-
.../api-doc/shenyu-annotation-apidoc/index.html | 8 +-
.../user-guide/api-doc/swagger-apidoc/index.html | 8 +-
.../user-guide/discovery/discovery-mode/index.html | 8 +-
.../kubernetes-controller/build-deploy/index.html | 8 +-
.../kubernetes-controller/config/index.html | 8 +-
.../admin-property-config/index.html | 8 +-
.../client-property-config/index.html | 8 +-
.../gateway-property-config/index.html | 8 +-
.../register-center-access/index.html | 8 +-
.../register-center-instance/index.html | 8 +-
.../property-config/use-data-sync/index.html | 8 +-
zh/docs/user-guide/proxy/dubbo-proxy/index.html | 8 +-
zh/docs/user-guide/proxy/grpc-proxy/index.html | 8 +-
zh/docs/user-guide/proxy/http-proxy/index.html | 8 +-
zh/docs/user-guide/proxy/motan-proxy/index.html | 8 +-
zh/docs/user-guide/proxy/sofa-rpc-proxy/index.html | 8 +-
.../user-guide/proxy/spring-cloud-proxy/index.html | 8 +-
zh/docs/user-guide/proxy/tars-proxy/index.html | 8 +-
.../user-guide/proxy/websocket-proxy/index.html | 8 +-
.../sdk-usage/shenyu-sdk-consul/index.html | 8 +-
.../sdk-usage/shenyu-sdk-etcd/index.html | 8 +-
.../sdk-usage/shenyu-sdk-eureka/index.html | 8 +-
.../sdk-usage/shenyu-sdk-feign/index.html | 8 +-
.../sdk-usage/shenyu-sdk-nacos/index.html | 8 +-
.../sdk-usage/shenyu-sdk-zookeeper/index.html | 8 +-
zh/document/index.html | 8 +-
zh/download/index.html | 8 +-
zh/event/2.2.0-release/index.html | 10 +-
zh/event/2.3.0-release/index.html | 10 +-
zh/event/2.4.0-release/index.html | 10 +-
zh/event/2.4.1-release/index.html | 10 +-
zh/event/2.4.2-release/index.html | 10 +-
zh/event/2.4.3-release/index.html | 10 +-
zh/event/2.5.0-release/index.html | 10 +-
zh/event/2.5.1-release/index.html | 10 +-
zh/event/2.6.0-release/index.html | 10 +-
zh/event/2.6.1-release/index.html | 10 +-
zh/event/client-dotnet-1.0.0-release/index.html | 10 +-
zh/event/client-golang-1.0.0-release/index.html | 10 +-
zh/event/index.html | 8 +-
zh/event/nginx-1.0.0-1-release/index.html | 10 +-
zh/event/shenyu-wasm-1.0.0-release/index.html | 10 +-
zh/helloReact/index.html | 8 +-
zh/helm/index/index.html | 10 +-
zh/index.html | 8 +-
zh/markdown-page/index.html | 8 +-
.../Apache-ShenYu-Committer-2021-07-27/index.html | 8 +-
.../Apache-ShenYu-Committer-2021-09-08/index.html | 8 +-
.../Apache-ShenYu-Committer-2021-11-11/index.html | 8 +-
.../Apache-ShenYu-Committer-2021-12-08/index.html | 8 +-
.../Apache-ShenYu-Committer-2022-02-28/index.html | 8 +-
.../Apache-ShenYu-Committer-2022-04-20/index.html | 8 +-
.../Apache-ShenYu-Committer-2022-07-04/index.html | 8 +-
.../Apache-ShenYu-Committer-2022-08-04/index.html | 8 +-
.../Apache-ShenYu-Committer-2022-08-08/index.html | 8 +-
.../Apache-ShenYu-Committer-2023-06-14/index.html | 8 +-
.../Apache-ShenYu-GSOC2023-2023-04-18/index.html | 8 +-
.../Apache-ShenYu-OSPP2023-2023-05-19/index.html | 8 +-
zh/news/Apache-ShenYu-PPMC-2021-11-05/index.html | 8 +-
.../index.html | 8 +-
.../index.html | 8 +-
.../Apache-ShenYu-release-version-2.4.3/index.html | 8 +-
.../Apache-ShenYu-release-version-2.5.1/index.html | 8 +-
.../Apache-ShenYu-release-version-2.6.0/index.html | 8 +-
.../index.html | 8 +-
zh/news/index.html | 8 +-
zh/news/page/2/index.html | 8 +-
zh/news/tags/apache-shen-yu-wasm/index.html | 8 +-
zh/news/tags/apache-shen-yu/index.html | 8 +-
zh/news/tags/gsoc-2023/index.html | 8 +-
zh/news/tags/index.html | 8 +-
zh/news/tags/ospp-2023/index.html | 8 +-
zh/news/tags/wasm/index.html | 8 +-
zh/pdf/apache_shenyu_docs_en.pdf | Bin 4622 -> 4628 bytes
zh/pdf/apache_shenyu_docs_zh.pdf | Bin 6480 -> 6486 bytes
zh/search/index.html | 10 +-
zh/shenyuClientDotnet/consul/index.html | 10 +-
zh/shenyuClientDotnet/etcd/index.html | 10 +-
zh/shenyuClientDotnet/http/index.html | 10 +-
zh/shenyuClientDotnet/nacos/index.html | 10 +-
zh/shenyuClientDotnet/next/consul/index.html | 10 +-
zh/shenyuClientDotnet/next/etcd/index.html | 10 +-
zh/shenyuClientDotnet/next/http/index.html | 10 +-
zh/shenyuClientDotnet/next/nacos/index.html | 10 +-
zh/shenyuClientDotnet/next/zookeeper/index.html | 10 +-
zh/shenyuClientDotnet/zookeeper/index.html | 10 +-
zh/shenyuClientGolang/consul/index.html | 10 +-
zh/shenyuClientGolang/etcd/index.html | 10 +-
zh/shenyuClientGolang/http/index.html | 10 +-
zh/shenyuClientGolang/nacos/index.html | 10 +-
zh/shenyuClientGolang/next/consul/index.html | 10 +-
zh/shenyuClientGolang/next/etcd/index.html | 10 +-
zh/shenyuClientGolang/next/http/index.html | 10 +-
zh/shenyuClientGolang/next/nacos/index.html | 10 +-
zh/shenyuClientGolang/next/zookeeper/index.html | 10 +-
zh/shenyuClientGolang/zookeeper/index.html | 10 +-
zh/shenyuNginx/index/index.html | 10 +-
zh/team/index.html | 8 +-
zh/users/index.html | 8 +-
zh/versions/index.html | 8 +-
2520 files changed, 9609 insertions(+), 9610 deletions(-)
diff --git a/404.html b/404.html
index ed3e864e9f..ceb082e43a 100644
--- a/404.html
+++ b/404.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Page Not Found | Apache ShenYu</title><meta data-react-helmet="true" property="og:title" content="Page Not Found | Apache ShenYu"><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//404.html"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:docusauru [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/assets/js/052ca6ab.5d3c03fa.js b/assets/js/052ca6ab.5d3c03fa.js
deleted file mode 100644
index 01667f8338..0000000000
--- a/assets/js/052ca6ab.5d3c03fa.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[55120],{95788:(e,n,t)=>{t.d(n,{Iu:()=>u,yg:()=>c});var a=t(11504);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}ret [...]
\ No newline at end of file
diff --git a/assets/js/052ca6ab.e18dd455.js b/assets/js/052ca6ab.e18dd455.js
new file mode 100644
index 0000000000..1723a74c00
--- /dev/null
+++ b/assets/js/052ca6ab.e18dd455.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[55120],{95788:(e,n,t)=>{t.d(n,{Iu:()=>u,yg:()=>m});var a=t(11504);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}ret [...]
\ No newline at end of file
diff --git a/assets/js/0824112e.76a78464.js b/assets/js/0824112e.76a78464.js
deleted file mode 100644
index 0379029b39..0000000000
--- a/assets/js/0824112e.76a78464.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[99672],{95788:(e,t,a)=>{a.d(t,{Iu:()=>g,yg:()=>m});var r=a(11504);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/0824112e.c440c474.js b/assets/js/0824112e.c440c474.js
new file mode 100644
index 0000000000..1b6f78fac2
--- /dev/null
+++ b/assets/js/0824112e.c440c474.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[99672],{95788:(e,t,a)=>{a.d(t,{Iu:()=>g,yg:()=>m});var r=a(11504);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/08867c29.1cb89afb.js b/assets/js/08867c29.1cb89afb.js
new file mode 100644
index 0000000000..992573bf7e
--- /dev/null
+++ b/assets/js/08867c29.1cb89afb.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[15460],{95788:(e,t,n)=>{n.d(t,{Iu:()=>u,yg:()=>y});var r=n(11504);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/08867c29.575f9d27.js b/assets/js/08867c29.575f9d27.js
deleted file mode 100644
index 7826d38f47..0000000000
--- a/assets/js/08867c29.575f9d27.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[15460],{95788:(e,t,n)=>{n.d(t,{Iu:()=>u,yg:()=>y});var r=n(11504);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/0b6e15f8.9a233e2f.js b/assets/js/0b6e15f8.9a233e2f.js
deleted file mode 100644
index 06b8a8af96..0000000000
--- a/assets/js/0b6e15f8.9a233e2f.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[37668],{95788:(e,n,t)=>{t.d(n,{Iu:()=>g,yg:()=>h});var a=t(11504);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}ret [...]
\ No newline at end of file
diff --git a/assets/js/0b6e15f8.ecfd37b4.js b/assets/js/0b6e15f8.ecfd37b4.js
new file mode 100644
index 0000000000..e57563b12c
--- /dev/null
+++ b/assets/js/0b6e15f8.ecfd37b4.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[37668],{95788:(e,n,t)=>{t.d(n,{Iu:()=>g,yg:()=>h});var a=t(11504);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}ret [...]
\ No newline at end of file
diff --git a/assets/js/0f6f7a4b.e4697001.js b/assets/js/0f6f7a4b.e4697001.js
deleted file mode 100644
index ce0e6bb56d..0000000000
--- a/assets/js/0f6f7a4b.e4697001.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[3598],{95788:(e,t,n)=>{n.d(t,{Iu:()=>u,yg:()=>y});var r=n(11504);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}retu [...]
\ No newline at end of file
diff --git a/assets/js/0f6f7a4b.ffbf5baa.js b/assets/js/0f6f7a4b.ffbf5baa.js
new file mode 100644
index 0000000000..d749e87e6c
--- /dev/null
+++ b/assets/js/0f6f7a4b.ffbf5baa.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[3598],{95788:(e,t,n)=>{n.d(t,{Iu:()=>u,yg:()=>y});var r=n(11504);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}retu [...]
\ No newline at end of file
diff --git a/assets/js/116e6d8f.3e1f0aca.js b/assets/js/116e6d8f.3e1f0aca.js
new file mode 100644
index 0000000000..932af81de1
--- /dev/null
+++ b/assets/js/116e6d8f.3e1f0aca.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[15064],{95788:(e,t,n)=>{n.d(t,{Iu:()=>c,yg:()=>y});var o=n(11504);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}ret [...]
\ No newline at end of file
diff --git a/assets/js/116e6d8f.4ad60f80.js b/assets/js/116e6d8f.4ad60f80.js
deleted file mode 100644
index db2b8216fb..0000000000
--- a/assets/js/116e6d8f.4ad60f80.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[15064],{95788:(e,t,n)=>{n.d(t,{Iu:()=>c,yg:()=>y});var o=n(11504);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}ret [...]
\ No newline at end of file
diff --git a/assets/js/119a2ec9.2c81be7e.js b/assets/js/119a2ec9.2c81be7e.js
deleted file mode 100644
index 9fceaf6edd..0000000000
--- a/assets/js/119a2ec9.2c81be7e.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[58584],{95788:(e,t,r)=>{r.d(t,{Iu:()=>u,yg:()=>m});var n=r(11504);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}ret [...]
\ No newline at end of file
diff --git a/assets/js/119a2ec9.799ad161.js b/assets/js/119a2ec9.799ad161.js
new file mode 100644
index 0000000000..1dc7623a10
--- /dev/null
+++ b/assets/js/119a2ec9.799ad161.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[58584],{95788:(e,t,r)=>{r.d(t,{Iu:()=>u,yg:()=>m});var n=r(11504);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}ret [...]
\ No newline at end of file
diff --git a/assets/js/1659b332.4ae08e87.js b/assets/js/1659b332.4ae08e87.js
deleted file mode 100644
index b9c36f2135..0000000000
--- a/assets/js/1659b332.4ae08e87.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[35176],{95788:(e,t,n)=>{n.d(t,{Iu:()=>c,yg:()=>g});var r=n(11504);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/1659b332.d26906dd.js b/assets/js/1659b332.d26906dd.js
new file mode 100644
index 0000000000..a61beb2c37
--- /dev/null
+++ b/assets/js/1659b332.d26906dd.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[35176],{95788:(e,t,n)=>{n.d(t,{Iu:()=>c,yg:()=>g});var r=n(11504);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/1a04ab40.361837d1.js b/assets/js/1a04ab40.361837d1.js
deleted file mode 100644
index ad73098fa1..0000000000
--- a/assets/js/1a04ab40.361837d1.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[56548],{95788:(e,t,n)=>{n.d(t,{Iu:()=>u,yg:()=>h});var r=n(11504);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/1a04ab40.e8d5f7d3.js b/assets/js/1a04ab40.e8d5f7d3.js
new file mode 100644
index 0000000000..0451856ba3
--- /dev/null
+++ b/assets/js/1a04ab40.e8d5f7d3.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[56548],{95788:(e,t,n)=>{n.d(t,{Iu:()=>u,yg:()=>h});var r=n(11504);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/259d3cfe.7a491066.js b/assets/js/259d3cfe.7a491066.js
deleted file mode 100644
index 7feab1fe5b..0000000000
--- a/assets/js/259d3cfe.7a491066.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[15940],{95788:(e,a,t)=>{t.d(a,{Iu:()=>c,yg:()=>g});var n=t(11504);function o(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function r(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,n)}ret [...]
\ No newline at end of file
diff --git a/assets/js/259d3cfe.a6bec726.js b/assets/js/259d3cfe.a6bec726.js
new file mode 100644
index 0000000000..34f29dc809
--- /dev/null
+++ b/assets/js/259d3cfe.a6bec726.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[15940],{95788:(e,a,t)=>{t.d(a,{Iu:()=>c,yg:()=>g});var n=t(11504);function o(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function r(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,n)}ret [...]
\ No newline at end of file
diff --git a/assets/js/267487da.8e94fa86.js b/assets/js/267487da.8e94fa86.js
deleted file mode 100644
index d762e74223..0000000000
--- a/assets/js/267487da.8e94fa86.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[4640],{95788:(e,a,t)=>{t.d(a,{Iu:()=>p,yg:()=>y});var i=t(11504);function n(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function r(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);a&&(i=i.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,i)}retu [...]
\ No newline at end of file
diff --git a/assets/js/267487da.bbca7a99.js b/assets/js/267487da.bbca7a99.js
new file mode 100644
index 0000000000..dfd5ea859d
--- /dev/null
+++ b/assets/js/267487da.bbca7a99.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[4640],{95788:(e,a,t)=>{t.d(a,{Iu:()=>p,yg:()=>y});var i=t(11504);function n(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function r(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);a&&(i=i.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,i)}retu [...]
\ No newline at end of file
diff --git a/assets/js/2de77161.37fb498c.js b/assets/js/2de77161.37fb498c.js
new file mode 100644
index 0000000000..69bcc18081
--- /dev/null
+++ b/assets/js/2de77161.37fb498c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[50492],{95788:(e,n,t)=>{t.d(n,{Iu:()=>p,yg:()=>u});var a=t(11504);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}ret [...]
\ No newline at end of file
diff --git a/assets/js/2de77161.a151e455.js b/assets/js/2de77161.a151e455.js
deleted file mode 100644
index 38e8d303a1..0000000000
--- a/assets/js/2de77161.a151e455.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[50492],{95788:(e,n,t)=>{t.d(n,{Iu:()=>p,yg:()=>u});var a=t(11504);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}ret [...]
\ No newline at end of file
diff --git a/assets/js/2f9b393f.724f3b92.js b/assets/js/2f9b393f.724f3b92.js
deleted file mode 100644
index 74b1424982..0000000000
--- a/assets/js/2f9b393f.724f3b92.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[25776],{95788:(e,n,a)=>{a.d(n,{Iu:()=>d,yg:()=>h});var t=a(11504);function i(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function l(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,t)}ret [...]
\ No newline at end of file
diff --git a/assets/js/2f9b393f.b087af8f.js b/assets/js/2f9b393f.b087af8f.js
new file mode 100644
index 0000000000..cf4ecb6ddb
--- /dev/null
+++ b/assets/js/2f9b393f.b087af8f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[25776],{95788:(e,n,a)=>{a.d(n,{Iu:()=>d,yg:()=>h});var t=a(11504);function i(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function l(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,t)}ret [...]
\ No newline at end of file
diff --git a/assets/js/380526c3.5f571ebc.js b/assets/js/380526c3.5f571ebc.js
new file mode 100644
index 0000000000..abf36039be
--- /dev/null
+++ b/assets/js/380526c3.5f571ebc.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[60336],{95788:(e,n,t)=>{t.d(n,{Iu:()=>u,yg:()=>m});var r=t(11504);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function s(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/380526c3.f4987f4e.js b/assets/js/380526c3.f4987f4e.js
deleted file mode 100644
index 2543daf34a..0000000000
--- a/assets/js/380526c3.f4987f4e.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[60336],{95788:(e,n,t)=>{t.d(n,{Iu:()=>u,yg:()=>m});var r=t(11504);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function s(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/3b810fa0.b57b644a.js b/assets/js/3b810fa0.b57b644a.js
deleted file mode 100644
index 507d3ed8c9..0000000000
--- a/assets/js/3b810fa0.b57b644a.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[17764],{95788:(e,t,a)=>{a.d(t,{Iu:()=>c,yg:()=>g});var n=a(11504);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}ret [...]
\ No newline at end of file
diff --git a/assets/js/3b810fa0.ff6954c3.js b/assets/js/3b810fa0.ff6954c3.js
new file mode 100644
index 0000000000..85c763b32c
--- /dev/null
+++ b/assets/js/3b810fa0.ff6954c3.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[17764],{95788:(e,t,a)=>{a.d(t,{Iu:()=>c,yg:()=>g});var n=a(11504);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}ret [...]
\ No newline at end of file
diff --git a/assets/js/3be0678d.75c1a525.js b/assets/js/3be0678d.75c1a525.js
deleted file mode 100644
index 203cbad627..0000000000
--- a/assets/js/3be0678d.75c1a525.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[5672],{95788:(e,n,t)=>{t.d(n,{Iu:()=>g,yg:()=>y});var i=t(11504);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,i)}retu [...]
\ No newline at end of file
diff --git a/assets/js/3be0678d.7d2c2952.js b/assets/js/3be0678d.7d2c2952.js
new file mode 100644
index 0000000000..56e3dea156
--- /dev/null
+++ b/assets/js/3be0678d.7d2c2952.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[5672],{95788:(e,n,t)=>{t.d(n,{Iu:()=>g,yg:()=>y});var i=t(11504);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,i)}retu [...]
\ No newline at end of file
diff --git a/assets/js/3c1d5675.c6025dad.js b/assets/js/3c1d5675.c6025dad.js
new file mode 100644
index 0000000000..ad007e19e3
--- /dev/null
+++ b/assets/js/3c1d5675.c6025dad.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[31396],{95788:(e,n,a)=>{a.d(n,{Iu:()=>g,yg:()=>y});var t=a(11504);function r(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function l(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,t)}ret [...]
\ No newline at end of file
diff --git a/assets/js/3c1d5675.d1e270ca.js b/assets/js/3c1d5675.d1e270ca.js
deleted file mode 100644
index 2ee1f89589..0000000000
--- a/assets/js/3c1d5675.d1e270ca.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[31396],{95788:(e,n,a)=>{a.d(n,{Iu:()=>g,yg:()=>y});var t=a(11504);function r(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function l(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,t)}ret [...]
\ No newline at end of file
diff --git a/assets/js/3c32e005.3646e338.js b/assets/js/3c32e005.3646e338.js
new file mode 100644
index 0000000000..1bf14bfb62
--- /dev/null
+++ b/assets/js/3c32e005.3646e338.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[24324],{95788:(e,a,n)=>{n.d(a,{Iu:()=>d,yg:()=>y});var t=n(11504);function i(e,a,n){return a in e?Object.defineProperty(e,a,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[a]=n,e}function r(e,a){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);a&&(t=t.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),n.push.apply(n,t)}ret [...]
\ No newline at end of file
diff --git a/assets/js/3c32e005.b18879b8.js b/assets/js/3c32e005.b18879b8.js
deleted file mode 100644
index 8be9f25130..0000000000
--- a/assets/js/3c32e005.b18879b8.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[24324],{95788:(e,a,n)=>{n.d(a,{Iu:()=>d,yg:()=>y});var t=n(11504);function i(e,a,n){return a in e?Object.defineProperty(e,a,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[a]=n,e}function r(e,a){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);a&&(t=t.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),n.push.apply(n,t)}ret [...]
\ No newline at end of file
diff --git a/assets/js/3e30bf86.3f06ccd5.js b/assets/js/3e30bf86.3f06ccd5.js
deleted file mode 100644
index 75c8c578de..0000000000
--- a/assets/js/3e30bf86.3f06ccd5.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[77160,20980],{68156:(e,t,a)=>{a.r(t),a.d(t,{default:()=>l});var n=a(11504),o=a(96852);const i={container:"container_tWpt",content:"content_XVLC",categray:"categray_u3Ut",darkAnchor:"darkAnchor_Os7F",title:"title_rVKQ",card:"card_7uDe",cardImage:"cardImage_R6LG",postTitle:"postTitle_PNgZ",postAbs:"postAbs_3e9+",authorInfo:"authorInfo_e3mn",authorImg:"authorImg_Df79",authorName:"authorName_24yP",autho [...]
\ No newline at end of file
diff --git a/assets/js/3e30bf86.a24e374c.js b/assets/js/3e30bf86.a24e374c.js
new file mode 100644
index 0000000000..a585001f3f
--- /dev/null
+++ b/assets/js/3e30bf86.a24e374c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[77160,20980],{68156:(e,t,a)=>{a.r(t),a.d(t,{default:()=>l});var n=a(11504),o=a(96852);const i={container:"container_tWpt",content:"content_XVLC",categray:"categray_u3Ut",darkAnchor:"darkAnchor_Os7F",title:"title_rVKQ",card:"card_7uDe",cardImage:"cardImage_R6LG",postTitle:"postTitle_PNgZ",postAbs:"postAbs_3e9+",authorInfo:"authorInfo_e3mn",authorImg:"authorImg_Df79",authorName:"authorName_24yP",autho [...]
\ No newline at end of file
diff --git a/assets/js/3e51ef3b.18f219e7.js b/assets/js/3e51ef3b.18f219e7.js
new file mode 100644
index 0000000000..43b0616db8
--- /dev/null
+++ b/assets/js/3e51ef3b.18f219e7.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[13080],{95788:(e,t,n)=>{n.d(t,{Iu:()=>c,yg:()=>d});var r=n(11504);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/3e51ef3b.e7c3a9d5.js b/assets/js/3e51ef3b.e7c3a9d5.js
deleted file mode 100644
index 0d710ba71b..0000000000
--- a/assets/js/3e51ef3b.e7c3a9d5.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[13080],{95788:(e,t,n)=>{n.d(t,{Iu:()=>c,yg:()=>d});var r=n(11504);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/3ec2dd5b.692b3ec5.js b/assets/js/3ec2dd5b.692b3ec5.js
deleted file mode 100644
index e60a7fc390..0000000000
--- a/assets/js/3ec2dd5b.692b3ec5.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[84558],{95788:(e,t,l)=>{l.d(t,{Iu:()=>p,yg:()=>g});var r=l(11504);function n(e,t,l){return t in e?Object.defineProperty(e,t,{value:l,enumerable:!0,configurable:!0,writable:!0}):e[t]=l,e}function a(e,t){var l=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),l.push.apply(l,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/3ec2dd5b.8cb6dba2.js b/assets/js/3ec2dd5b.8cb6dba2.js
new file mode 100644
index 0000000000..3c9d65b174
--- /dev/null
+++ b/assets/js/3ec2dd5b.8cb6dba2.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[84558],{95788:(e,t,l)=>{l.d(t,{Iu:()=>p,yg:()=>g});var r=l(11504);function n(e,t,l){return t in e?Object.defineProperty(e,t,{value:l,enumerable:!0,configurable:!0,writable:!0}):e[t]=l,e}function a(e,t){var l=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),l.push.apply(l,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/40ddf5e5.238d2cf2.js b/assets/js/40ddf5e5.238d2cf2.js
deleted file mode 100644
index c3194e1e6f..0000000000
--- a/assets/js/40ddf5e5.238d2cf2.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[90424],{95788:(e,t,n)=>{n.d(t,{Iu:()=>d,yg:()=>m});var a=n(11504);function s(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}ret [...]
\ No newline at end of file
diff --git a/assets/js/40ddf5e5.a6b094da.js b/assets/js/40ddf5e5.a6b094da.js
new file mode 100644
index 0000000000..f31bbac14e
--- /dev/null
+++ b/assets/js/40ddf5e5.a6b094da.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[90424],{95788:(e,t,n)=>{n.d(t,{Iu:()=>d,yg:()=>m});var a=n(11504);function s(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}ret [...]
\ No newline at end of file
diff --git a/assets/js/43105b19.130403a1.js b/assets/js/43105b19.130403a1.js
new file mode 100644
index 0000000000..ab88700af2
--- /dev/null
+++ b/assets/js/43105b19.130403a1.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[66268],{95788:(e,n,a)=>{a.d(n,{Iu:()=>g,yg:()=>y});var t=a(11504);function r(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function s(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,t)}ret [...]
\ No newline at end of file
diff --git a/assets/js/43105b19.82d49a5e.js b/assets/js/43105b19.82d49a5e.js
deleted file mode 100644
index 8137d139a5..0000000000
--- a/assets/js/43105b19.82d49a5e.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[66268],{95788:(e,n,a)=>{a.d(n,{Iu:()=>g,yg:()=>y});var t=a(11504);function r(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function s(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,t)}ret [...]
\ No newline at end of file
diff --git a/assets/js/44e9e6f4.2f432c18.js b/assets/js/44e9e6f4.2f432c18.js
new file mode 100644
index 0000000000..7e48410ec0
--- /dev/null
+++ b/assets/js/44e9e6f4.2f432c18.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[99392],{95788:(e,t,n)=>{n.d(t,{Iu:()=>u,yg:()=>d});var o=n(11504);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}ret [...]
\ No newline at end of file
diff --git a/assets/js/44e9e6f4.569b4a06.js b/assets/js/44e9e6f4.569b4a06.js
deleted file mode 100644
index 3a664ea85f..0000000000
--- a/assets/js/44e9e6f4.569b4a06.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[99392],{95788:(e,t,n)=>{n.d(t,{Iu:()=>u,yg:()=>d});var o=n(11504);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}ret [...]
\ No newline at end of file
diff --git a/assets/js/4521f334.086103cb.js b/assets/js/4521f334.086103cb.js
deleted file mode 100644
index 906f4a494f..0000000000
--- a/assets/js/4521f334.086103cb.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[3752],{95788:(e,t,n)=>{n.d(t,{Iu:()=>c,yg:()=>m});var r=n(11504);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}retu [...]
\ No newline at end of file
diff --git a/assets/js/4521f334.d37e8c60.js b/assets/js/4521f334.d37e8c60.js
new file mode 100644
index 0000000000..548b833274
--- /dev/null
+++ b/assets/js/4521f334.d37e8c60.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[3752],{95788:(e,t,n)=>{n.d(t,{Iu:()=>c,yg:()=>m});var r=n(11504);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}retu [...]
\ No newline at end of file
diff --git a/assets/js/4fb2eb56.1e37d6ca.js b/assets/js/4fb2eb56.1e37d6ca.js
deleted file mode 100644
index 57af891277..0000000000
--- a/assets/js/4fb2eb56.1e37d6ca.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[66216],{95788:(e,n,a)=>{a.d(n,{Iu:()=>d,yg:()=>g});var t=a(11504);function s(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function i(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,t)}ret [...]
\ No newline at end of file
diff --git a/assets/js/4fb2eb56.353599e5.js b/assets/js/4fb2eb56.353599e5.js
new file mode 100644
index 0000000000..e9d7503c81
--- /dev/null
+++ b/assets/js/4fb2eb56.353599e5.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[66216],{95788:(e,n,t)=>{t.d(n,{Iu:()=>d,yg:()=>g});var a=t(11504);function s(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}ret [...]
\ No newline at end of file
diff --git a/assets/js/4fdb0457.66668ab1.js b/assets/js/4fdb0457.66668ab1.js
deleted file mode 100644
index c1bf482e03..0000000000
--- a/assets/js/4fdb0457.66668ab1.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[18896],{95788:(e,t,n)=>{n.d(t,{Iu:()=>c,yg:()=>u});var a=n(11504);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}ret [...]
\ No newline at end of file
diff --git a/assets/js/4fdb0457.975d2194.js b/assets/js/4fdb0457.975d2194.js
new file mode 100644
index 0000000000..c5482776b7
--- /dev/null
+++ b/assets/js/4fdb0457.975d2194.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[18896],{95788:(e,t,n)=>{n.d(t,{Iu:()=>c,yg:()=>u});var a=n(11504);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}ret [...]
\ No newline at end of file
diff --git a/assets/js/5410ef7f.52e86794.js b/assets/js/5410ef7f.52e86794.js
deleted file mode 100644
index e1057d927d..0000000000
--- a/assets/js/5410ef7f.52e86794.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[18776],{95788:(e,n,t)=>{t.d(n,{Iu:()=>c,yg:()=>d});var r=t(11504);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/5410ef7f.9f7332cd.js b/assets/js/5410ef7f.9f7332cd.js
new file mode 100644
index 0000000000..4d4b60a4cd
--- /dev/null
+++ b/assets/js/5410ef7f.9f7332cd.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[18776],{95788:(e,n,t)=>{t.d(n,{Iu:()=>c,yg:()=>d});var r=t(11504);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/54cfa241.06d723be.js b/assets/js/54cfa241.06d723be.js
new file mode 100644
index 0000000000..45ece94949
--- /dev/null
+++ b/assets/js/54cfa241.06d723be.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[4920],{95788:(e,n,a)=>{a.d(n,{Iu:()=>d,yg:()=>m});var t=a(11504);function i(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function r(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,t)}retu [...]
\ No newline at end of file
diff --git a/assets/js/54cfa241.cb2224c7.js b/assets/js/54cfa241.cb2224c7.js
deleted file mode 100644
index 1c32b75f7c..0000000000
--- a/assets/js/54cfa241.cb2224c7.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[4920],{95788:(e,n,a)=>{a.d(n,{Iu:()=>d,yg:()=>m});var t=a(11504);function i(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function r(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,t)}retu [...]
\ No newline at end of file
diff --git a/assets/js/55672386.02cf6b60.js b/assets/js/55672386.02cf6b60.js
deleted file mode 100644
index 75f186b9fc..0000000000
--- a/assets/js/55672386.02cf6b60.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[95656],{95788:(e,t,n)=>{n.d(t,{Iu:()=>c,yg:()=>g});var r=n(11504);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/55672386.13121425.js b/assets/js/55672386.13121425.js
new file mode 100644
index 0000000000..ab539451de
--- /dev/null
+++ b/assets/js/55672386.13121425.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[95656],{95788:(e,t,n)=>{n.d(t,{Iu:()=>c,yg:()=>g});var r=n(11504);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/55b3f2e2.578d7072.js b/assets/js/55b3f2e2.578d7072.js
new file mode 100644
index 0000000000..16a094c043
--- /dev/null
+++ b/assets/js/55b3f2e2.578d7072.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[94616],{95788:(e,t,n)=>{n.d(t,{Iu:()=>c,yg:()=>m});var r=n(11504);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/55b3f2e2.712e7762.js b/assets/js/55b3f2e2.712e7762.js
deleted file mode 100644
index 50c3c1bbbe..0000000000
--- a/assets/js/55b3f2e2.712e7762.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[94616],{95788:(e,t,n)=>{n.d(t,{Iu:()=>c,yg:()=>m});var r=n(11504);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/55f15e0e.77410e40.js b/assets/js/55f15e0e.77410e40.js
deleted file mode 100644
index 58889fcc4e..0000000000
--- a/assets/js/55f15e0e.77410e40.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[29988],{95788:(e,t,n)=>{n.d(t,{Iu:()=>g,yg:()=>d});var r=n(11504);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/55f15e0e.b9b47f8a.js b/assets/js/55f15e0e.b9b47f8a.js
new file mode 100644
index 0000000000..c938974e6e
--- /dev/null
+++ b/assets/js/55f15e0e.b9b47f8a.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[29988],{95788:(e,t,n)=>{n.d(t,{Iu:()=>g,yg:()=>d});var r=n(11504);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/5727a7c9.0d8468a6.js b/assets/js/5727a7c9.0d8468a6.js
deleted file mode 100644
index f4be897a67..0000000000
--- a/assets/js/5727a7c9.0d8468a6.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[88948],{95788:(e,n,t)=>{t.d(n,{Iu:()=>c,yg:()=>g});var r=t(11504);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/5727a7c9.7faf4132.js b/assets/js/5727a7c9.7faf4132.js
new file mode 100644
index 0000000000..54f91091e6
--- /dev/null
+++ b/assets/js/5727a7c9.7faf4132.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[88948],{95788:(e,n,t)=>{t.d(n,{Iu:()=>c,yg:()=>g});var r=t(11504);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/58ee83e2.742b5644.js b/assets/js/58ee83e2.742b5644.js
new file mode 100644
index 0000000000..69fbeb1f61
--- /dev/null
+++ b/assets/js/58ee83e2.742b5644.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[6806],{95788:(e,n,a)=>{a.d(n,{Iu:()=>p,yg:()=>h});var t=a(11504);function i(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function o(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,t)}retu [...]
\ No newline at end of file
diff --git a/assets/js/58ee83e2.85f61392.js b/assets/js/58ee83e2.85f61392.js
deleted file mode 100644
index ab3c78cdbf..0000000000
--- a/assets/js/58ee83e2.85f61392.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[6806],{95788:(e,n,a)=>{a.d(n,{Iu:()=>p,yg:()=>h});var t=a(11504);function i(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function o(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,t)}retu [...]
\ No newline at end of file
diff --git a/assets/js/59735065.58dfac59.js b/assets/js/59735065.58dfac59.js
deleted file mode 100644
index 6ab8012854..0000000000
--- a/assets/js/59735065.58dfac59.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[49428],{95788:(e,n,t)=>{t.d(n,{Iu:()=>p,yg:()=>u});var a=t(11504);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}ret [...]
\ No newline at end of file
diff --git a/assets/js/59735065.8db51641.js b/assets/js/59735065.8db51641.js
new file mode 100644
index 0000000000..d767e2f2ab
--- /dev/null
+++ b/assets/js/59735065.8db51641.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[49428],{95788:(e,n,t)=>{t.d(n,{Iu:()=>p,yg:()=>u});var a=t(11504);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}ret [...]
\ No newline at end of file
diff --git a/assets/js/60d30544.2b74d1c3.js b/assets/js/60d30544.2b74d1c3.js
deleted file mode 100644
index a58b772696..0000000000
--- a/assets/js/60d30544.2b74d1c3.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[70012],{95788:(e,t,n)=>{n.d(t,{Iu:()=>u,yg:()=>d});var r=n(11504);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/60d30544.fd7577f1.js b/assets/js/60d30544.fd7577f1.js
new file mode 100644
index 0000000000..f8ae735a35
--- /dev/null
+++ b/assets/js/60d30544.fd7577f1.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[70012],{95788:(e,t,n)=>{n.d(t,{Iu:()=>u,yg:()=>d});var r=n(11504);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/616119c6.165e1025.js b/assets/js/616119c6.165e1025.js
new file mode 100644
index 0000000000..5f3fa2fecc
--- /dev/null
+++ b/assets/js/616119c6.165e1025.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[77562],{95788:(e,n,a)=>{a.d(n,{Iu:()=>g,yg:()=>y});var t=a(11504);function r(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function l(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,t)}ret [...]
\ No newline at end of file
diff --git a/assets/js/616119c6.652a34b0.js b/assets/js/616119c6.652a34b0.js
deleted file mode 100644
index 311a069efa..0000000000
--- a/assets/js/616119c6.652a34b0.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[77562],{95788:(e,n,a)=>{a.d(n,{Iu:()=>g,yg:()=>y});var t=a(11504);function r(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function l(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,t)}ret [...]
\ No newline at end of file
diff --git a/assets/js/63b97ac0.4f550892.js b/assets/js/63b97ac0.4f550892.js
new file mode 100644
index 0000000000..c2431baff3
--- /dev/null
+++ b/assets/js/63b97ac0.4f550892.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[79556],{95788:(e,n,t)=>{t.d(n,{Iu:()=>d,yg:()=>h});var a=t(11504);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}ret [...]
\ No newline at end of file
diff --git a/assets/js/63b97ac0.bbea5fe0.js b/assets/js/63b97ac0.bbea5fe0.js
deleted file mode 100644
index 31140d6adb..0000000000
--- a/assets/js/63b97ac0.bbea5fe0.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[79556],{95788:(e,n,t)=>{t.d(n,{Iu:()=>d,yg:()=>h});var a=t(11504);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}ret [...]
\ No newline at end of file
diff --git a/assets/js/7540611d.72c3abb0.js b/assets/js/7540611d.72c3abb0.js
deleted file mode 100644
index cbd6c876e2..0000000000
--- a/assets/js/7540611d.72c3abb0.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[58655],{95788:(e,n,a)=>{a.d(n,{Iu:()=>g,yg:()=>y});var t=a(11504);function r(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function s(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,t)}ret [...]
\ No newline at end of file
diff --git a/assets/js/7540611d.b8f76799.js b/assets/js/7540611d.b8f76799.js
new file mode 100644
index 0000000000..0fd1bf6711
--- /dev/null
+++ b/assets/js/7540611d.b8f76799.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[58655],{95788:(e,n,a)=>{a.d(n,{Iu:()=>g,yg:()=>y});var t=a(11504);function r(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function s(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,t)}ret [...]
\ No newline at end of file
diff --git a/assets/js/7e9bc4f1.24eb57e3.js b/assets/js/7e9bc4f1.24eb57e3.js
deleted file mode 100644
index 0be58c4974..0000000000
--- a/assets/js/7e9bc4f1.24eb57e3.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[72156],{95788:(e,t,n)=>{n.d(t,{Iu:()=>h,yg:()=>m});var a=n(11504);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}ret [...]
\ No newline at end of file
diff --git a/assets/js/7e9bc4f1.3b80375b.js b/assets/js/7e9bc4f1.3b80375b.js
new file mode 100644
index 0000000000..c82e52cb2a
--- /dev/null
+++ b/assets/js/7e9bc4f1.3b80375b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[72156],{95788:(e,t,n)=>{n.d(t,{Iu:()=>h,yg:()=>m});var a=n(11504);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}ret [...]
\ No newline at end of file
diff --git a/assets/js/817af225.1438e71a.js b/assets/js/817af225.1438e71a.js
new file mode 100644
index 0000000000..ef40b2a108
--- /dev/null
+++ b/assets/js/817af225.1438e71a.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[28052],{95788:(e,n,t)=>{t.d(n,{Iu:()=>u,yg:()=>d});var a=t(11504);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}ret [...]
\ No newline at end of file
diff --git a/assets/js/817af225.6b500455.js b/assets/js/817af225.6b500455.js
deleted file mode 100644
index 3964d5e07d..0000000000
--- a/assets/js/817af225.6b500455.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[28052],{95788:(e,n,t)=>{t.d(n,{Iu:()=>u,yg:()=>d});var a=t(11504);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}ret [...]
\ No newline at end of file
diff --git a/assets/js/81ecd7d9.61a8618f.js b/assets/js/81ecd7d9.61a8618f.js
new file mode 100644
index 0000000000..64639eaff4
--- /dev/null
+++ b/assets/js/81ecd7d9.61a8618f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[50304],{95788:(e,t,n)=>{n.d(t,{Iu:()=>l,yg:()=>g});var r=n(11504);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/81ecd7d9.b3261f54.js b/assets/js/81ecd7d9.b3261f54.js
deleted file mode 100644
index 8f0a07aa0d..0000000000
--- a/assets/js/81ecd7d9.b3261f54.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[50304],{95788:(e,t,n)=>{n.d(t,{Iu:()=>l,yg:()=>g});var r=n(11504);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/82b01cda.46b70d1d.js b/assets/js/82b01cda.46b70d1d.js
deleted file mode 100644
index e16e7ee1bd..0000000000
--- a/assets/js/82b01cda.46b70d1d.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[60696],{95788:(e,n,a)=>{a.d(n,{Iu:()=>c,yg:()=>h});var t=a(11504);function i(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function r(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,t)}ret [...]
\ No newline at end of file
diff --git a/assets/js/82b01cda.8ec779bd.js b/assets/js/82b01cda.8ec779bd.js
new file mode 100644
index 0000000000..fca70e55ec
--- /dev/null
+++ b/assets/js/82b01cda.8ec779bd.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[60696],{95788:(e,n,a)=>{a.d(n,{Iu:()=>c,yg:()=>h});var t=a(11504);function i(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function o(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,t)}ret [...]
\ No newline at end of file
diff --git a/assets/js/831027cc.27597026.js b/assets/js/831027cc.27597026.js
new file mode 100644
index 0000000000..36a72b0704
--- /dev/null
+++ b/assets/js/831027cc.27597026.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[94599],{95788:(e,n,t)=>{t.d(n,{Iu:()=>u,yg:()=>d});var a=t(11504);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}ret [...]
\ No newline at end of file
diff --git a/assets/js/831027cc.9164f485.js b/assets/js/831027cc.9164f485.js
deleted file mode 100644
index ccf6829d7c..0000000000
--- a/assets/js/831027cc.9164f485.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[94599],{95788:(e,n,t)=>{t.d(n,{Iu:()=>u,yg:()=>d});var a=t(11504);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}ret [...]
\ No newline at end of file
diff --git a/assets/js/8452233b.0de85ebe.js b/assets/js/8452233b.0de85ebe.js
new file mode 100644
index 0000000000..81f8761287
--- /dev/null
+++ b/assets/js/8452233b.0de85ebe.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[18576],{95788:(e,n,t)=>{t.d(n,{Iu:()=>g,yg:()=>h});var a=t(11504);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}ret [...]
\ No newline at end of file
diff --git a/assets/js/8452233b.f9b678f2.js b/assets/js/8452233b.f9b678f2.js
deleted file mode 100644
index 3c2a1ed8ff..0000000000
--- a/assets/js/8452233b.f9b678f2.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[18576],{95788:(e,n,t)=>{t.d(n,{Iu:()=>g,yg:()=>h});var a=t(11504);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}ret [...]
\ No newline at end of file
diff --git a/assets/js/84fc8ece.1708e7ab.js b/assets/js/84fc8ece.1708e7ab.js
deleted file mode 100644
index 186f00d2b5..0000000000
--- a/assets/js/84fc8ece.1708e7ab.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[72256],{95788:(e,t,n)=>{n.d(t,{Iu:()=>h,yg:()=>d});var a=n(11504);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}ret [...]
\ No newline at end of file
diff --git a/assets/js/84fc8ece.dd910cb1.js b/assets/js/84fc8ece.dd910cb1.js
new file mode 100644
index 0000000000..1d0f6ff8af
--- /dev/null
+++ b/assets/js/84fc8ece.dd910cb1.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[72256],{95788:(e,t,n)=>{n.d(t,{Iu:()=>h,yg:()=>d});var a=n(11504);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}ret [...]
\ No newline at end of file
diff --git a/assets/js/87137adb.776f3129.js b/assets/js/87137adb.776f3129.js
deleted file mode 100644
index 07b4160384..0000000000
--- a/assets/js/87137adb.776f3129.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[16896],{95788:(e,n,t)=>{t.d(n,{Iu:()=>u,yg:()=>c});var a=t(11504);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}ret [...]
\ No newline at end of file
diff --git a/assets/js/87137adb.a0a98f1d.js b/assets/js/87137adb.a0a98f1d.js
new file mode 100644
index 0000000000..16cb0ac3dc
--- /dev/null
+++ b/assets/js/87137adb.a0a98f1d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[16896],{95788:(e,n,t)=>{t.d(n,{Iu:()=>u,yg:()=>m});var a=t(11504);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}ret [...]
\ No newline at end of file
diff --git a/assets/js/8877b104.880d152d.js b/assets/js/8877b104.880d152d.js
new file mode 100644
index 0000000000..cf68bbcf90
--- /dev/null
+++ b/assets/js/8877b104.880d152d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[50740],{95788:(e,n,a)=>{a.d(n,{Iu:()=>d,yg:()=>m});var t=a(11504);function i(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function r(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,t)}ret [...]
\ No newline at end of file
diff --git a/assets/js/8877b104.ce29e30a.js b/assets/js/8877b104.ce29e30a.js
deleted file mode 100644
index 5266f669e8..0000000000
--- a/assets/js/8877b104.ce29e30a.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[50740],{95788:(e,n,a)=>{a.d(n,{Iu:()=>d,yg:()=>m});var t=a(11504);function i(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function r(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,t)}ret [...]
\ No newline at end of file
diff --git a/assets/js/8afb6277.58c9122d.js b/assets/js/8afb6277.58c9122d.js
new file mode 100644
index 0000000000..bec0edefa5
--- /dev/null
+++ b/assets/js/8afb6277.58c9122d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[34752],{95788:(e,t,n)=>{n.d(t,{Iu:()=>c,yg:()=>d});var r=n(11504);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/8afb6277.82521001.js b/assets/js/8afb6277.82521001.js
deleted file mode 100644
index a662bf5945..0000000000
--- a/assets/js/8afb6277.82521001.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[34752],{95788:(e,t,n)=>{n.d(t,{Iu:()=>c,yg:()=>d});var r=n(11504);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/8fcb083f.4d4723ac.js b/assets/js/8fcb083f.4d4723ac.js
deleted file mode 100644
index edd75bcd6e..0000000000
--- a/assets/js/8fcb083f.4d4723ac.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[6608],{95788:(e,n,a)=>{a.d(n,{Iu:()=>d,yg:()=>h});var t=a(11504);function i(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function l(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,t)}retu [...]
\ No newline at end of file
diff --git a/assets/js/8fcb083f.5ef3166a.js b/assets/js/8fcb083f.5ef3166a.js
new file mode 100644
index 0000000000..992e5c5b28
--- /dev/null
+++ b/assets/js/8fcb083f.5ef3166a.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[6608],{95788:(e,n,a)=>{a.d(n,{Iu:()=>d,yg:()=>h});var t=a(11504);function i(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function l(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,t)}retu [...]
\ No newline at end of file
diff --git a/assets/js/947a0520.3c342a36.js b/assets/js/947a0520.3c342a36.js
deleted file mode 100644
index 5f7486e896..0000000000
--- a/assets/js/947a0520.3c342a36.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[6528],{95788:(e,t,a)=>{a.d(t,{Iu:()=>c,yg:()=>g});var n=a(11504);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/947a0520.f869fd31.js b/assets/js/947a0520.f869fd31.js
new file mode 100644
index 0000000000..fa7a18b4b9
--- /dev/null
+++ b/assets/js/947a0520.f869fd31.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[6528],{95788:(e,t,a)=>{a.d(t,{Iu:()=>c,yg:()=>g});var n=a(11504);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/94c195cb.02c77882.js b/assets/js/94c195cb.02c77882.js
deleted file mode 100644
index aa670b85ba..0000000000
--- a/assets/js/94c195cb.02c77882.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[12588],{95788:(e,t,n)=>{n.d(t,{Iu:()=>u,yg:()=>m});var r=n(11504);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/94c195cb.7fce5618.js b/assets/js/94c195cb.7fce5618.js
new file mode 100644
index 0000000000..be4c7db6e6
--- /dev/null
+++ b/assets/js/94c195cb.7fce5618.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[12588],{95788:(e,t,n)=>{n.d(t,{Iu:()=>u,yg:()=>m});var r=n(11504);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/95e485e3.73ec6c94.js b/assets/js/95e485e3.73ec6c94.js
deleted file mode 100644
index b9fd482f3d..0000000000
--- a/assets/js/95e485e3.73ec6c94.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[8560],{95788:(e,n,r)=>{r.d(n,{Iu:()=>c,yg:()=>y});var t=r(11504);function a(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function i(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}retu [...]
\ No newline at end of file
diff --git a/assets/js/95e485e3.fe46e905.js b/assets/js/95e485e3.fe46e905.js
new file mode 100644
index 0000000000..e3149cde7f
--- /dev/null
+++ b/assets/js/95e485e3.fe46e905.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[8560],{95788:(e,n,r)=>{r.d(n,{Iu:()=>c,yg:()=>y});var t=r(11504);function a(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function i(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}retu [...]
\ No newline at end of file
diff --git a/assets/js/97f557ce.2d0d6a5b.js b/assets/js/97f557ce.2d0d6a5b.js
new file mode 100644
index 0000000000..08d36edbc0
--- /dev/null
+++ b/assets/js/97f557ce.2d0d6a5b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[26312],{95788:(e,n,a)=>{a.d(n,{Iu:()=>p,yg:()=>h});var t=a(11504);function i(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function o(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,t)}ret [...]
\ No newline at end of file
diff --git a/assets/js/97f557ce.f7865a60.js b/assets/js/97f557ce.f7865a60.js
deleted file mode 100644
index a94893f926..0000000000
--- a/assets/js/97f557ce.f7865a60.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[26312],{95788:(e,n,a)=>{a.d(n,{Iu:()=>p,yg:()=>h});var t=a(11504);function i(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function o(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,t)}ret [...]
\ No newline at end of file
diff --git a/assets/js/9bd813a2.1618d77d.js b/assets/js/9bd813a2.1618d77d.js
new file mode 100644
index 0000000000..1c39d6ea0c
--- /dev/null
+++ b/assets/js/9bd813a2.1618d77d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[5056],{95788:(e,t,n)=>{n.d(t,{Iu:()=>d,yg:()=>u});var i=n(11504);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}retu [...]
\ No newline at end of file
diff --git a/assets/js/9bd813a2.32d48fd9.js b/assets/js/9bd813a2.32d48fd9.js
deleted file mode 100644
index 74736b1d8d..0000000000
--- a/assets/js/9bd813a2.32d48fd9.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[5056],{95788:(e,t,n)=>{n.d(t,{Iu:()=>d,yg:()=>u});var i=n(11504);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}retu [...]
\ No newline at end of file
diff --git a/assets/js/9e8596f8.00949832.js b/assets/js/9e8596f8.00949832.js
deleted file mode 100644
index 43dc5b1094..0000000000
--- a/assets/js/9e8596f8.00949832.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[36872],{95788:(e,n,t)=>{t.d(n,{Iu:()=>g,yg:()=>h});var a=t(11504);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}ret [...]
\ No newline at end of file
diff --git a/assets/js/9e8596f8.437c2659.js b/assets/js/9e8596f8.437c2659.js
new file mode 100644
index 0000000000..b4f93b333f
--- /dev/null
+++ b/assets/js/9e8596f8.437c2659.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[36872],{95788:(e,n,t)=>{t.d(n,{Iu:()=>g,yg:()=>h});var a=t(11504);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}ret [...]
\ No newline at end of file
diff --git a/assets/js/a0096cbe.31d91c97.js b/assets/js/a0096cbe.31d91c97.js
deleted file mode 100644
index 2d3a6965b5..0000000000
--- a/assets/js/a0096cbe.31d91c97.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[46403],{95788:(e,t,n)=>{n.d(t,{Iu:()=>p,yg:()=>d});var a=n(11504);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}ret [...]
\ No newline at end of file
diff --git a/assets/js/a0096cbe.6771056c.js b/assets/js/a0096cbe.6771056c.js
new file mode 100644
index 0000000000..6d438c8411
--- /dev/null
+++ b/assets/js/a0096cbe.6771056c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[46403],{95788:(e,t,n)=>{n.d(t,{Iu:()=>p,yg:()=>d});var a=n(11504);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}ret [...]
\ No newline at end of file
diff --git a/assets/js/a3552f5a.93a212a0.js b/assets/js/a3552f5a.93a212a0.js
deleted file mode 100644
index 81eaefab3e..0000000000
--- a/assets/js/a3552f5a.93a212a0.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[76625],{95788:(e,t,r)=>{r.d(t,{Iu:()=>s,yg:()=>d});var n=r(11504);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}ret [...]
\ No newline at end of file
diff --git a/assets/js/a3552f5a.c083adf2.js b/assets/js/a3552f5a.c083adf2.js
new file mode 100644
index 0000000000..6a51f7d53c
--- /dev/null
+++ b/assets/js/a3552f5a.c083adf2.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[76625],{95788:(e,t,r)=>{r.d(t,{Iu:()=>s,yg:()=>d});var n=r(11504);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}ret [...]
\ No newline at end of file
diff --git a/assets/js/a7023ddc.1b1273f4.js b/assets/js/a7023ddc.1b1273f4.js
deleted file mode 100644
index c8d5d7e7b1..0000000000
--- a/assets/js/a7023ddc.1b1273f4.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[39112],{61568:a=>{a.exports=JSON.parse('{"rate-limiter":{"allTagsPath":"/blog/tags","slug":"rate-limiter","name":"rate limiter","count":1,"permalink":"/blog/tags/rate-limiter"},"spi":{"allTagsPath":"/blog/tags","slug":"spi","name":"spi","count":5,"permalink":"/blog/tags/spi"},"apache-shen-yu":{"allTagsPath":"/blog/tags","slug":"apache-shen-yu","name":"apache shenyu","count":20,"permalink":"/blog/tag [...]
\ No newline at end of file
diff --git a/assets/js/a7023ddc.823c5cf3.js b/assets/js/a7023ddc.823c5cf3.js
new file mode 100644
index 0000000000..1d1a76ff2c
--- /dev/null
+++ b/assets/js/a7023ddc.823c5cf3.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[39112],{61568:a=>{a.exports=JSON.parse('{"spi":{"allTagsPath":"/blog/tags","slug":"spi","name":"spi","count":5,"permalink":"/blog/tags/spi"},"apache-shen-yu":{"allTagsPath":"/blog/tags","slug":"apache-shen-yu","name":"apache shenyu","count":20,"permalink":"/blog/tags/apache-shen-yu"},"load-balance":{"allTagsPath":"/blog/tags","slug":"load-balance","name":"load balance","count":1,"permalink":"/blog/t [...]
\ No newline at end of file
diff --git a/assets/js/aa12c159.9c4d5b35.js b/assets/js/aa12c159.9c4d5b35.js
deleted file mode 100644
index 25798ca34c..0000000000
--- a/assets/js/aa12c159.9c4d5b35.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[98440],{95788:(e,n,t)=>{t.d(n,{Iu:()=>p,yg:()=>h});var a=t(11504);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}ret [...]
\ No newline at end of file
diff --git a/assets/js/aa12c159.e9ce10e1.js b/assets/js/aa12c159.e9ce10e1.js
new file mode 100644
index 0000000000..d9b69d4786
--- /dev/null
+++ b/assets/js/aa12c159.e9ce10e1.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[98440],{95788:(e,n,t)=>{t.d(n,{Iu:()=>p,yg:()=>h});var a=t(11504);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}ret [...]
\ No newline at end of file
diff --git a/assets/js/ad622095.67d6e43c.js b/assets/js/ad622095.67d6e43c.js
deleted file mode 100644
index d26449b5bc..0000000000
--- a/assets/js/ad622095.67d6e43c.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[39344],{95788:(e,n,t)=>{t.d(n,{Iu:()=>d,yg:()=>h});var a=t(11504);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}ret [...]
\ No newline at end of file
diff --git a/assets/js/ad622095.b27779df.js b/assets/js/ad622095.b27779df.js
new file mode 100644
index 0000000000..d7ff990adf
--- /dev/null
+++ b/assets/js/ad622095.b27779df.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[39344],{95788:(e,n,t)=>{t.d(n,{Iu:()=>d,yg:()=>h});var a=t(11504);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}ret [...]
\ No newline at end of file
diff --git a/assets/js/b157d6b8.37c83ff8.js b/assets/js/b157d6b8.37c83ff8.js
new file mode 100644
index 0000000000..602a643f5a
--- /dev/null
+++ b/assets/js/b157d6b8.37c83ff8.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[53344],{95788:(e,t,r)=>{r.d(t,{Iu:()=>s,yg:()=>d});var n=r(11504);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}ret [...]
\ No newline at end of file
diff --git a/assets/js/b157d6b8.8c7c05cb.js b/assets/js/b157d6b8.8c7c05cb.js
deleted file mode 100644
index 051789dbf2..0000000000
--- a/assets/js/b157d6b8.8c7c05cb.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[53344],{95788:(e,t,r)=>{r.d(t,{Iu:()=>s,yg:()=>d});var n=r(11504);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}ret [...]
\ No newline at end of file
diff --git a/assets/js/b5d8c0a0.734de33f.js b/assets/js/b5d8c0a0.734de33f.js
new file mode 100644
index 0000000000..28c65b7ce3
--- /dev/null
+++ b/assets/js/b5d8c0a0.734de33f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[25208],{95788:(e,n,t)=>{t.d(n,{Iu:()=>c,yg:()=>g});var r=t(11504);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/b5d8c0a0.f2ffcb61.js b/assets/js/b5d8c0a0.f2ffcb61.js
deleted file mode 100644
index 7332024881..0000000000
--- a/assets/js/b5d8c0a0.f2ffcb61.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[25208],{95788:(e,n,t)=>{t.d(n,{Iu:()=>c,yg:()=>g});var r=t(11504);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/b82d0e2d.ca6bf3e0.js b/assets/js/b82d0e2d.ca6bf3e0.js
new file mode 100644
index 0000000000..c8d9bdb41e
--- /dev/null
+++ b/assets/js/b82d0e2d.ca6bf3e0.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[71360],{95788:(e,t,n)=>{n.d(t,{Iu:()=>c,yg:()=>g});var r=n(11504);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/b82d0e2d.f8fba15f.js b/assets/js/b82d0e2d.f8fba15f.js
deleted file mode 100644
index 1cb23d2fab..0000000000
--- a/assets/js/b82d0e2d.f8fba15f.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[71360],{95788:(e,t,n)=>{n.d(t,{Iu:()=>c,yg:()=>g});var r=n(11504);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/ba4a7a1c.6ab6ab59.js b/assets/js/ba4a7a1c.6ab6ab59.js
deleted file mode 100644
index 5fbd82d607..0000000000
--- a/assets/js/ba4a7a1c.6ab6ab59.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[90676],{95788:(e,n,t)=>{t.d(n,{Iu:()=>g,yg:()=>h});var a=t(11504);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}ret [...]
\ No newline at end of file
diff --git a/assets/js/ba4a7a1c.ce6b3a80.js b/assets/js/ba4a7a1c.ce6b3a80.js
new file mode 100644
index 0000000000..31c5727efb
--- /dev/null
+++ b/assets/js/ba4a7a1c.ce6b3a80.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[90676],{95788:(e,n,t)=>{t.d(n,{Iu:()=>g,yg:()=>h});var a=t(11504);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}ret [...]
\ No newline at end of file
diff --git a/assets/js/bb2b5f22.6a4e407f.js b/assets/js/bb2b5f22.6a4e407f.js
deleted file mode 100644
index 8506deb6a0..0000000000
--- a/assets/js/bb2b5f22.6a4e407f.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[68880],{95788:(e,t,a)=>{a.d(t,{Iu:()=>p,yg:()=>y});var n=a(11504);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}ret [...]
\ No newline at end of file
diff --git a/assets/js/bb2b5f22.fa000122.js b/assets/js/bb2b5f22.fa000122.js
new file mode 100644
index 0000000000..7052bd5c63
--- /dev/null
+++ b/assets/js/bb2b5f22.fa000122.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[68880],{95788:(e,t,a)=>{a.d(t,{Iu:()=>p,yg:()=>y});var n=a(11504);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}ret [...]
\ No newline at end of file
diff --git a/assets/js/bb7fdef6.d595a2be.js b/assets/js/bb7fdef6.d595a2be.js
new file mode 100644
index 0000000000..ff69beac6d
--- /dev/null
+++ b/assets/js/bb7fdef6.d595a2be.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[7800],{95788:(e,t,r)=>{r.d(t,{Iu:()=>c,yg:()=>h});var n=r(11504);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/bb7fdef6.ed3ae5b1.js b/assets/js/bb7fdef6.ed3ae5b1.js
deleted file mode 100644
index e05586e260..0000000000
--- a/assets/js/bb7fdef6.ed3ae5b1.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[7800],{95788:(e,t,r)=>{r.d(t,{Iu:()=>c,yg:()=>h});var n=r(11504);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/bce5470e.93edeb81.js b/assets/js/bce5470e.93edeb81.js
new file mode 100644
index 0000000000..e026daf79b
--- /dev/null
+++ b/assets/js/bce5470e.93edeb81.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[34061],{95788:(e,n,t)=>{t.d(n,{Iu:()=>g,yg:()=>y});var i=t(11504);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,i)}ret [...]
\ No newline at end of file
diff --git a/assets/js/bce5470e.ef528753.js b/assets/js/bce5470e.ef528753.js
deleted file mode 100644
index f11b9f1e63..0000000000
--- a/assets/js/bce5470e.ef528753.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[34061],{95788:(e,n,t)=>{t.d(n,{Iu:()=>g,yg:()=>y});var i=t(11504);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,i)}ret [...]
\ No newline at end of file
diff --git a/assets/js/bd113394.2ae3fedc.js b/assets/js/bd113394.2ae3fedc.js
new file mode 100644
index 0000000000..b5213f9b11
--- /dev/null
+++ b/assets/js/bd113394.2ae3fedc.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[43372],{95788:(e,t,a)=>{a.d(t,{Iu:()=>p,yg:()=>u});var n=a(11504);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}ret [...]
\ No newline at end of file
diff --git a/assets/js/bd113394.43a13e90.js b/assets/js/bd113394.43a13e90.js
deleted file mode 100644
index b400771020..0000000000
--- a/assets/js/bd113394.43a13e90.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[43372],{95788:(e,t,a)=>{a.d(t,{Iu:()=>p,yg:()=>u});var n=a(11504);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}ret [...]
\ No newline at end of file
diff --git a/assets/js/c4cf7888.75c7dd7e.js b/assets/js/c4cf7888.75c7dd7e.js
new file mode 100644
index 0000000000..f69f30e569
--- /dev/null
+++ b/assets/js/c4cf7888.75c7dd7e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[63988],{95788:(e,t,a)=>{a.d(t,{Iu:()=>p,yg:()=>d});var n=a(11504);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}ret [...]
\ No newline at end of file
diff --git a/assets/js/c4cf7888.b4011902.js b/assets/js/c4cf7888.b4011902.js
deleted file mode 100644
index 5425da7440..0000000000
--- a/assets/js/c4cf7888.b4011902.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[63988],{95788:(e,t,a)=>{a.d(t,{Iu:()=>p,yg:()=>d});var n=a(11504);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}ret [...]
\ No newline at end of file
diff --git a/assets/js/c59f34d8.7e73ab53.js b/assets/js/c59f34d8.7e73ab53.js
new file mode 100644
index 0000000000..b227d3f191
--- /dev/null
+++ b/assets/js/c59f34d8.7e73ab53.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[20300],{95788:(e,n,a)=>{a.d(n,{Iu:()=>c,yg:()=>h});var t=a(11504);function i(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function o(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,t)}ret [...]
\ No newline at end of file
diff --git a/assets/js/c59f34d8.b2738929.js b/assets/js/c59f34d8.b2738929.js
deleted file mode 100644
index 0c90fafc48..0000000000
--- a/assets/js/c59f34d8.b2738929.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[20300],{95788:(e,n,a)=>{a.d(n,{Iu:()=>c,yg:()=>h});var t=a(11504);function i(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function r(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,t)}ret [...]
\ No newline at end of file
diff --git a/assets/js/c5b72fd0.16b838a2.js b/assets/js/c5b72fd0.16b838a2.js
new file mode 100644
index 0000000000..3997095c89
--- /dev/null
+++ b/assets/js/c5b72fd0.16b838a2.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[40684],{95788:(e,n,t)=>{t.d(n,{Iu:()=>u,yg:()=>m});var r=t(11504);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function s(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/c5b72fd0.3d14bf67.js b/assets/js/c5b72fd0.3d14bf67.js
deleted file mode 100644
index 2a6a7c35cb..0000000000
--- a/assets/js/c5b72fd0.3d14bf67.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[40684],{95788:(e,n,t)=>{t.d(n,{Iu:()=>u,yg:()=>m});var r=t(11504);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function s(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/c67c2a3d.84b9461d.js b/assets/js/c67c2a3d.84b9461d.js
new file mode 100644
index 0000000000..865f84f558
--- /dev/null
+++ b/assets/js/c67c2a3d.84b9461d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[44344],{95788:(e,n,t)=>{t.d(n,{Iu:()=>g,yg:()=>w});var r=t(11504);function s(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/c67c2a3d.efbc139b.js b/assets/js/c67c2a3d.efbc139b.js
deleted file mode 100644
index b4c4bd470b..0000000000
--- a/assets/js/c67c2a3d.efbc139b.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[44344],{95788:(e,n,t)=>{t.d(n,{Iu:()=>g,yg:()=>w});var r=t(11504);function s(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/caa240e0.0fbd3900.js b/assets/js/caa240e0.0fbd3900.js
deleted file mode 100644
index 01d13f7fb2..0000000000
--- a/assets/js/caa240e0.0fbd3900.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[172],{95788:(e,t,n)=>{n.d(t,{Iu:()=>d,yg:()=>m});var a=n(11504);function s(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retur [...]
\ No newline at end of file
diff --git a/assets/js/caa240e0.8dab0a5e.js b/assets/js/caa240e0.8dab0a5e.js
new file mode 100644
index 0000000000..094dc51887
--- /dev/null
+++ b/assets/js/caa240e0.8dab0a5e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[172],{95788:(e,t,n)=>{n.d(t,{Iu:()=>d,yg:()=>m});var a=n(11504);function s(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retur [...]
\ No newline at end of file
diff --git a/assets/js/cd0e252c.0a5b7581.js b/assets/js/cd0e252c.0a5b7581.js
deleted file mode 100644
index bfb6b3d89b..0000000000
--- a/assets/js/cd0e252c.0a5b7581.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[12440],{95788:(e,t,n)=>{n.d(t,{Iu:()=>s,yg:()=>y});var r=n(11504);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/cd0e252c.3c3e254f.js b/assets/js/cd0e252c.3c3e254f.js
new file mode 100644
index 0000000000..3a6d45b13b
--- /dev/null
+++ b/assets/js/cd0e252c.3c3e254f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[12440],{95788:(e,t,n)=>{n.d(t,{Iu:()=>s,yg:()=>y});var r=n(11504);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/cdce4d88.5df4c5b3.js b/assets/js/cdce4d88.5df4c5b3.js
new file mode 100644
index 0000000000..943f98c203
--- /dev/null
+++ b/assets/js/cdce4d88.5df4c5b3.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[63208],{95788:(e,t,r)=>{r.d(t,{Iu:()=>p,yg:()=>g});var n=r(11504);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}ret [...]
\ No newline at end of file
diff --git a/assets/js/cdce4d88.f16a9f0f.js b/assets/js/cdce4d88.f16a9f0f.js
deleted file mode 100644
index 32b3782f85..0000000000
--- a/assets/js/cdce4d88.f16a9f0f.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[63208],{95788:(e,t,r)=>{r.d(t,{Iu:()=>p,yg:()=>g});var n=r(11504);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}ret [...]
\ No newline at end of file
diff --git a/assets/js/ce6a09fc.1b57ff1f.js b/assets/js/ce6a09fc.1b57ff1f.js
new file mode 100644
index 0000000000..a9d0e35fd9
--- /dev/null
+++ b/assets/js/ce6a09fc.1b57ff1f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[83424],{95788:(e,n,t)=>{t.d(n,{Iu:()=>c,yg:()=>g});var r=t(11504);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/ce6a09fc.5168cd57.js b/assets/js/ce6a09fc.5168cd57.js
deleted file mode 100644
index a5fb5a374f..0000000000
--- a/assets/js/ce6a09fc.5168cd57.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[83424],{95788:(e,n,t)=>{t.d(n,{Iu:()=>c,yg:()=>g});var r=t(11504);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/cee33d69.4017ff71.js b/assets/js/cee33d69.4017ff71.js
new file mode 100644
index 0000000000..2c90f15123
--- /dev/null
+++ b/assets/js/cee33d69.4017ff71.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[98372],{95788:(e,a,n)=>{n.d(a,{Iu:()=>d,yg:()=>y});var t=n(11504);function i(e,a,n){return a in e?Object.defineProperty(e,a,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[a]=n,e}function r(e,a){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);a&&(t=t.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),n.push.apply(n,t)}ret [...]
\ No newline at end of file
diff --git a/assets/js/cee33d69.a36bc7bb.js b/assets/js/cee33d69.a36bc7bb.js
deleted file mode 100644
index 4d4695e893..0000000000
--- a/assets/js/cee33d69.a36bc7bb.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[98372],{95788:(e,a,n)=>{n.d(a,{Iu:()=>d,yg:()=>y});var t=n(11504);function i(e,a,n){return a in e?Object.defineProperty(e,a,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[a]=n,e}function r(e,a){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);a&&(t=t.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),n.push.apply(n,t)}ret [...]
\ No newline at end of file
diff --git a/assets/js/d124637b.07677b61.js b/assets/js/d124637b.07677b61.js
deleted file mode 100644
index 93e12deecc..0000000000
--- a/assets/js/d124637b.07677b61.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[66776],{95788:(e,t,a)=>{a.d(t,{Iu:()=>p,yg:()=>y});var n=a(11504);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}ret [...]
\ No newline at end of file
diff --git a/assets/js/d124637b.d01999f1.js b/assets/js/d124637b.d01999f1.js
new file mode 100644
index 0000000000..b0b6319ea4
--- /dev/null
+++ b/assets/js/d124637b.d01999f1.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[66776],{95788:(e,t,a)=>{a.d(t,{Iu:()=>p,yg:()=>y});var n=a(11504);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}ret [...]
\ No newline at end of file
diff --git a/assets/js/d34575f9.8441b3f9.js b/assets/js/d34575f9.8441b3f9.js
new file mode 100644
index 0000000000..5d974891e6
--- /dev/null
+++ b/assets/js/d34575f9.8441b3f9.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[35856],{95788:(e,t,r)=>{r.d(t,{Iu:()=>s,yg:()=>y});var n=r(11504);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}ret [...]
\ No newline at end of file
diff --git a/assets/js/d34575f9.e0dbef4e.js b/assets/js/d34575f9.e0dbef4e.js
deleted file mode 100644
index bd2d731792..0000000000
--- a/assets/js/d34575f9.e0dbef4e.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[35856],{95788:(e,t,r)=>{r.d(t,{Iu:()=>s,yg:()=>y});var n=r(11504);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}ret [...]
\ No newline at end of file
diff --git a/assets/js/d4ae858d.243414e6.js b/assets/js/d4ae858d.243414e6.js
new file mode 100644
index 0000000000..ae6fd2336f
--- /dev/null
+++ b/assets/js/d4ae858d.243414e6.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[65072],{95788:(e,t,n)=>{n.d(t,{Iu:()=>u,yg:()=>m});var r=n(11504);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/d4ae858d.fb092fd0.js b/assets/js/d4ae858d.fb092fd0.js
deleted file mode 100644
index bfe18a23d1..0000000000
--- a/assets/js/d4ae858d.fb092fd0.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[65072],{95788:(e,t,n)=>{n.d(t,{Iu:()=>u,yg:()=>m});var r=n(11504);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/d9d26c48.4fe7ef1f.js b/assets/js/d9d26c48.4fe7ef1f.js
deleted file mode 100644
index 4155dead14..0000000000
--- a/assets/js/d9d26c48.4fe7ef1f.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[22980],{95788:(e,t,n)=>{n.d(t,{Iu:()=>c,yg:()=>m});var r=n(11504);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/d9d26c48.998e7342.js b/assets/js/d9d26c48.998e7342.js
new file mode 100644
index 0000000000..90c3e3bf4c
--- /dev/null
+++ b/assets/js/d9d26c48.998e7342.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[22980],{95788:(e,t,n)=>{n.d(t,{Iu:()=>c,yg:()=>m});var r=n(11504);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/defe2309.870f044c.js b/assets/js/defe2309.870f044c.js
new file mode 100644
index 0000000000..cbd13d55e1
--- /dev/null
+++ b/assets/js/defe2309.870f044c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[74192],{95788:(e,n,a)=>{a.d(n,{Iu:()=>g,yg:()=>h});var t=a(11504);function i(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function l(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,t)}ret [...]
\ No newline at end of file
diff --git a/assets/js/defe2309.a624f17b.js b/assets/js/defe2309.a624f17b.js
deleted file mode 100644
index cb5112ce62..0000000000
--- a/assets/js/defe2309.a624f17b.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[74192],{95788:(e,n,a)=>{a.d(n,{Iu:()=>g,yg:()=>h});var t=a(11504);function i(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function l(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,t)}ret [...]
\ No newline at end of file
diff --git a/assets/js/e0f5783e.a7a455d3.js b/assets/js/e0f5783e.a7a455d3.js
new file mode 100644
index 0000000000..88235bb1bd
--- /dev/null
+++ b/assets/js/e0f5783e.a7a455d3.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[79916],{95788:(e,n,a)=>{a.d(n,{Iu:()=>g,yg:()=>h});var t=a(11504);function i(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function l(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,t)}ret [...]
\ No newline at end of file
diff --git a/assets/js/e0f5783e.e8a5b2af.js b/assets/js/e0f5783e.e8a5b2af.js
deleted file mode 100644
index 5d3281e822..0000000000
--- a/assets/js/e0f5783e.e8a5b2af.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[79916],{95788:(e,n,a)=>{a.d(n,{Iu:()=>g,yg:()=>h});var t=a(11504);function i(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function l(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,t)}ret [...]
\ No newline at end of file
diff --git a/assets/js/e14e2680.985d5361.js b/assets/js/e14e2680.985d5361.js
new file mode 100644
index 0000000000..9d70f77417
--- /dev/null
+++ b/assets/js/e14e2680.985d5361.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[57900],{95788:(e,t,n)=>{n.d(t,{Iu:()=>h,yg:()=>d});var a=n(11504);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}ret [...]
\ No newline at end of file
diff --git a/assets/js/e14e2680.d8bd0eec.js b/assets/js/e14e2680.d8bd0eec.js
deleted file mode 100644
index 1aba0f6a6c..0000000000
--- a/assets/js/e14e2680.d8bd0eec.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[57900],{95788:(e,t,n)=>{n.d(t,{Iu:()=>h,yg:()=>d});var a=n(11504);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}ret [...]
\ No newline at end of file
diff --git a/assets/js/e1b162fa.80dfc6b9.js b/assets/js/e1b162fa.80dfc6b9.js
deleted file mode 100644
index dcdb99e8c9..0000000000
--- a/assets/js/e1b162fa.80dfc6b9.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[13420],{95788:(e,t,r)=>{r.d(t,{Iu:()=>u,yg:()=>y});var n=r(11504);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}ret [...]
\ No newline at end of file
diff --git a/assets/js/e1b162fa.8405d6d3.js b/assets/js/e1b162fa.8405d6d3.js
new file mode 100644
index 0000000000..a69ec5bb2e
--- /dev/null
+++ b/assets/js/e1b162fa.8405d6d3.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[13420],{95788:(e,t,r)=>{r.d(t,{Iu:()=>u,yg:()=>y});var n=r(11504);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}ret [...]
\ No newline at end of file
diff --git a/assets/js/e55ca4fc.0b9ef92d.js b/assets/js/e55ca4fc.0b9ef92d.js
new file mode 100644
index 0000000000..97e1d704b7
--- /dev/null
+++ b/assets/js/e55ca4fc.0b9ef92d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[57664],{95788:(e,t,n)=>{n.d(t,{Iu:()=>d,yg:()=>u});var i=n(11504);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}ret [...]
\ No newline at end of file
diff --git a/assets/js/e55ca4fc.b4289fe7.js b/assets/js/e55ca4fc.b4289fe7.js
deleted file mode 100644
index 32213b0863..0000000000
--- a/assets/js/e55ca4fc.b4289fe7.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[57664],{95788:(e,t,n)=>{n.d(t,{Iu:()=>d,yg:()=>u});var i=n(11504);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}ret [...]
\ No newline at end of file
diff --git a/assets/js/e6da6e1b.29633dea.js b/assets/js/e6da6e1b.29633dea.js
deleted file mode 100644
index 7a8343be92..0000000000
--- a/assets/js/e6da6e1b.29633dea.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[30410],{95788:(e,n,t)=>{t.d(n,{Iu:()=>g,yg:()=>y});var a=t(11504);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function l(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}ret [...]
\ No newline at end of file
diff --git a/assets/js/e6da6e1b.8f59d57c.js b/assets/js/e6da6e1b.8f59d57c.js
new file mode 100644
index 0000000000..db18003fe8
--- /dev/null
+++ b/assets/js/e6da6e1b.8f59d57c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[30410],{95788:(e,n,t)=>{t.d(n,{Iu:()=>g,yg:()=>y});var a=t(11504);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function l(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}ret [...]
\ No newline at end of file
diff --git a/assets/js/e800dce1.7e360074.js b/assets/js/e800dce1.7e360074.js
deleted file mode 100644
index 35b8f80cce..0000000000
--- a/assets/js/e800dce1.7e360074.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[33232],{95788:(e,n,a)=>{a.d(n,{Iu:()=>d,yg:()=>g});var t=a(11504);function s(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function i(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,t)}ret [...]
\ No newline at end of file
diff --git a/assets/js/e800dce1.af9f08d6.js b/assets/js/e800dce1.af9f08d6.js
new file mode 100644
index 0000000000..30a1c548fb
--- /dev/null
+++ b/assets/js/e800dce1.af9f08d6.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[33232],{95788:(e,n,t)=>{t.d(n,{Iu:()=>d,yg:()=>g});var a=t(11504);function s(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}ret [...]
\ No newline at end of file
diff --git a/assets/js/ea353db9.2c656743.js b/assets/js/ea353db9.2c656743.js
deleted file mode 100644
index ec28f1c0a6..0000000000
--- a/assets/js/ea353db9.2c656743.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[8816],{95788:(e,n,t)=>{t.d(n,{Iu:()=>p,yg:()=>h});var a=t(11504);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/ea353db9.9e4fee73.js b/assets/js/ea353db9.9e4fee73.js
new file mode 100644
index 0000000000..cfeb493608
--- /dev/null
+++ b/assets/js/ea353db9.9e4fee73.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[8816],{95788:(e,n,t)=>{t.d(n,{Iu:()=>p,yg:()=>h});var a=t(11504);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/eade0d33.6ba18654.js b/assets/js/eade0d33.6ba18654.js
deleted file mode 100644
index db85636aa6..0000000000
--- a/assets/js/eade0d33.6ba18654.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[23324],{95788:(e,t,n)=>{n.d(t,{Iu:()=>u,yg:()=>d});var r=n(11504);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/eade0d33.9e4785c3.js b/assets/js/eade0d33.9e4785c3.js
new file mode 100644
index 0000000000..ad730eb8c4
--- /dev/null
+++ b/assets/js/eade0d33.9e4785c3.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[23324],{95788:(e,t,n)=>{n.d(t,{Iu:()=>u,yg:()=>d});var r=n(11504);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}ret [...]
\ No newline at end of file
diff --git a/assets/js/efd0111a.d0f40179.js b/assets/js/efd0111a.d0f40179.js
new file mode 100644
index 0000000000..19924e21be
--- /dev/null
+++ b/assets/js/efd0111a.d0f40179.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[36885],{95788:(e,n,a)=>{a.d(n,{Iu:()=>g,yg:()=>y});var t=a(11504);function l(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function r(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,t)}ret [...]
\ No newline at end of file
diff --git a/assets/js/efd0111a.fca3f6ab.js b/assets/js/efd0111a.fca3f6ab.js
deleted file mode 100644
index f022a3369c..0000000000
--- a/assets/js/efd0111a.fca3f6ab.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[36885],{95788:(e,n,a)=>{a.d(n,{Iu:()=>g,yg:()=>y});var t=a(11504);function l(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function r(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,t)}ret [...]
\ No newline at end of file
diff --git a/assets/js/f292e823.134d7958.js b/assets/js/f292e823.134d7958.js
deleted file mode 100644
index 26ac1c7ad9..0000000000
--- a/assets/js/f292e823.134d7958.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[58240],{95788:(e,t,a)=>{a.d(t,{Iu:()=>p,yg:()=>m});var n=a(11504);function i(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}ret [...]
\ No newline at end of file
diff --git a/assets/js/f292e823.f1f5cbbf.js b/assets/js/f292e823.f1f5cbbf.js
new file mode 100644
index 0000000000..1b1b56a3bc
--- /dev/null
+++ b/assets/js/f292e823.f1f5cbbf.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[58240],{95788:(e,t,a)=>{a.d(t,{Iu:()=>p,yg:()=>m});var n=a(11504);function i(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}ret [...]
\ No newline at end of file
diff --git a/assets/js/f2ce4146.11a1ce74.js b/assets/js/f2ce4146.11a1ce74.js
deleted file mode 100644
index 7537f4d2cc..0000000000
--- a/assets/js/f2ce4146.11a1ce74.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[9848],{95788:(e,n,t)=>{t.d(n,{Iu:()=>c,yg:()=>g});var r=t(11504);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}retu [...]
\ No newline at end of file
diff --git a/assets/js/f2ce4146.437df4f5.js b/assets/js/f2ce4146.437df4f5.js
new file mode 100644
index 0000000000..aabe4f2ab8
--- /dev/null
+++ b/assets/js/f2ce4146.437df4f5.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[9848],{95788:(e,n,t)=>{t.d(n,{Iu:()=>c,yg:()=>g});var r=t(11504);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}retu [...]
\ No newline at end of file
diff --git a/assets/js/main.38e23c42.js b/assets/js/main.38e23c42.js
deleted file mode 100644
index 2c794bf6bb..0000000000
--- a/assets/js/main.38e23c42.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/*! For license information please see main.38e23c42.js.LICENSE.txt */
-(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[61590],{60408:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});const o={title:"Apache ShenYu",tagline:"Apache ShenYu - High-performance, multi-protocol, extensible, responsive API Gateway",url:"https://shenyu.apache.org/",baseUrl:"/",onBrokenLinks:"log",onBrokenMarkdownLinks:"warn",favicon:"img/favicon.svg",organizationName:"apache",projectName:"shenyu",i18n:{defaultLocale:"en",locales:["en","zh"],localeConf [...]
\ No newline at end of file
diff --git a/assets/js/main.f80cece7.js b/assets/js/main.f80cece7.js
new file mode 100644
index 0000000000..f258101a0c
--- /dev/null
+++ b/assets/js/main.f80cece7.js
@@ -0,0 +1,2 @@
+/*! For license information please see main.f80cece7.js.LICENSE.txt */
+(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[61590],{60408:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});const o={title:"Apache ShenYu",tagline:"Apache ShenYu - High-performance, multi-protocol, extensible, responsive API Gateway",url:"https://shenyu.apache.org/",baseUrl:"/",onBrokenLinks:"log",onBrokenMarkdownLinks:"warn",favicon:"img/favicon.svg",organizationName:"apache",projectName:"shenyu",i18n:{defaultLocale:"en",locales:["en","zh"],localeConf [...]
\ No newline at end of file
diff --git a/assets/js/main.38e23c42.js.LICENSE.txt b/assets/js/main.f80cece7.js.LICENSE.txt
similarity index 100%
rename from assets/js/main.38e23c42.js.LICENSE.txt
rename to assets/js/main.f80cece7.js.LICENSE.txt
diff --git a/assets/js/runtime~main.3f429ee8.js b/assets/js/runtime~main.3f429ee8.js
new file mode 100644
index 0000000000..241e55ad8d
--- /dev/null
+++ b/assets/js/runtime~main.3f429ee8.js
@@ -0,0 +1 @@
+(()=>{"use strict";var e,a,f,b,c,d={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var f=t[e]={exports:{}};return d[e].call(f.exports,f,f.exports,r),f.exports}r.m=d,e=[],r.O=(a,f,b,c)=>{if(!f){var d=1/0;for(i=0;i<e.length;i++){f=e[i][0],b=e[i][1],c=e[i][2];for(var t=!0,o=0;o<f.length;o++)(!1&c||d>=c)&&Object.keys(r.O).every((e=>r.O[e](f[o])))?f.splice(o--,1):(t=!1,c<d&&(d=c));if(t){e.splice(i--,1);var n=b();void 0!==n&&(a=n)}}return a}c=c||0;for(var i=e.length;i>0&&e[i-1] [...]
\ No newline at end of file
diff --git a/assets/js/runtime~main.80cd9f2f.js b/assets/js/runtime~main.80cd9f2f.js
deleted file mode 100644
index 8dc201ee38..0000000000
--- a/assets/js/runtime~main.80cd9f2f.js
+++ /dev/null
@@ -1 +0,0 @@
-(()=>{"use strict";var e,a,b,f,d,c={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var b=t[e]={exports:{}};return c[e].call(b.exports,b,b.exports,r),b.exports}r.m=c,e=[],r.O=(a,b,f,d)=>{if(!b){var c=1/0;for(i=0;i<e.length;i++){b=e[i][0],f=e[i][1],d=e[i][2];for(var t=!0,o=0;o<b.length;o++)(!1&d||c>=d)&&Object.keys(r.O).every((e=>r.O[e](b[o])))?b.splice(o--,1):(t=!1,d<c&&(c=d));if(t){e.splice(i--,1);var n=f();void 0!==n&&(a=n)}}return a}d=d||0;for(var i=e.length;i>0&&e[i-1] [...]
\ No newline at end of file
diff --git a/blog/DataSync-SourceCode-Analysis-Etcd-Data-Sync/index.html b/blog/DataSync-SourceCode-Analysis-Etcd-Data-Sync/index.html
index a3a9517ffe..cd5903c4b9 100644
--- a/blog/DataSync-SourceCode-Analysis-Etcd-Data-Sync/index.html
+++ b/blog/DataSync-SourceCode-Analysis-Etcd-Data-Sync/index.html
@@ -9,12 +9,12 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Etcd Data Synchronization Source Code Analysis | Apache ShenYu</title><meta data-react-helmet="true" property="og:title" content="Etcd Data Synchronization Source Code Analysis | Apache ShenYu"><meta data-react-helmet="true" name="description" content="Apache ShenYu is an asynchronous, high-performance, cross-language, responsive API gateway."><meta [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
+<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> } else {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // update data, delete and then insert</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> selectorCount = selectorMapper.updateSelective(selectorDO);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // update upstream</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> updateDivideUpstream(selectorDO);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return selectorCount;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" styl [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //......</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_W [...]
@@ -40,8 +40,8 @@
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private void watcherPlugin(final String pluginName) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> String pluginPath = DefaultPathConstants.buildPluginPath(pluginName);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> cachePluginData(etcdClient.get(pluginPath));</span></span><span class="token-line" style= [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private void cachePluginData(final String dataString) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> final PluginData pluginData = GsonUtils.getInstance().fromJson(dataString, PluginData.class);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> Optional.ofNullable(pluginData)</span></span><span class="token [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private void subscribePluginDataChanges(final String pluginPath, final String pluginName) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> etcdClient.watchDataChange(pluginPath, (updatePath, updateValue) -> {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> final String dataPath = buildRealPath(pluginPath, upda [...]
-</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>The above source code is given comments, I believe you can understand. The main logic for subscribing to plug-in data is as follows:</p><blockquote><ol><li>Create the current plugin path</li><li>Read the current node data on etcd and deserialize it</li><li>The plugin data is cached in the gateway memory</li><li>Subscribe to the plug-in node</l [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>The above source code is given comments, I believe you can understand. The main logic for subscribing to plug-in data is as follows:</p><blockquote><ol><li>Create the current plugin path</li><li>Read the current node data on etcd and deserialize it</li><li>The plugin data is cached in the gateway memory</li><li>Subscribe to the plug-in node</l [...]
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/DataSync-SourceCode-Analysis-Http-Data-Sync/index.html b/blog/DataSync-SourceCode-Analysis-Http-Data-Sync/index.html
index 34f84a9980..e20effcd58 100644
--- a/blog/DataSync-SourceCode-Analysis-Http-Data-Sync/index.html
+++ b/blog/DataSync-SourceCode-Analysis-Http-Data-Sync/index.html
@@ -9,12 +9,12 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Http Long Polling Data Synchronization Source Code Analysis | Apache ShenYu</title><meta data-react-helmet="true" property="og:title" content="Http Long Polling Data Synchronization Source Code Analysis | Apache ShenYu"><meta data-react-helmet="true" name="description" content="Apache ShenYu is an asynchronous, high-performance, cross-language, resp [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
+<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">/**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Http sync data configuration for spring boot.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain">@Configuration</span></span><span class="token-line" style="color:#393A34"><span class="to [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private static final Logger LOGGER = LoggerFactory.getLogger(HttpSyncDataConfiguration.class);</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Rest template.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param httpConfig the http config</span></span><span class="token-line" style="color:#393A34"><span cla [...]
@@ -86,8 +86,8 @@ If the gateway layer is not processed in time, or the administrator updates the
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">/**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Event forwarders, which forward the changed events to each ConfigEventListener.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Data change event distributor: synchronize the change data to ShenYu gateway when there is a data change in admin side</span></span><span class [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // other logic omitted</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Call this method when there are data changes</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param event</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34" [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private void doRun(final Collection<LongPollingClient> clients) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Notify all clients that a data change has occurred</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> for (Iterator<LongPollingClient> iter = clients.iterator(); iter.hasN [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private void doRun(final Collection<LongPollingClient> clients) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Notify all clients that a data change has occurred</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> for (Iterator<LongPollingClient> iter = clients.iterator(); iter.hasN [...]
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/DataSync-SourceCode-Analysis-Nacos-Data-Sync/index.html b/blog/DataSync-SourceCode-Analysis-Nacos-Data-Sync/index.html
index b167725903..bc486cbe49 100644
--- a/blog/DataSync-SourceCode-Analysis-Nacos-Data-Sync/index.html
+++ b/blog/DataSync-SourceCode-Analysis-Nacos-Data-Sync/index.html
@@ -9,12 +9,12 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Nacos Data Synchronization Source Code Analysis | Apache ShenYu</title><meta data-react-helmet="true" property="og:title" content="Nacos Data Synchronization Source Code Analysis | Apache ShenYu"><meta data-react-helmet="true" name="description" content="Apache ShenYu is an asynchronous, high-performance, cross-language, responsive API gateway."><me [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
+<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> } else {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // update data, delete and then insert</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> selectorCount = selectorMapper.updateSelective(selectorDO);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // update upstream</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> updateDivideUpstream(selectorDO);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return selectorCount;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" styl [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //......</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_W [...]
@@ -67,8 +67,8 @@
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private final SyncDataService syncDataService;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Instantiates a new Nacos data init.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param configService the nacos config service</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param syncDataService the sync data [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public void run(final String... args) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> String pluginDataId = NacosPathConstants.PLUGIN_DATA_ID;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> String authDataI [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private boolean dataIdNotExist(final String pluginDataId) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> try {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> String group = NacosPathConstants.GROUP;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> long [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private boolean dataIdNotExist(final String pluginDataId) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> try {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> String group = NacosPathConstants.GROUP;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> long [...]
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/DataSync-SourceCode-Analysis-WebSocket-Data-Sync/index.html b/blog/DataSync-SourceCode-Analysis-WebSocket-Data-Sync/index.html
index aec2af35e3..96e7e30cb4 100644
--- a/blog/DataSync-SourceCode-Analysis-WebSocket-Data-Sync/index.html
+++ b/blog/DataSync-SourceCode-Analysis-WebSocket-Data-Sync/index.html
@@ -9,12 +9,12 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">WebSocket Data Synchronization Source Code Analysis | Apache ShenYu</title><meta data-react-helmet="true" property="og:title" content="WebSocket Data Synchronization Source Code Analysis | Apache ShenYu"><meta data-react-helmet="true" name="description" content="In ShenYu gateway, data synchronization refers to how to synchronize the updated data to [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
+<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> } else {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // update data, delete and then insert</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> selectorCount = selectorMapper.updateSelective(selectorDO);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // update upstream</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> updateDivideUpstream(selectorDO);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return selectorCount;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" styl [...]
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>In the <code>Service</code> class to persist data, i.e. to the database, this should be familiar, not expand. The update upstream operation is analyzed in the corresponding section below, focusing on the publish event operation, which performs data synchronization.</p><p>The logic of the <code>publishEvent()</code> method is to find the plugi [...]
@@ -55,8 +55,8 @@
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Execute after the connection is successfully established</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public void onOpen(final ServerHandshake serverHandshake) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Execute after receiving the message</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public void onMessage(final String result) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // handle data</span></span><span [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // handle data</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> websocketDataHandler.executor(groupEnum, json, eventType);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span><span class="token-line" style="colo [...]
-</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="5-summary"></a>5. Summary<a class="hash-link" href="#5-summary" title="Direct link to heading">#</a></h3><p>This paper through a practical case, the data synchronization principle of websocket source code analysis. The main knowledge points involved are as follows:</p> [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="5-summary"></a>5. Summary<a class="hash-link" href="#5-summary" title="Direct link to heading">#</a></h3><p>This paper through a practical case, the data synchronization principle of websocket source code analysis. The main knowledge points involved are as follows:</p> [...]
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/DataSync-SourceCode-Analysis-ZooKeeper-Data-Sync/index.html b/blog/DataSync-SourceCode-Analysis-ZooKeeper-Data-Sync/index.html
index 8e72b6edc2..7d9e217a1a 100644
--- a/blog/DataSync-SourceCode-Analysis-ZooKeeper-Data-Sync/index.html
+++ b/blog/DataSync-SourceCode-Analysis-ZooKeeper-Data-Sync/index.html
@@ -9,12 +9,12 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">ZooKeeper Data Synchronization Source Code Analysis | Apache ShenYu</title><meta data-react-helmet="true" property="og:title" content="ZooKeeper Data Synchronization Source Code Analysis | Apache ShenYu"><meta data-react-helmet="true" name="description" content="Apache ShenYu is an asynchronous, high-performance, cross-language, responsive API gatew [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
+<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> } else {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // update data, delete and then insert</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> selectorCount = selectorMapper.updateSelective(selectorDO);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // update upstream</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> updateDivideUpstream(selectorDO);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return selectorCount;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" styl [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //......</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_W [...]
@@ -41,8 +41,8 @@
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private void watcherPlugin(final String pluginName) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // plugin path</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> String pluginPath = DefaultPathConstants.buildPluginPath(pluginName);</span></span><span class="token-line" style="color:#393A34"><span class="t [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public void handleDataChange(final String dataPath, final Object data) { // update</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //omit implementation logic, is actually the CommonPluginDataSubscriber operation, can connect wit [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public void handleDataDeleted(final String dataPath) { // delete</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Omit implementation logic, is actually the CommonPluginDataSubscriber operation, can connect with the front</sp [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> });</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span></span><span class="token-line" style="color:#393A34"><span class="token plain">} </span></span></cod [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> });</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span></span><span class="token-line" style="color:#393A34"><span class="token plain">} </span></span></cod [...]
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/E2eTest-Analysis/index.html b/blog/E2eTest-Analysis/index.html
index 2871dc01cf..ce24bb9b52 100644
--- a/blog/E2eTest-Analysis/index.html
+++ b/blog/E2eTest-Analysis/index.html
@@ -9,17 +9,17 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">E2e Test Analysis | Apache ShenYu</title><meta data-react-helmet="true" property="og:title" content="E2e Test Analysis | Apache ShenYu"><meta data-react-helmet="true" name="description" content="This article will conduct an in-depth analysis of Apache ShenYu e2e module."><meta data-react-helmet="true" property="og:description" content="This article [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
+<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">on</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">pull_request</span><span class="token punctuation" style="color:#393A34">:</span><span class="token [...]
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>@ShenYuTest is extended through the ShenYuExtension class, and the configuration of admin and gateway takes effect in beforeAll in ShenYuExtension. The specific effective logic is implemented in the DockerServiceCompose class.</p><p><img alt="e2e-shenyutest" src="/assets/images/e2e-shenyutest-8ea26c9ea373d2c182be8d19c53cb021.png"></p><p><img a [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> MultiValueMap<String, String> formData = new LinkedMultiValueMap<>();</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> formData.add("id", "8");</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> formData.add("name", "springCloud");</span></span><span class= [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private ShenYuScenarioSpec testWithUriEquals() {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return ShenYuScenarioSpec.builder()</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> .name("single-spring-cloud uri =]")</span></span><span class="token-line" style="color:#393A34"><span class="t [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private ShenYuScenarioSpec testWithUriEquals() {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return ShenYuScenarioSpec.builder()</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> .name("single-spring-cloud uri =]")</span></span><span class="token-line" style="color:#393A34"><span class="t [...]
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/IntegrationTest-Analysis/index.html b/blog/IntegrationTest-Analysis/index.html
index bdcfee1736..005ab6d7a8 100644
--- a/blog/IntegrationTest-Analysis/index.html
+++ b/blog/IntegrationTest-Analysis/index.html
@@ -9,17 +9,17 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Integration Test Analysis | Apache ShenYu</title><meta data-react-helmet="true" property="og:title" content="Integration Test Analysis | Apache ShenYu"><meta data-react-helmet="true" name="description" content="This article will provide an in-depth analysis of Apache ShenYu's integration tests."><meta data-react-helmet="true" property="og:descr [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
+<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">shenyu-examples-http</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">deploy</span><span class="token punctuation" style="color:#393A34">:</span><s [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">shenyu-admin</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">image</span><span class="token punctuation" style="color:#393A34">:</span><span class [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">shenyu-integrated-test-http</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">container_name</span><span class="token punctuation" style="color:#393 [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">networks</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">shenyu</span><span class="token punctuation" style="color:#393A34">:</span><span class="token [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">networks</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">shenyu</span><span class="token punctuation" style="color:#393A34">:</span><span class="token [...]
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/Loader-SourceCode-Analysis-ExtLoader/index.html b/blog/Loader-SourceCode-Analysis-ExtLoader/index.html
index 0cb634c3b9..f4ac3b2a45 100644
--- a/blog/Loader-SourceCode-Analysis-ExtLoader/index.html
+++ b/blog/Loader-SourceCode-Analysis-ExtLoader/index.html
@@ -9,15 +9,15 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Extension plugin loading logic | Apache ShenYu</title><meta data-react-helmet="true" property="og:title" content="Extension plugin loading logic | Apache ShenYu"><meta data-react-helmet="true" name="description" content="This article is based on the source code analysis of version 'shenyu-2.6.1'"><meta data-react-helmet="true" property="og [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
+<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
By default, it will scan every 300 seconds after 30 seconds of startup.</p><p>Meanwhile, the decision to enable extension plugin functionality can be made through the configuration of <code>shenyu. extPlugin. enabled</code>.</p><p>The above configurations can be adjusted in the configuration file:</p><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI yaml"><pre tabindex="0" class="prism-code language-yaml codeBlock_rtdJ thin-scrollbar" style="color:#393A34;background- [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>The logic of this method processes two data points:</p><ol><li>Synchronize the data that implements the <code>ShenyuPlugin</code> interface to the plugins list of <code>webHandler</code>.</li></ol><div class="codeBlockContainer_J+bg"><div class="codeBl [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>The logic of this method processes two data points:</p><ol><li>Synchronize the data that implements the <code>ShenyuPlugin</code> interface to the plugins list of <code>webHandler</code>.</li></ol><div class="codeBlockContainer_J+bg"><div class="codeBl [...]
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/Plugin-SourceCode-Analysis-Context-Path-Plugin/index.html b/blog/Plugin-SourceCode-Analysis-Context-Path-Plugin/index.html
index 2d204dea24..3e553a66ba 100644
--- a/blog/Plugin-SourceCode-Analysis-Context-Path-Plugin/index.html
+++ b/blog/Plugin-SourceCode-Analysis-Context-Path-Plugin/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Code Analysis For Context-Path Plugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:title" content="Code Analysis For Context-Path Plugin | Apache ShenYu"><meta data-react-helmet="true" name="description" content="Before starting, you can refer to this article to start the gateway"><meta data-react-helmet="true" property="og:des [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/Plugin-SourceCode-Analysis-Divide-Plugin/index.html b/blog/Plugin-SourceCode-Analysis-Divide-Plugin/index.html
index bc33dc6ea4..9f4eca91fa 100644
--- a/blog/Plugin-SourceCode-Analysis-Divide-Plugin/index.html
+++ b/blog/Plugin-SourceCode-Analysis-Divide-Plugin/index.html
@@ -9,12 +9,12 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Code Analysis For Divide Plugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:title" content="Code Analysis For Divide Plugin | Apache ShenYu"><meta data-react-helmet="true" name="description" content="The ShenYu gateway uses the divide plugin to handle http requests. You can see the official documentation Quick start with Http [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
+<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">@Retention(RetentionPolicy.RUNTIME)</span></span><span class="token-line" style="color:#393A34"><span class="token plain">@Target({ElementType.TYPE, ElementType.METHOD})</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public @interface ShenyuSpringMvcClient {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span></span><sp [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //is enabled</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> boolean enabled() default true;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //register MetaData</span></span><span class="token-line" style="color:#393A34"><span [...]
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="12-scan-annotation"></a>1.2 Scan annotation<a class="hash-link" href="#12-scan-annotation" title="Direct link to heading">#</a></h4><p>Annotation scanning is done through <code>SpringMvcClientBeanPostProcessor</code>, which implements the <code>BeanPostProcessor</code> [...]
@@ -50,8 +50,8 @@
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //......</span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><ul><li>org.apache.shenyu.plugin.httpclient.WebClientPlugin#doRequest()</li></ul><p>Initiate a real request call via <code>webClient</code> in the <code>doRequest()</code> method.</p><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI java"><pre tabindex="0" class="prism-code language-java codeBlock_rtdJ thin-scrollbar" style=" [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">@Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> protected Mono<ClientResponse> doRequest(final ServerWebExchange exchange, final String httpMethod, final URI uri,</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> final HttpHeaders httpHeaders, final Flux<DataBuff [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public Mono<Void> writeWith(final ServerWebExchange exchange, final ShenyuPluginChain chain) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return chain.execute(exchange).then(Mono.defer(() -> {</span></span><span class="token-line" style="col [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public Mono<Void> writeWith(final ServerWebExchange exchange, final ShenyuPluginChain chain) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return chain.execute(exchange).then(Mono.defer(() -> {</span></span><span class="token-line" style="col [...]
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/Plugin-SourceCode-Analysis-Dubbo-Plugin/index.html b/blog/Plugin-SourceCode-Analysis-Dubbo-Plugin/index.html
index 69ed62ffce..5f7964d0e5 100644
--- a/blog/Plugin-SourceCode-Analysis-Dubbo-Plugin/index.html
+++ b/blog/Plugin-SourceCode-Analysis-Dubbo-Plugin/index.html
@@ -9,12 +9,12 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Code Analysis For Dubbo Plugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:title" content="Code Analysis For Dubbo Plugin | Apache ShenYu"><meta data-react-helmet="true" name="description" content="Apache ShenYu is an asynchronous, high-performance, cross-language, responsive API gateway."><meta data-react-helmet="true" proper [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
+<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><span class="token tag namespace" style="color:#00009f;opacity:0.7">dubbo:</span><span class="token tag" style="color:#00009f">application</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><span class="token tag namespace" style="color:#00009f;opacity:0.7">dubbo:</span><span class="token tag" style="color:#00009f">service</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">timeout</span><span class="token tag attr-value punctuation attr-equals" s [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34"></</span><span class="token tag" style="color:#00009f">beans</span><span class="token tag punctuation" style="color:#393A34">></span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>Declare the application service name, register the center add [...]
@@ -54,8 +54,8 @@
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> Map<String, String> parameters = new HashMap<>(2);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> parameters.put("dispatcher", "direct");</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> reference.setParameters(parameters);</span></span><span class="token-line" [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> String rpcExt = metaData.getRpcExt();//rpc ext param</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> DubboParam dubboParam = parserToDubboParam(rpcExt);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> if (Objects.nonNull(dubboParam)) {</span></span><span class="token-line" style="color:#393A3 [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public class RPCMessageWriter implements MessageWriter {</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public Mono<Void> writeWith(final ServerWebExchange exchange, final ShenyuPluginChain chain) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return chain.execute(exchange).then(Mono.defer(() -> {</span></span><span class="token-line" style="col [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public Mono<Void> writeWith(final ServerWebExchange exchange, final ShenyuPluginChain chain) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return chain.execute(exchange).then(Mono.defer(() -> {</span></span><span class="token-line" style="col [...]
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/Plugin-SourceCode-Analysis-Param-Mapping-Plugin/index.html b/blog/Plugin-SourceCode-Analysis-Param-Mapping-Plugin/index.html
index 1744d408f0..de4c04df24 100644
--- a/blog/Plugin-SourceCode-Analysis-Param-Mapping-Plugin/index.html
+++ b/blog/Plugin-SourceCode-Analysis-Param-Mapping-Plugin/index.html
@@ -9,15 +9,15 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Code Analysis For Param-Mapping Plugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:title" content="Code Analysis For Param-Mapping Plugin | Apache ShenYu"><meta data-react-helmet="true" name="description" content="Before starting, you can refer to this article to start the gateway"><meta data-react-helmet="true" property="og:d [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
+<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">// method overridden by FormDataOperator</span></span><span class="token-line" style="color:#393A34"><span class="token plain">@Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public void operation(final DocumentContext context, final ParamMappingHandle paramMappingHandle) {</span></span><span class="token-line" style="color:#393A34"><span class="token pla [...]
-<code>LinkedMultiValueMap<String, String> modifyMap = GsonUtils.getInstance().toLinkedMultiValueMap(modify);</code></p><p>This line converts the modified json into <code>LinkedMultiValueMap</code>, <code>GsonUtils#toLinkedMultiValueMap</code> is as follows.</p><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI java"><pre tabindex="0" class="prism-code language-java codeBlock_rtdJ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlo [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<code>LinkedMultiValueMap<String, String> modifyMap = GsonUtils.getInstance().toLinkedMultiValueMap(modify);</code></p><p>This line converts the modified json into <code>LinkedMultiValueMap</code>, <code>GsonUtils#toLinkedMultiValueMap</code> is as follows.</p><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI java"><pre tabindex="0" class="prism-code language-java codeBlock_rtdJ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlo [...]
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/RegisterCenter-SourceCode-Analysis-Http-Register/index.html b/blog/RegisterCenter-SourceCode-Analysis-Http-Register/index.html
index 5e6fe743aa..5d55147125 100644
--- a/blog/RegisterCenter-SourceCode-Analysis-Http-Register/index.html
+++ b/blog/RegisterCenter-SourceCode-Analysis-Http-Register/index.html
@@ -9,12 +9,12 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Register Center Source Code Analysis of Http Register | Apache ShenYu</title><meta data-react-helmet="true" property="og:title" content="Register Center Source Code Analysis of Http Register | Apache ShenYu"><meta data-react-helmet="true" name="description" content="Apache ShenYu is an asynchronous, high-performance, cross-language, responsive API g [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
+<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // create SpringMvcClientEventListener to handle metadata and URI</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Bean</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public SpringMvcClientEventListener springHttpClientEventListener(final ShenyuClientConfig clientConfig,</span></span><span class="token-line" style= [...]
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p><code>ShenyuClientCommonBeanConfiguration</code> is a <code>shenyu</code> client common configuration class that will create the <code>bean</code> common to the registry client.</p><ul><li>Create <code>ShenyuClientRegisterRepository</code>, which is created by factory class.</li><li>Create <code>ShenyuRegisterCenterConfig</code>, which reads t [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">/**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Shenyu Client Common Bean Configuration</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain">@Configuration</span></span><span class="token-line" style="color:#393A34"><span class="token pl [...]
@@ -77,8 +77,8 @@
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public String register(final MetaDataRegisterDTO dto) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // 1.register selector information</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> String selectorHandler = selectorHandler(dto);</span></span><span class="token-line" style="color:#393A34"><span class="to [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //......</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public String registerURI(final String selectorName, final List<URIRegisterDTO> uriList) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> if (CollectionUtils.isEmpty(uriList)) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return "";</span></span><span class="token-line" style="color: [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Update records in the database</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> selectorService.updateSelective(selectorDO);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // publish Event to gateway</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> eventPub [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Update records in the database</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> selectorService.updateSelective(selectorDO);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // publish Event to gateway</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> eventPub [...]
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/SPI-SourceCode-Analysis-LoadBalance-SPI/index.html b/blog/SPI-SourceCode-Analysis-LoadBalance-SPI/index.html
index adf456762d..bc5ecd8e19 100644
--- a/blog/SPI-SourceCode-Analysis-LoadBalance-SPI/index.html
+++ b/blog/SPI-SourceCode-Analysis-LoadBalance-SPI/index.html
@@ -9,12 +9,12 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">LoadBalancer SPI Source Code Analysis | Apache ShenYu</title><meta data-react-helmet="true" property="og:title" content="LoadBalancer SPI Source Code Analysis | Apache ShenYu"><meta data-react-helmet="true" name="description" content="Gateway applications need to support a variety of load balancing strategies, including random,Hashing, RoundRobin a [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
+<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * this is select one for upstream list.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param upstreamList upstream list</span></span><span class="token-line" style="c [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * url.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private String url;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="di [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * weight.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private final int weight;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" [...]
@@ -43,8 +43,8 @@ It can be seen from the formula that the final weight(<code>ww</code>) is propor
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private long lastUpdate;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> void setWeight(final int weight) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> this.weight = weight;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> current.set(0);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" style="col [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> void sel(final int total) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> current.addAndGet(-1 * total);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> void setLastUpdate(final long lastUpdate) {</span></span><span cla [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //calling the Utility class and invoke the LoadBalance processing.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> Upstream upstream = LoadBalancerFactory.selector(upstreamList, ruleHandle.getLoadBalance(), ip);</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p> [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //calling the Utility class and invoke the LoadBalance processing.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> Upstream upstream = LoadBalancerFactory.selector(upstreamList, ruleHandle.getLoadBalance(), ip);</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p> [...]
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/SPI-SourceCode-Analysis-MatchStrategy-SPI/index.html b/blog/SPI-SourceCode-Analysis-MatchStrategy-SPI/index.html
index ce2e2771f0..e90d97a168 100644
--- a/blog/SPI-SourceCode-Analysis-MatchStrategy-SPI/index.html
+++ b/blog/SPI-SourceCode-Analysis-MatchStrategy-SPI/index.html
@@ -9,18 +9,18 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">MatchStrategy -- analyze the design based on SPI | Apache ShenYu</title><meta data-react-helmet="true" property="og:title" content="MatchStrategy -- analyze the design based on SPI | Apache ShenYu"><meta data-react-helmet="true" name="description" content="In most of the plugins ( such as Dubbo, gRPC,Spring-cloud, etc) of Apache Shenyu, the routin [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
+<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> Boolean match(List<ConditionData> conditionDataList, ServerWebExchange exchange);</span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>The annotation <code>@SPI</code> means that this is an <code>SPI</code> interfa [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private String paramType;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private String operator;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private String paramName;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private String paramValue;</span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h2><a aria-hidden="true" t [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public String buildRealData(final ConditionData condition, final ServerWebExchange exchange) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return ParameterDataFactory.builderData(condition.getParamType(), condition.getParamName(), exchange);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><spa [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public Boolean match(final List<ConditionData> conditionDataList, final ServerWebExchange exchange) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return conditionDataList</span></span><span class="token-line" style="color:#393A34"><span class="t [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public Boolean match(final List<ConditionData> conditionDataList, final ServerWebExchange exchange) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return conditionDataList</span></span><span class="token-line" style="color:#393A34"><span class="t [...]
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/SPI-SourceCode-Analysis-PredicateJudge-SPI/index.html b/blog/SPI-SourceCode-Analysis-PredicateJudge-SPI/index.html
index 6d67f3b8e5..72a04f6ee0 100644
--- a/blog/SPI-SourceCode-Analysis-PredicateJudge-SPI/index.html
+++ b/blog/SPI-SourceCode-Analysis-PredicateJudge-SPI/index.html
@@ -9,15 +9,15 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">PredicateJudge -- analyze the design based on SPI | Apache ShenYu</title><meta data-react-helmet="true" property="og:title" content="PredicateJudge -- analyze the design based on SPI | Apache ShenYu"><meta data-react-helmet="true" name="description" content="Apache Shenyu has been identified as a gateway application which supports a variety of proto [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
+<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * judge conditionData and realData is match.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param conditionData {@linkplain ConditionData}</span></span><span class="t [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain">contains=org.apache.shenyu.plugin.base.condition.judge.ContainsPredicateJudge</span></span><span class="token-line" style="color:#393A34"><span class="token plain">Groovy=org.apache.shenyu.plugin.base.condition.judge.GroovyPredicateJudge</span></span><span class="token-line" style="color:#393A34"><span class="token plain">match=org.apache.shenyu.plugin.base.condition.judge.MatchPredicateJudge</span></s [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">contains=org.apache.shenyu.plugin.base.condition.judge.ContainsPredicateJudge</span></span><span class="token-line" style="color:#393A34"><span class="token plain">Groovy=org.apache.shenyu.plugin.base.condition.judge.GroovyPredicateJudge</span></span><span class="token-line" style="color:#393A34"><span class="token plain">match=org.apache.shenyu.plugin.base.condition.judge.MatchPredicateJudge</span></s [...]
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/SPI-SourceCode-Analysis-RateLimiter-SPI/index.html b/blog/SPI-SourceCode-Analysis-RateLimiter-SPI/index.html
index bce6f5681b..0d0ad20b2a 100644
--- a/blog/SPI-SourceCode-Analysis-RateLimiter-SPI/index.html
+++ b/blog/SPI-SourceCode-Analysis-RateLimiter-SPI/index.html
@@ -9,12 +9,12 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">RateLimiter SPI code analysis | Apache ShenYu</title><meta data-react-helmet="true" property="og:title" content="RateLimiter SPI code analysis | Apache ShenYu"><meta data-react-helmet="true" name="description" content="Rate limiter is a very important integral of gateway application, to deal with high traffic. When the system is attacked abnormal [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
+<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * get Key resolver's name.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @return Key resolver's name</span></span><span class="token-line" style="color:#393 [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * resolve.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param exchange exchange the current server exchange {@linkplain ServerWebExchange}</span></span><span class= [...]
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p><code>@SPI</code> registers the current interface as Apache Shenyu SPI. Method <code>resolve(ServerWebExchange exchange)</code> is used to provide the resolution way. Currently there are two key resolvers in <code>RateLimiterKeyResolver</code> <code>SPI</code>:<code>WholeKeyResolve</code> and <code>RemoteAddrKeyResolver</code>. The res [...]
@@ -22,8 +22,8 @@
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">if count < capacity then</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> redis.call("zadd", key, timestamp, id)</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> allowed = 1</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> count = count + 1</span></span><span class="token-li [...]
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>The filled_tokens is produced evenly by time interval * rate,if the number of tokens greater than requests, then allowed=1, and update new_tokens.</p><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI lua"><pre tabindex="0" class="prism-code language-lua codeBlock_rtdJ thin-scrollbar" style="color:#393A34;background-color [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">return { allowed_num, new_tokens }</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>Here <code>now</code> is current time parameters passed in, set <code>tokens_key</code> to hold the string <code>new_tokens</code> and set<code>tokens_key</code> to timeout after <code>ttl</code> of seconds. Set <code>ti [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain">return { allowed_num, remain_request }</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>Previously has set <code>window_time</code>=1, using <code>zremrangebyscore</code> command of Redis to remove all the elements in the sorted set stored at <code>tokens_key</code> with a score in [0,now - window_size / w [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">return { allowed_num, remain_request }</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>Previously has set <code>window_time</code>=1, using <code>zremrangebyscore</code> command of Redis to remove all the elements in the sorted set stored at <code>tokens_key</code> with a score in [0,now - window_size / w [...]
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/SPI-SourceCode-Analysis-SPI/index.html b/blog/SPI-SourceCode-Analysis-SPI/index.html
index 5c6fefe033..72bd1c7873 100644
--- a/blog/SPI-SourceCode-Analysis-SPI/index.html
+++ b/blog/SPI-SourceCode-Analysis-SPI/index.html
@@ -9,8 +9,8 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">SPI Source Code Analysis | Apache ShenYu</title><meta data-react-helmet="true" property="og:title" content="SPI Source Code Analysis | Apache ShenYu"><meta data-react-helmet="true" name="description" content="Apache ShenYu is an asynchronous, high-performance, cross-language, responsive API gateway."><meta data-react-helmet="true" property="og:descr [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -31,8 +31,8 @@
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">// 基于别名搜索已经加载的实现类信息,并且实例化对应的实现类进行值包装</span></span><span class="token-line" style="color:#393A34"><span class="token plain">private Holder<T> createExtension(final String name) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // 加载该@SPI标识接口的所有实现类信息并且获取对应别名的实现类信息</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> Clas [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Gets Extension.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param <T> the type parameter</span></span><span class="token-line" style="color:#393A34"><spa [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public <T> T getExtension(final String key, final Class<T> clazz) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return Optional.ofNullable(clazz) // 入参clazz非空</span></span><span class="token-line" style="color:#393A34"><span class="token [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"># then load it with ExtensionLoader</span></span><span class="token-line" style="color:#393A34"><span class="token plain">ExtensionFactory extensionFactory = ExtensionLoader.getExtensionLoader(ExtensionFactory.class).getDefaultJoin();</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>Once you have an 'E [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"># then load it with ExtensionLoader</span></span><span class="token-line" style="color:#393A34"><span class="token plain">ExtensionFactory extensionFactory = ExtensionLoader.getExtensionLoader(ExtensionFactory.class).getDefaultJoin();</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>Once you have an 'E [...]
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/Start-SourceCode-Analysis-Start-Demo-for-Contributor/index.html b/blog/Start-SourceCode-Analysis-Start-Demo-for-Contributor/index.html
index 4b95c9a88e..6dd633be29 100644
--- a/blog/Start-SourceCode-Analysis-Start-Demo-for-Contributor/index.html
+++ b/blog/Start-SourceCode-Analysis-Start-Demo-for-Contributor/index.html
@@ -9,18 +9,18 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Guide for New Contributors to Start avoid Pitfalls | Apache ShenYu</title><meta data-react-helmet="true" property="og:title" content="Guide for New Contributors to Start avoid Pitfalls | Apache ShenYu"><meta data-react-helmet="true" name="description" content="Preface"><meta data-react-helmet="true" property="og:description" content="Preface"><meta [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
+<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><span class="token tag" style="color:#00009f">mirror</span><span class="token tag punctuation" style="color:#393A34">></span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><spa [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><span class="token tag" style="color:#00009f">mirror</span><span class="token tag punctuation" style="color:#393A34">></span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><spa [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><span class="token tag" style="color:#00009f">mirror</span><span class="token tag punctuation" style="color:#393A34">></span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><spa [...]
If the shenyu-e2e build fails, then add the <code><relativePath>. /pom.xml</relativePath></code> to <code><relativePath/></code>.</p></li></ol><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="start-gateway-service"></a>Start Gateway Service<a class="hash-link" href="#start-gateway-service" title="Direct link to heading">#</a></h4><ol><li><p>Start the <code>shenyu-admin</code> console (H2 database is used by default)</p><img src="/img/activi [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain">C:</span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain">Users</span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain">pc</span><span class="token operator" style="color:#393A34">></span><span class="token plain">npm -v</span></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">C:</span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain">Users</span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain">pc</span><span class="token operator" style="color:#393A34">></span><span class="token plain">npm -v</span></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class [...]
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/Start-SourceCode-Analysis-Start-Demo/index.html b/blog/Start-SourceCode-Analysis-Start-Demo/index.html
index 33d0febdf2..4a97aa2fbf 100644
--- a/blog/Start-SourceCode-Analysis-Start-Demo/index.html
+++ b/blog/Start-SourceCode-Analysis-Start-Demo/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Apache ShenYu Start Demo | Apache ShenYu</title><meta data-react-helmet="true" property="og:title" content="Apache ShenYu Start Demo | Apache ShenYu"><meta data-react-helmet="true" name="description" content="Environmental preparation"><meta data-react-helmet="true" property="og:description" content="Environmental preparation"><meta data-react-helme [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/atom.xml b/blog/atom.xml
index a905bf4fd8..9ca5c9d72c 100644
--- a/blog/atom.xml
+++ b/blog/atom.xml
@@ -2,143 +2,143 @@
<feed xmlns="http://www.w3.org/2005/Atom">
<id>https://shenyu.apache.org/blog</id>
<title>Apache ShenYu Blog</title>
- <updated>2024-02-05T10:14:12.177Z</updated>
+ <updated>2024-02-06T08:47:38.171Z</updated>
<generator>https://github.com/jpmonette/feed</generator>
<link rel="alternate" href="https://shenyu.apache.org/blog"/>
<subtitle>Apache ShenYu Blog</subtitle>
<icon>https://shenyu.apache.org/img/favicon.svg</icon>
<entry>
- <title type="html"><![CDATA[Apache ShenYu Start Demo]]></title>
- <id>Apache ShenYu Start Demo</id>
- <link href="https://shenyu.apache.org/blog/Start-SourceCode-Analysis-Start-Demo"/>
- <updated>2024-02-05T10:14:12.177Z</updated>
- <summary type="html"><![CDATA[Environmental preparation]]></summary>
+ <title type="html"><![CDATA[LoadBalancer SPI Source Code Analysis]]></title>
+ <id>LoadBalancer SPI Source Code Analysis</id>
+ <link href="https://shenyu.apache.org/blog/SPI-SourceCode-Analysis-LoadBalance-SPI"/>
+ <updated>2024-02-06T08:47:38.171Z</updated>
+ <summary type="html"><![CDATA[Gateway applications need to support a variety of load balancing strategies, including random,Hashing, RoundRobin and so on. In Apache Shenyu gateway, it not only realizes such traditional algorithms, but also makes smoother traffic processing for the entry of server nodes through detailed processing such as traffic warm-up, so as to obtain better overall stability. In this article, let's walk through how Apache Shenyu is designed and implemented th [...]
+ </entry>
+ <entry>
+ <title type="html"><![CDATA[MatchStrategy -- analyze the design based on SPI]]></title>
+ <id>MatchStrategy -- analyze the design based on SPI</id>
+ <link href="https://shenyu.apache.org/blog/SPI-SourceCode-Analysis-MatchStrategy-SPI"/>
+ <updated>2024-02-06T08:47:38.171Z</updated>
+ <summary type="html"><![CDATA[In most of the plugins ( such as Dubbo, gRPC,Spring-cloud, etc) of Apache Shenyu, the routingparameters are designed to support the combination of multiple conditions. In order to realize such requirements, the parameters and behaviors are abstracted to three parts according to its SPI mechanism, and implemented in shenyu-plugin-base module.]]></summary>
</entry>
<entry>
<title type="html"><![CDATA[RateLimiter SPI code analysis]]></title>
<id>RateLimiter SPI code analysis</id>
<link href="https://shenyu.apache.org/blog/SPI-SourceCode-Analysis-RateLimiter-SPI"/>
- <updated>2024-02-05T10:14:12.177Z</updated>
+ <updated>2024-02-06T08:47:38.171Z</updated>
<summary type="html"><![CDATA[Rate limiter is a very important integral of gateway application, to deal with high traffic. When the system is attacked abnormally by a large number of traffic gathered in a short time; When there are a large number of lower priority request need to be slow down or else it will effect your high priority transactions; Or sometimes your system can not afford the regular traffic; in these scenarios, we need to start rate limiter component to pr [...]
</entry>
+ <entry>
+ <title type="html"><![CDATA[PredicateJudge -- analyze the design based on SPI]]></title>
+ <id>PredicateJudge -- analyze the design based on SPI</id>
+ <link href="https://shenyu.apache.org/blog/SPI-SourceCode-Analysis-PredicateJudge-SPI"/>
+ <updated>2024-02-06T08:47:38.171Z</updated>
+ <summary type="html"><![CDATA[Apache Shenyu has been identified as a gateway application which supports a variety of protocols and microservice frameworks such as Dubbo, gRPC, Spring-Cloud, etc. To do this, the product has accomplished an elegant SPI (Service Provider Interface) as its foundation, and make the Rule data parsing and predicting program very simple , resiliency and security. As to rule data parsing processing, the SPI design increases the product's scalability. [...]
+ </entry>
<entry>
<title type="html"><![CDATA[Guide for New Contributors to Start avoid Pitfalls]]></title>
<id>Guide for New Contributors to Start avoid Pitfalls</id>
<link href="https://shenyu.apache.org/blog/Start-SourceCode-Analysis-Start-Demo-for-Contributor"/>
- <updated>2024-02-05T10:14:12.177Z</updated>
+ <updated>2024-02-06T08:47:38.171Z</updated>
<summary type="html"><![CDATA[Preface]]></summary>
</entry>
<entry>
- <title type="html"><![CDATA[Nacos Data Synchronization Source Code Analysis]]></title>
- <id>Nacos Data Synchronization Source Code Analysis</id>
- <link href="https://shenyu.apache.org/blog/DataSync-SourceCode-Analysis-Nacos-Data-Sync"/>
- <updated>2024-02-05T10:14:12.173Z</updated>
- <summary type="html"><![CDATA[Apache ShenYu is an asynchronous, high-performance, cross-language, responsive API gateway.]]></summary>
- </entry>
- <entry>
- <title type="html"><![CDATA[E2e Test Analysis]]></title>
- <id>E2e Test Analysis</id>
- <link href="https://shenyu.apache.org/blog/E2eTest-Analysis"/>
- <updated>2024-02-05T10:14:12.173Z</updated>
- <summary type="html"><![CDATA[This article will conduct an in-depth analysis of Apache ShenYu e2e module.]]></summary>
+ <title type="html"><![CDATA[Apache ShenYu Start Demo]]></title>
+ <id>Apache ShenYu Start Demo</id>
+ <link href="https://shenyu.apache.org/blog/Start-SourceCode-Analysis-Start-Demo"/>
+ <updated>2024-02-06T08:47:38.171Z</updated>
+ <summary type="html"><![CDATA[Environmental preparation]]></summary>
</entry>
<entry>
<title type="html"><![CDATA[Http Long Polling Data Synchronization Source Code Analysis]]></title>
<id>Http Long Polling Data Synchronization Source Code Analysis</id>
<link href="https://shenyu.apache.org/blog/DataSync-SourceCode-Analysis-Http-Data-Sync"/>
- <updated>2024-02-05T10:14:12.173Z</updated>
+ <updated>2024-02-06T08:47:38.167Z</updated>
<summary type="html"><![CDATA[Apache ShenYu is an asynchronous, high-performance, cross-language, responsive API gateway.]]></summary>
</entry>
<entry>
- <title type="html"><![CDATA[Etcd Data Synchronization Source Code Analysis]]></title>
- <id>Etcd Data Synchronization Source Code Analysis</id>
- <link href="https://shenyu.apache.org/blog/DataSync-SourceCode-Analysis-Etcd-Data-Sync"/>
- <updated>2024-02-05T10:14:12.173Z</updated>
+ <title type="html"><![CDATA[Nacos Data Synchronization Source Code Analysis]]></title>
+ <id>Nacos Data Synchronization Source Code Analysis</id>
+ <link href="https://shenyu.apache.org/blog/DataSync-SourceCode-Analysis-Nacos-Data-Sync"/>
+ <updated>2024-02-06T08:47:38.167Z</updated>
<summary type="html"><![CDATA[Apache ShenYu is an asynchronous, high-performance, cross-language, responsive API gateway.]]></summary>
</entry>
- <entry>
- <title type="html"><![CDATA[Integration Test Analysis]]></title>
- <id>Integration Test Analysis</id>
- <link href="https://shenyu.apache.org/blog/IntegrationTest-Analysis"/>
- <updated>2024-02-05T10:14:12.173Z</updated>
- <summary type="html"><![CDATA[This article will provide an in-depth analysis of Apache ShenYu's integration tests.]]></summary>
- </entry>
<entry>
<title type="html"><![CDATA[WebSocket Data Synchronization Source Code Analysis]]></title>
<id>WebSocket Data Synchronization Source Code Analysis</id>
<link href="https://shenyu.apache.org/blog/DataSync-SourceCode-Analysis-WebSocket-Data-Sync"/>
- <updated>2024-02-05T10:14:12.173Z</updated>
+ <updated>2024-02-06T08:47:38.167Z</updated>
<summary type="html"><![CDATA[In ShenYu gateway, data synchronization refers to how to synchronize the updated data to the gateway after the data is sent in the background management system. The Apache ShenYu gateway currently supports data synchronization for ZooKeeper, WebSocket, http long poll, Nacos, etcd and Consul. The main content of this article is based on WebSocket data synchronization source code analysis.]]></summary>
</entry>
<entry>
- <title type="html"><![CDATA[Extension plugin loading logic]]></title>
- <id>Extension plugin loading logic</id>
- <link href="https://shenyu.apache.org/blog/Loader-SourceCode-Analysis-ExtLoader"/>
- <updated>2024-02-05T10:14:12.173Z</updated>
- <summary type="html"><![CDATA[This article is based on the source code analysis of version 'shenyu-2.6.1']]></summary>
+ <title type="html"><![CDATA[Etcd Data Synchronization Source Code Analysis]]></title>
+ <id>Etcd Data Synchronization Source Code Analysis</id>
+ <link href="https://shenyu.apache.org/blog/DataSync-SourceCode-Analysis-Etcd-Data-Sync"/>
+ <updated>2024-02-06T08:47:38.167Z</updated>
+ <summary type="html"><![CDATA[Apache ShenYu is an asynchronous, high-performance, cross-language, responsive API gateway.]]></summary>
+ </entry>
+ <entry>
+ <title type="html"><![CDATA[E2e Test Analysis]]></title>
+ <id>E2e Test Analysis</id>
+ <link href="https://shenyu.apache.org/blog/E2eTest-Analysis"/>
+ <updated>2024-02-06T08:47:38.167Z</updated>
+ <summary type="html"><![CDATA[This article will conduct an in-depth analysis of Apache ShenYu e2e module.]]></summary>
</entry>
<entry>
<title type="html"><![CDATA[ZooKeeper Data Synchronization Source Code Analysis]]></title>
<id>ZooKeeper Data Synchronization Source Code Analysis</id>
<link href="https://shenyu.apache.org/blog/DataSync-SourceCode-Analysis-ZooKeeper-Data-Sync"/>
- <updated>2024-02-05T10:14:12.173Z</updated>
+ <updated>2024-02-06T08:47:38.167Z</updated>
<summary type="html"><![CDATA[Apache ShenYu is an asynchronous, high-performance, cross-language, responsive API gateway.]]></summary>
</entry>
<entry>
- <title type="html"><![CDATA[Code Analysis For Context-Path Plugin]]></title>
- <id>Code Analysis For Context-Path Plugin</id>
- <link href="https://shenyu.apache.org/blog/Plugin-SourceCode-Analysis-Context-Path-Plugin"/>
- <updated>2024-02-05T10:14:12.173Z</updated>
- <summary type="html"><![CDATA[Before starting, you can refer to this article to start the gateway]]></summary>
+ <title type="html"><![CDATA[Integration Test Analysis]]></title>
+ <id>Integration Test Analysis</id>
+ <link href="https://shenyu.apache.org/blog/IntegrationTest-Analysis"/>
+ <updated>2024-02-06T08:47:38.167Z</updated>
+ <summary type="html"><![CDATA[This article will provide an in-depth analysis of Apache ShenYu's integration tests.]]></summary>
+ </entry>
+ <entry>
+ <title type="html"><![CDATA[Extension plugin loading logic]]></title>
+ <id>Extension plugin loading logic</id>
+ <link href="https://shenyu.apache.org/blog/Loader-SourceCode-Analysis-ExtLoader"/>
+ <updated>2024-02-06T08:47:38.167Z</updated>
+ <summary type="html"><![CDATA[This article is based on the source code analysis of version 'shenyu-2.6.1']]></summary>
</entry>
<entry>
<title type="html"><![CDATA[Code Analysis For Divide Plugin]]></title>
<id>Code Analysis For Divide Plugin</id>
<link href="https://shenyu.apache.org/blog/Plugin-SourceCode-Analysis-Divide-Plugin"/>
- <updated>2024-02-05T10:14:12.173Z</updated>
+ <updated>2024-02-06T08:47:38.167Z</updated>
<summary type="html"><![CDATA[The ShenYu gateway uses the divide plugin to handle http requests. You can see the official documentation Quick start with Http to learn how to use this plugin.]]></summary>
</entry>
<entry>
<title type="html"><![CDATA[Code Analysis For Param-Mapping Plugin]]></title>
<id>Code Analysis For Param-Mapping Plugin</id>
<link href="https://shenyu.apache.org/blog/Plugin-SourceCode-Analysis-Param-Mapping-Plugin"/>
- <updated>2024-02-05T10:14:12.173Z</updated>
+ <updated>2024-02-06T08:47:38.167Z</updated>
<summary type="html"><![CDATA[Before starting, you can refer to this article to start the gateway]]></summary>
</entry>
<entry>
- <title type="html"><![CDATA[Code Analysis For Dubbo Plugin]]></title>
- <id>Code Analysis For Dubbo Plugin</id>
- <link href="https://shenyu.apache.org/blog/Plugin-SourceCode-Analysis-Dubbo-Plugin"/>
- <updated>2024-02-05T10:14:12.173Z</updated>
- <summary type="html"><![CDATA[Apache ShenYu is an asynchronous, high-performance, cross-language, responsive API gateway.]]></summary>
- </entry>
- <entry>
- <title type="html"><![CDATA[MatchStrategy -- analyze the design based on SPI]]></title>
- <id>MatchStrategy -- analyze the design based on SPI</id>
- <link href="https://shenyu.apache.org/blog/SPI-SourceCode-Analysis-MatchStrategy-SPI"/>
- <updated>2024-02-05T10:14:12.173Z</updated>
- <summary type="html"><![CDATA[In most of the plugins ( such as Dubbo, gRPC,Spring-cloud, etc) of Apache Shenyu, the routingparameters are designed to support the combination of multiple conditions. In order to realize such requirements, the parameters and behaviors are abstracted to three parts according to its SPI mechanism, and implemented in shenyu-plugin-base module.]]></summary>
+ <title type="html"><![CDATA[Code Analysis For Context-Path Plugin]]></title>
+ <id>Code Analysis For Context-Path Plugin</id>
+ <link href="https://shenyu.apache.org/blog/Plugin-SourceCode-Analysis-Context-Path-Plugin"/>
+ <updated>2024-02-06T08:47:38.167Z</updated>
+ <summary type="html"><![CDATA[Before starting, you can refer to this article to start the gateway]]></summary>
</entry>
<entry>
<title type="html"><![CDATA[Register Center Source Code Analysis of Http Register]]></title>
<id>Register Center Source Code Analysis of Http Register</id>
<link href="https://shenyu.apache.org/blog/RegisterCenter-SourceCode-Analysis-Http-Register"/>
- <updated>2024-02-05T10:14:12.173Z</updated>
+ <updated>2024-02-06T08:47:38.167Z</updated>
<summary type="html"><![CDATA[Apache ShenYu is an asynchronous, high-performance, cross-language, responsive API gateway.]]></summary>
</entry>
<entry>
- <title type="html"><![CDATA[PredicateJudge -- analyze the design based on SPI]]></title>
- <id>PredicateJudge -- analyze the design based on SPI</id>
- <link href="https://shenyu.apache.org/blog/SPI-SourceCode-Analysis-PredicateJudge-SPI"/>
- <updated>2024-02-05T10:14:12.173Z</updated>
- <summary type="html"><![CDATA[Apache Shenyu has been identified as a gateway application which supports a variety of protocols and microservice frameworks such as Dubbo, gRPC, Spring-Cloud, etc. To do this, the product has accomplished an elegant SPI (Service Provider Interface) as its foundation, and make the Rule data parsing and predicting program very simple , resiliency and security. As to rule data parsing processing, the SPI design increases the product's scalability. [...]
- </entry>
- <entry>
- <title type="html"><![CDATA[LoadBalancer SPI Source Code Analysis]]></title>
- <id>LoadBalancer SPI Source Code Analysis</id>
- <link href="https://shenyu.apache.org/blog/SPI-SourceCode-Analysis-LoadBalance-SPI"/>
- <updated>2024-02-05T10:14:12.173Z</updated>
- <summary type="html"><![CDATA[Gateway applications need to support a variety of load balancing strategies, including random,Hashing, RoundRobin and so on. In Apache Shenyu gateway, it not only realizes such traditional algorithms, but also makes smoother traffic processing for the entry of server nodes through detailed processing such as traffic warm-up, so as to obtain better overall stability. In this article, let's walk through how Apache Shenyu is designed and implemented th [...]
+ <title type="html"><![CDATA[Code Analysis For Dubbo Plugin]]></title>
+ <id>Code Analysis For Dubbo Plugin</id>
+ <link href="https://shenyu.apache.org/blog/Plugin-SourceCode-Analysis-Dubbo-Plugin"/>
+ <updated>2024-02-06T08:47:38.167Z</updated>
+ <summary type="html"><![CDATA[Apache ShenYu is an asynchronous, high-performance, cross-language, responsive API gateway.]]></summary>
</entry>
<entry>
<title type="html"><![CDATA[SPI Source Code Analysis]]></title>
diff --git a/blog/index.html b/blog/index.html
index c1ea7158b1..70ddd7a46d 100644
--- a/blog/index.html
+++ b/blog/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Blog | Apache ShenYu</title><meta data-react-helmet="true" property="og:title" content="Blog | Apache ShenYu"><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//blog"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:docusaurus_tag" content="default" [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/page/2/index.html b/blog/page/2/index.html
index 51309338cf..dc13c36940 100644
--- a/blog/page/2/index.html
+++ b/blog/page/2/index.html
@@ -9,14 +9,47 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Blog | Apache ShenYu</title><meta data-react-helmet="true" property="og:title" content="Blog | Apache ShenYu"><meta data-react-helmet="true" name="description" content="Blog"><meta data-react-helmet="true" property="og:description" content="Blog"><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//blog/page/2"><meta [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-By default, it will scan every 300 seconds after 30 seconds of startup.</p><p>Meanwhile, the decision to enable extension plugin functionality can be made through the configuration of <code>shenyu. extPlugin. enabled</code>.</p><p>The above configurations can be adjusted in the configuration file:</p><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI yaml"><pre tabindex="0" class="prism-code language-yaml codeBlock_rtdJ thin-scrollbar" style="color:#393A34;background- [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>The logic of this method processes two data points:</p><ol><li>Synchronize the data that implements the <code>ShenyuPlugin</code> interface to the plugins list of <code>webHandler</code>.</li></ol><div class="codeBlockContainer_J+bg"><div class="codeBl [...]
+<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> } else {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // update data, delete and then insert</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> selectorCount = selectorMapper.updateSelective(selectorDO);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // update upstream</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> updateDivideUpstream(selectorDO);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return selectorCount;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" styl [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //......</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_W [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * This method is called when there are data changes</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param event</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34 [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Config event listener data changed listener.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param zkClient the zk client</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @return the data changed li [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Zookeeper data init zookeeper data init.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param zkClient the zk client</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param syncDataService t [...]
+</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>This configuration class is implemented through the SpringBoot conditional assembly class. The ZookeeperListener class has several annotations:</p><ul><li><p><code>@Configuration</code>: Configuration file, application context;</p></li><li><p><code>@ConditionalOnProperty(prefix = "shenyu.sync.zookeeper", name = "url")</code [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * register zkClient in spring ioc.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param zookeeperProp the zookeeper configuration</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @return ZkClient {@linkplain ZkClien [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private String url;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private Integer sessionTimeout;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private Integer connectionTimeout;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private String serializer;</span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>When we take the initiative to configuration, use the <code>zookeeper</code> data synchronization, <code>zookeeperDataChangedListener</code> [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">/**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * use ZooKeeper to publish change data</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public class ZookeeperDataChangedListener implements DataChangedListener {</span></span><span class [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // create zk node</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private void createZkNode(final String path) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // create only if it does not exist</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> if (!zkClient.exists(p [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // insert zk node</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private void insertZkNode(final String path, final Object data) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // create zk node</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> createZkNode(path);</ [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public void handleDataDeleted(final String dataPath) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> unCacheSelectorData(dataPath); // zk node data deleted</span></span><span class="token-line" style="color:#393A34"><span class= [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">/**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Zookeeper data init</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public class ZookeeperDataInit implements CommandLineRunner {</span></span><span class="token-line" style="color:#39 [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private final ZkClient zkClient;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private final SyncDataService syncDataService;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Instantiates a new Zookeeper data init.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param zkClient the zk client</span></span><span class="token-line" sty [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public void run(final String... args) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> String pluginPath = DefaultPathConstants.PLUGIN_PARENT;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> String authPath = [...]
+</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>Check whether there is data in <code>zk</code>, if not, then synchronize.</p><p><code>ZookeeperDataInit</code> implements the <code>CommandLineRunner</code> interface. It is an interface provided by <code>SpringBoot</code> that executes the <code>run()</code> method after all <code>Spring Beans</code> initializations and is often used for init [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">/**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * zookeeper sync data service</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public class ZookeeperSyncDataService implements SyncDataService, AutoCloseable {</span></span><span class= [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private void watcherPlugin(final String pluginName) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // plugin path</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> String pluginPath = DefaultPathConstants.buildPluginPath(pluginName);</span></span><span class="token-line" style="color:#393A34"><span class="t [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public void handleDataChange(final String dataPath, final Object data) { // update</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //omit implementation logic, is actually the CommonPluginDataSubscriber operation, can connect wit [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public void handleDataDeleted(final String dataPath) { // delete</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Omit implementation logic, is actually the CommonPluginDataSubscriber operation, can connect with the front</sp [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> });</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span></span><span class="token-line" style="color:#393A34"><span class="token plain">} </span></span></cod [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">on</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">pull_request</span><span class="token punctuation" style="color:#393A34">:</span><span class="token [...]
+</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>@ShenYuTest is extended through the ShenYuExtension class, and the configuration of admin and gateway takes effect in beforeAll in ShenYuExtension. The specific effective logic is implemented in the DockerServiceCompose class.</p><p><img alt="e2e-shenyutest" src="/assets/images/e2e-shenyutest-8ea26c9ea373d2c182be8d19c53cb021.png"></p><p><img a [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> MultiValueMap<String, String> formData = new LinkedMultiValueMap<>();</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> formData.add("id", "8");</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> formData.add("name", "springCloud");</span></span><span class= [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private ShenYuScenarioSpec testWithUriEquals() {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return ShenYuScenarioSpec.builder()</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> .name("single-spring-cloud uri =]")</span></span><span class="token-line" style="color:#393A34"><span class="t [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">shenyu-examples-http</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">deploy</span><span class="token punctuation" style="color:#393A34">:</span><s [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">shenyu-admin</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">image</span><span class="token punctuation" style="color:#393A34">:</span><span class [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">shenyu-integrated-test-http</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">container_name</span><span class="token punctuation" style="color:#393 [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">networks</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">shenyu</span><span class="token punctuation" style="color:#393A34">:</span><span class="token [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">@Retention(RetentionPolicy.RUNTIME)</span></span><span class="token-line" style="color:#393A34"><span class="token plain">@Target({ElementType.TYPE, ElementType.METHOD})</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public @interface ShenyuSpringMvcClient {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span></span><sp [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //is enabled</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> boolean enabled() default true;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //register MetaData</span></span><span class="token-line" style="color:#393A34"><span [...]
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="12-scan-annotation"></a>1.2 Scan annotation<a class="hash-link" href="#12-scan-annotation" title="Direct link to heading">#</a></h4><p>Annotation scanning is done through <code>SpringMvcClientBeanPostProcessor</code>, which implements the <code>BeanPostProcessor</code> [...]
@@ -52,9 +85,11 @@ By default, it will scan every 300 seconds after 30 seconds of startup.</p><p>Me
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //......</span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><ul><li>org.apache.shenyu.plugin.httpclient.WebClientPlugin#doRequest()</li></ul><p>Initiate a real request call via <code>webClient</code> in the <code>doRequest()</code> method.</p><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI java"><pre tabindex="0" class="prism-code language-java codeBlock_rtdJ thin-scrollbar" style=" [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">@Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> protected Mono<ClientResponse> doRequest(final ServerWebExchange exchange, final String httpMethod, final URI uri,</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> final HttpHeaders httpHeaders, final Flux<DataBuff [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public Mono<Void> writeWith(final ServerWebExchange exchange, final ShenyuPluginChain chain) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return chain.execute(exchange).then(Mono.defer(() -> {</span></span><span class="token-line" style="col [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public Mono<Void> writeWith(final ServerWebExchange exchange, final ShenyuPluginChain chain) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return chain.execute(exchange).then(Mono.defer(() -> {</span></span><span class="token-line" style="col [...]
+By default, it will scan every 300 seconds after 30 seconds of startup.</p><p>Meanwhile, the decision to enable extension plugin functionality can be made through the configuration of <code>shenyu. extPlugin. enabled</code>.</p><p>The above configurations can be adjusted in the configuration file:</p><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI yaml"><pre tabindex="0" class="prism-code language-yaml codeBlock_rtdJ thin-scrollbar" style="color:#393A34;background- [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>The logic of this method processes two data points:</p><ol><li>Synchronize the data that implements the <code>ShenyuPlugin</code> interface to the plugins list of <code>webHandler</code>.</li></ol><div class="codeBlockContainer_J+bg"><div class="codeBl [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">// method overridden by FormDataOperator</span></span><span class="token-line" style="color:#393A34"><span class="token plain">@Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public void operation(final DocumentContext context, final ParamMappingHandle paramMappingHandle) {</span></span><span class="token-line" style="color:#393A34"><span class="token pla [...]
-<code>LinkedMultiValueMap<String, String> modifyMap = GsonUtils.getInstance().toLinkedMultiValueMap(modify);</code></p><p>This line converts the modified json into <code>LinkedMultiValueMap</code>, <code>GsonUtils#toLinkedMultiValueMap</code> is as follows.</p><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI java"><pre tabindex="0" class="prism-code language-java codeBlock_rtdJ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlo [...]
+<code>LinkedMultiValueMap<String, String> modifyMap = GsonUtils.getInstance().toLinkedMultiValueMap(modify);</code></p><p>This line converts the modified json into <code>LinkedMultiValueMap</code>, <code>GsonUtils#toLinkedMultiValueMap</code> is as follows.</p><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI java"><pre tabindex="0" class="prism-code language-java codeBlock_rtdJ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlo [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><span class="token tag namespace" style="color:#00009f;opacity:0.7">dubbo:</span><span class="token tag" style="color:#00009f">application</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><span class="token tag namespace" style="color:#00009f;opacity:0.7">dubbo:</span><span class="token tag" style="color:#00009f">service</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">timeout</span><span class="token tag attr-value punctuation attr-equals" s [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34"></</span><span class="token tag" style="color:#00009f">beans</span><span class="token tag punctuation" style="color:#393A34">></span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>Declare the application service name, register the center add [...]
@@ -94,36 +129,7 @@ By default, it will scan every 300 seconds after 30 seconds of startup.</p><p>Me
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> Map<String, String> parameters = new HashMap<>(2);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> parameters.put("dispatcher", "direct");</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> reference.setParameters(parameters);</span></span><span class="token-line" [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> String rpcExt = metaData.getRpcExt();//rpc ext param</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> DubboParam dubboParam = parserToDubboParam(rpcExt);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> if (Objects.nonNull(dubboParam)) {</span></span><span class="token-line" style="color:#393A3 [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public class RPCMessageWriter implements MessageWriter {</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public Mono<Void> writeWith(final ServerWebExchange exchange, final ShenyuPluginChain chain) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return chain.execute(exchange).then(Mono.defer(() -> {</span></span><span class="token-line" style="col [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * this is select one for upstream list.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param upstreamList upstream list</span></span><span class="token-line" style="c [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * url.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private String url;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="di [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * weight.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private final int weight;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * false close, true open.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private boolean status;</span></span><span class="token-line" style="color:#393A34"><span class= [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * startup time.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private final long timestamp;</span></span><span class="token-line" style="color:#393A34"><span class="tok [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * warmup.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private final int warmup;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * healthy.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private boolean healthy;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * lastHealthTimestamp.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private long lastHealthTimestamp;</span></span><span class="token-line" style="color:#393A34"><span [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * lastUnhealthyTimestamp.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private long lastUnhealthyTimestamp;</span></span><span class="token-line" style="color:#393A34" [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * group.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private String group;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * version.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private String version;</span></span><span class="token-line" style="color:#393A34"><span class="token plain">} [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
-</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="design-of-loadbalancer-module"></a>Design of LoadBalancer module<a class="hash-link" href="#design-of-loadbalancer-module" title="Direct link to heading">#</a></h2><p>The class diagram of <code>LoadBalancer</code> module<code>is</code>shown as follows.</p><p><img alt=" [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Random load balance enum.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> RANDOM(2, "random", true),</span></span><span class="token-line" style="color:#393A3 [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Round robin load balance enum.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> ROUND_ROBIN(3, "roundRobin", true);</span></span><span class="token-line" style [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private final int code;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private final String name;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private final boolean support;</span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span></code></pre><button type="button" ari [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public Upstream select(final List<Upstream> upstreamList, final String ip) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> if (CollectionUtils.isEmpty(upstreamList)) {</span></span><span class="token-line" style="color:#393A34"><span class="token [...]
-$$ {1-1}
-ww = min(1,uptime/(warmup/weight))
-$$
-It can be seen from the formula that the final weight(<code>ww</code>) is proportional to the original-<code>weight</code> value. The closer the time interval is to the <code>warmup</code> time, the greater the final <code>ww</code>. That is, the longer the waiting time of the request, the higher the final <code>weight</code>. When there is no <code>timestamp</code> or other conditions, the <code>ww</code> is equal to the <code>weight</code> value of <code>Upstream</code> object.</p><p>T [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private Upstream random(final int totalWeight, final int halfLengthTotalWeight, final int[] weights, final List<Upstream> upstreamList) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // If the weights are not the same and the weights are greater than 0, then random by the total number of weights.</span></span><span class="token-line" style="col [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public Upstream doSelect(final List<Upstream> upstreamList, final String ip) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> final ConcurrentSkipListMap<Long, Upstream> treeMap = new ConcurrentSkipListMap<>();</span></span><span class= [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private int weight;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private final AtomicLong current = new AtomicLong(0);</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private long lastUpdate;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> void setWeight(final int weight) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> this.weight = weight;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> current.set(0);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" style="col [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> void sel(final int total) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> current.addAndGet(-1 * total);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> void setLastUpdate(final long lastUpdate) {</span></span><span cla [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //calling the Utility class and invoke the LoadBalance processing.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> Upstream upstream = LoadBalancerFactory.selector(upstreamList, ruleHandle.getLoadBalance(), ip);</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p> [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public Mono<Void> writeWith(final ServerWebExchange exchange, final ShenyuPluginChain chain) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return chain.execute(exchange).then(Mono.defer(() -> {</span></span><span class="token-line" style="col [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // create SpringMvcClientEventListener to handle metadata and URI</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Bean</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public SpringMvcClientEventListener springHttpClientEventListener(final ShenyuClientConfig clientConfig,</span></span><span class="token-line" style= [...]
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p><code>ShenyuClientCommonBeanConfiguration</code> is a <code>shenyu</code> client common configuration class that will create the <code>bean</code> common to the registry client.</p><ul><li>Create <code>ShenyuClientRegisterRepository</code>, which is created by factory class.</li><li>Create <code>ShenyuRegisterCenterConfig</code>, which reads t [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">/**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Shenyu Client Common Bean Configuration</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain">@Configuration</span></span><span class="token-line" style="color:#393A34"><span class="token pl [...]
@@ -186,14 +192,7 @@ It can be seen from the formula that the final weight(<code>ww</code>) is propor
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public String register(final MetaDataRegisterDTO dto) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // 1.register selector information</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> String selectorHandler = selectorHandler(dto);</span></span><span class="token-line" style="color:#393A34"><span class="to [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //......</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public String registerURI(final String selectorName, final List<URIRegisterDTO> uriList) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> if (CollectionUtils.isEmpty(uriList)) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return "";</span></span><span class="token-line" style="color: [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Update records in the database</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> selectorService.updateSelective(selectorDO);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // publish Event to gateway</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> eventPub [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> Boolean match(List<ConditionData> conditionDataList, ServerWebExchange exchange);</span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>The annotation <code>@SPI</code> means that this is an <code>SPI</code> interfa [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private String paramType;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private String operator;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private String paramName;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private String paramValue;</span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h2><a aria-hidden="true" t [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public String buildRealData(final ConditionData condition, final ServerWebExchange exchange) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return ParameterDataFactory.builderData(condition.getParamType(), condition.getParamName(), exchange);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><spa [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public Boolean match(final List<ConditionData> conditionDataList, final ServerWebExchange exchange) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return conditionDataList</span></span><span class="token-line" style="color:#393A34"><span class="t [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * judge conditionData and realData is match.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param conditionData {@linkplain ConditionData}</span></span><span class="t [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain">contains=org.apache.shenyu.plugin.base.condition.judge.ContainsPredicateJudge</span></span><span class="token-line" style="color:#393A34"><span class="token plain">Groovy=org.apache.shenyu.plugin.base.condition.judge.GroovyPredicateJudge</span></span><span class="token-line" style="color:#393A34"><span class="token plain">match=org.apache.shenyu.plugin.base.condition.judge.MatchPredicateJudge</span></s [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Update records in the database</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> selectorService.updateSelective(selectorDO);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // publish Event to gateway</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> eventPub [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">ServiceLoader<Driver> loader = ServiceLoader.load(Driver.class)</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>The underlying implementation involves classloading, the parent delegate model, and so on, which I won't expand here. Based on this design idea, many mainstream frameworks self-impleme [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Value string.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @return the string</span></span><span class="token-line" style="color:#393A34"><span class="token plain" [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Indicates that the object joined by @Join is a singleton,</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * otherwise a completely new instance is created each time.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @r [...]
@@ -211,7 +210,7 @@ It can be seen from the formula that the final weight(<code>ww</code>) is propor
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Gets Extension.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param <T> the type parameter</span></span><span class="token-line" style="color:#393A34"><spa [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public <T> T getExtension(final String key, final Class<T> clazz) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return Optional.ofNullable(clazz) // 入参clazz非空</span></span><span class="token-line" style="color:#393A34"><span class="token [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"># then load it with ExtensionLoader</span></span><span class="token-line" style="color:#393A34"><span class="token plain">ExtensionFactory extensionFactory = ExtensionLoader.getExtensionLoader(ExtensionFactory.class).getDefaultJoin();</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>Once you have an 'E [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/rss.xml b/blog/rss.xml
index ed0315ce4d..e5212a1cb2 100644
--- a/blog/rss.xml
+++ b/blog/rss.xml
@@ -4,141 +4,141 @@
<title>Apache ShenYu Blog</title>
<link>https://shenyu.apache.org/blog</link>
<description>Apache ShenYu Blog</description>
- <lastBuildDate>Mon, 05 Feb 2024 10:14:12 GMT</lastBuildDate>
+ <lastBuildDate>Tue, 06 Feb 2024 08:47:38 GMT</lastBuildDate>
<docs>https://validator.w3.org/feed/docs/rss2.html</docs>
<generator>https://github.com/jpmonette/feed</generator>
<item>
- <title><![CDATA[Apache ShenYu Start Demo]]></title>
- <link>https://shenyu.apache.org/blog/Start-SourceCode-Analysis-Start-Demo</link>
- <guid>Apache ShenYu Start Demo</guid>
- <pubDate>Mon, 05 Feb 2024 10:14:12 GMT</pubDate>
- <description><![CDATA[Environmental preparation]]></description>
+ <title><![CDATA[LoadBalancer SPI Source Code Analysis]]></title>
+ <link>https://shenyu.apache.org/blog/SPI-SourceCode-Analysis-LoadBalance-SPI</link>
+ <guid>LoadBalancer SPI Source Code Analysis</guid>
+ <pubDate>Tue, 06 Feb 2024 08:47:38 GMT</pubDate>
+ <description><![CDATA[Gateway applications need to support a variety of load balancing strategies, including random,Hashing, RoundRobin and so on. In Apache Shenyu gateway, it not only realizes such traditional algorithms, but also makes smoother traffic processing for the entry of server nodes through detailed processing such as traffic warm-up, so as to obtain better overall stability. In this article, let's walk through how Apache Shenyu is designed and implemented this p [...]
+ </item>
+ <item>
+ <title><![CDATA[MatchStrategy -- analyze the design based on SPI]]></title>
+ <link>https://shenyu.apache.org/blog/SPI-SourceCode-Analysis-MatchStrategy-SPI</link>
+ <guid>MatchStrategy -- analyze the design based on SPI</guid>
+ <pubDate>Tue, 06 Feb 2024 08:47:38 GMT</pubDate>
+ <description><![CDATA[In most of the plugins ( such as Dubbo, gRPC,Spring-cloud, etc) of Apache Shenyu, the routingparameters are designed to support the combination of multiple conditions. In order to realize such requirements, the parameters and behaviors are abstracted to three parts according to its SPI mechanism, and implemented in shenyu-plugin-base module.]]></description>
</item>
<item>
<title><![CDATA[RateLimiter SPI code analysis]]></title>
<link>https://shenyu.apache.org/blog/SPI-SourceCode-Analysis-RateLimiter-SPI</link>
<guid>RateLimiter SPI code analysis</guid>
- <pubDate>Mon, 05 Feb 2024 10:14:12 GMT</pubDate>
+ <pubDate>Tue, 06 Feb 2024 08:47:38 GMT</pubDate>
<description><![CDATA[Rate limiter is a very important integral of gateway application, to deal with high traffic. When the system is attacked abnormally by a large number of traffic gathered in a short time; When there are a large number of lower priority request need to be slow down or else it will effect your high priority transactions; Or sometimes your system can not afford the regular traffic; in these scenarios, we need to start rate limiter component to protec [...]
</item>
+ <item>
+ <title><![CDATA[PredicateJudge -- analyze the design based on SPI]]></title>
+ <link>https://shenyu.apache.org/blog/SPI-SourceCode-Analysis-PredicateJudge-SPI</link>
+ <guid>PredicateJudge -- analyze the design based on SPI</guid>
+ <pubDate>Tue, 06 Feb 2024 08:47:38 GMT</pubDate>
+ <description><![CDATA[Apache Shenyu has been identified as a gateway application which supports a variety of protocols and microservice frameworks such as Dubbo, gRPC, Spring-Cloud, etc. To do this, the product has accomplished an elegant SPI (Service Provider Interface) as its foundation, and make the Rule data parsing and predicting program very simple , resiliency and security. As to rule data parsing processing, the SPI design increases the product's scalability. Whe [...]
+ </item>
<item>
<title><![CDATA[Guide for New Contributors to Start avoid Pitfalls]]></title>
<link>https://shenyu.apache.org/blog/Start-SourceCode-Analysis-Start-Demo-for-Contributor</link>
<guid>Guide for New Contributors to Start avoid Pitfalls</guid>
- <pubDate>Mon, 05 Feb 2024 10:14:12 GMT</pubDate>
+ <pubDate>Tue, 06 Feb 2024 08:47:38 GMT</pubDate>
<description><![CDATA[Preface]]></description>
</item>
<item>
- <title><![CDATA[Nacos Data Synchronization Source Code Analysis]]></title>
- <link>https://shenyu.apache.org/blog/DataSync-SourceCode-Analysis-Nacos-Data-Sync</link>
- <guid>Nacos Data Synchronization Source Code Analysis</guid>
- <pubDate>Mon, 05 Feb 2024 10:14:12 GMT</pubDate>
- <description><![CDATA[Apache ShenYu is an asynchronous, high-performance, cross-language, responsive API gateway.]]></description>
- </item>
- <item>
- <title><![CDATA[E2e Test Analysis]]></title>
- <link>https://shenyu.apache.org/blog/E2eTest-Analysis</link>
- <guid>E2e Test Analysis</guid>
- <pubDate>Mon, 05 Feb 2024 10:14:12 GMT</pubDate>
- <description><![CDATA[This article will conduct an in-depth analysis of Apache ShenYu e2e module.]]></description>
+ <title><![CDATA[Apache ShenYu Start Demo]]></title>
+ <link>https://shenyu.apache.org/blog/Start-SourceCode-Analysis-Start-Demo</link>
+ <guid>Apache ShenYu Start Demo</guid>
+ <pubDate>Tue, 06 Feb 2024 08:47:38 GMT</pubDate>
+ <description><![CDATA[Environmental preparation]]></description>
</item>
<item>
<title><![CDATA[Http Long Polling Data Synchronization Source Code Analysis]]></title>
<link>https://shenyu.apache.org/blog/DataSync-SourceCode-Analysis-Http-Data-Sync</link>
<guid>Http Long Polling Data Synchronization Source Code Analysis</guid>
- <pubDate>Mon, 05 Feb 2024 10:14:12 GMT</pubDate>
+ <pubDate>Tue, 06 Feb 2024 08:47:38 GMT</pubDate>
<description><![CDATA[Apache ShenYu is an asynchronous, high-performance, cross-language, responsive API gateway.]]></description>
</item>
<item>
- <title><![CDATA[Etcd Data Synchronization Source Code Analysis]]></title>
- <link>https://shenyu.apache.org/blog/DataSync-SourceCode-Analysis-Etcd-Data-Sync</link>
- <guid>Etcd Data Synchronization Source Code Analysis</guid>
- <pubDate>Mon, 05 Feb 2024 10:14:12 GMT</pubDate>
+ <title><![CDATA[Nacos Data Synchronization Source Code Analysis]]></title>
+ <link>https://shenyu.apache.org/blog/DataSync-SourceCode-Analysis-Nacos-Data-Sync</link>
+ <guid>Nacos Data Synchronization Source Code Analysis</guid>
+ <pubDate>Tue, 06 Feb 2024 08:47:38 GMT</pubDate>
<description><![CDATA[Apache ShenYu is an asynchronous, high-performance, cross-language, responsive API gateway.]]></description>
</item>
- <item>
- <title><![CDATA[Integration Test Analysis]]></title>
- <link>https://shenyu.apache.org/blog/IntegrationTest-Analysis</link>
- <guid>Integration Test Analysis</guid>
- <pubDate>Mon, 05 Feb 2024 10:14:12 GMT</pubDate>
- <description><![CDATA[This article will provide an in-depth analysis of Apache ShenYu's integration tests.]]></description>
- </item>
<item>
<title><![CDATA[WebSocket Data Synchronization Source Code Analysis]]></title>
<link>https://shenyu.apache.org/blog/DataSync-SourceCode-Analysis-WebSocket-Data-Sync</link>
<guid>WebSocket Data Synchronization Source Code Analysis</guid>
- <pubDate>Mon, 05 Feb 2024 10:14:12 GMT</pubDate>
+ <pubDate>Tue, 06 Feb 2024 08:47:38 GMT</pubDate>
<description><![CDATA[In ShenYu gateway, data synchronization refers to how to synchronize the updated data to the gateway after the data is sent in the background management system. The Apache ShenYu gateway currently supports data synchronization for ZooKeeper, WebSocket, http long poll, Nacos, etcd and Consul. The main content of this article is based on WebSocket data synchronization source code analysis.]]></description>
</item>
<item>
- <title><![CDATA[Extension plugin loading logic]]></title>
- <link>https://shenyu.apache.org/blog/Loader-SourceCode-Analysis-ExtLoader</link>
- <guid>Extension plugin loading logic</guid>
- <pubDate>Mon, 05 Feb 2024 10:14:12 GMT</pubDate>
- <description><![CDATA[This article is based on the source code analysis of version 'shenyu-2.6.1']]></description>
+ <title><![CDATA[Etcd Data Synchronization Source Code Analysis]]></title>
+ <link>https://shenyu.apache.org/blog/DataSync-SourceCode-Analysis-Etcd-Data-Sync</link>
+ <guid>Etcd Data Synchronization Source Code Analysis</guid>
+ <pubDate>Tue, 06 Feb 2024 08:47:38 GMT</pubDate>
+ <description><![CDATA[Apache ShenYu is an asynchronous, high-performance, cross-language, responsive API gateway.]]></description>
+ </item>
+ <item>
+ <title><![CDATA[E2e Test Analysis]]></title>
+ <link>https://shenyu.apache.org/blog/E2eTest-Analysis</link>
+ <guid>E2e Test Analysis</guid>
+ <pubDate>Tue, 06 Feb 2024 08:47:38 GMT</pubDate>
+ <description><![CDATA[This article will conduct an in-depth analysis of Apache ShenYu e2e module.]]></description>
</item>
<item>
<title><![CDATA[ZooKeeper Data Synchronization Source Code Analysis]]></title>
<link>https://shenyu.apache.org/blog/DataSync-SourceCode-Analysis-ZooKeeper-Data-Sync</link>
<guid>ZooKeeper Data Synchronization Source Code Analysis</guid>
- <pubDate>Mon, 05 Feb 2024 10:14:12 GMT</pubDate>
+ <pubDate>Tue, 06 Feb 2024 08:47:38 GMT</pubDate>
<description><![CDATA[Apache ShenYu is an asynchronous, high-performance, cross-language, responsive API gateway.]]></description>
</item>
<item>
- <title><![CDATA[Code Analysis For Context-Path Plugin]]></title>
- <link>https://shenyu.apache.org/blog/Plugin-SourceCode-Analysis-Context-Path-Plugin</link>
- <guid>Code Analysis For Context-Path Plugin</guid>
- <pubDate>Mon, 05 Feb 2024 10:14:12 GMT</pubDate>
- <description><![CDATA[Before starting, you can refer to this article to start the gateway]]></description>
+ <title><![CDATA[Integration Test Analysis]]></title>
+ <link>https://shenyu.apache.org/blog/IntegrationTest-Analysis</link>
+ <guid>Integration Test Analysis</guid>
+ <pubDate>Tue, 06 Feb 2024 08:47:38 GMT</pubDate>
+ <description><![CDATA[This article will provide an in-depth analysis of Apache ShenYu's integration tests.]]></description>
+ </item>
+ <item>
+ <title><![CDATA[Extension plugin loading logic]]></title>
+ <link>https://shenyu.apache.org/blog/Loader-SourceCode-Analysis-ExtLoader</link>
+ <guid>Extension plugin loading logic</guid>
+ <pubDate>Tue, 06 Feb 2024 08:47:38 GMT</pubDate>
+ <description><![CDATA[This article is based on the source code analysis of version 'shenyu-2.6.1']]></description>
</item>
<item>
<title><![CDATA[Code Analysis For Divide Plugin]]></title>
<link>https://shenyu.apache.org/blog/Plugin-SourceCode-Analysis-Divide-Plugin</link>
<guid>Code Analysis For Divide Plugin</guid>
- <pubDate>Mon, 05 Feb 2024 10:14:12 GMT</pubDate>
+ <pubDate>Tue, 06 Feb 2024 08:47:38 GMT</pubDate>
<description><![CDATA[The ShenYu gateway uses the divide plugin to handle http requests. You can see the official documentation Quick start with Http to learn how to use this plugin.]]></description>
</item>
<item>
<title><![CDATA[Code Analysis For Param-Mapping Plugin]]></title>
<link>https://shenyu.apache.org/blog/Plugin-SourceCode-Analysis-Param-Mapping-Plugin</link>
<guid>Code Analysis For Param-Mapping Plugin</guid>
- <pubDate>Mon, 05 Feb 2024 10:14:12 GMT</pubDate>
+ <pubDate>Tue, 06 Feb 2024 08:47:38 GMT</pubDate>
<description><![CDATA[Before starting, you can refer to this article to start the gateway]]></description>
</item>
<item>
- <title><![CDATA[Code Analysis For Dubbo Plugin]]></title>
- <link>https://shenyu.apache.org/blog/Plugin-SourceCode-Analysis-Dubbo-Plugin</link>
- <guid>Code Analysis For Dubbo Plugin</guid>
- <pubDate>Mon, 05 Feb 2024 10:14:12 GMT</pubDate>
- <description><![CDATA[Apache ShenYu is an asynchronous, high-performance, cross-language, responsive API gateway.]]></description>
- </item>
- <item>
- <title><![CDATA[MatchStrategy -- analyze the design based on SPI]]></title>
- <link>https://shenyu.apache.org/blog/SPI-SourceCode-Analysis-MatchStrategy-SPI</link>
- <guid>MatchStrategy -- analyze the design based on SPI</guid>
- <pubDate>Mon, 05 Feb 2024 10:14:12 GMT</pubDate>
- <description><![CDATA[In most of the plugins ( such as Dubbo, gRPC,Spring-cloud, etc) of Apache Shenyu, the routingparameters are designed to support the combination of multiple conditions. In order to realize such requirements, the parameters and behaviors are abstracted to three parts according to its SPI mechanism, and implemented in shenyu-plugin-base module.]]></description>
+ <title><![CDATA[Code Analysis For Context-Path Plugin]]></title>
+ <link>https://shenyu.apache.org/blog/Plugin-SourceCode-Analysis-Context-Path-Plugin</link>
+ <guid>Code Analysis For Context-Path Plugin</guid>
+ <pubDate>Tue, 06 Feb 2024 08:47:38 GMT</pubDate>
+ <description><![CDATA[Before starting, you can refer to this article to start the gateway]]></description>
</item>
<item>
<title><![CDATA[Register Center Source Code Analysis of Http Register]]></title>
<link>https://shenyu.apache.org/blog/RegisterCenter-SourceCode-Analysis-Http-Register</link>
<guid>Register Center Source Code Analysis of Http Register</guid>
- <pubDate>Mon, 05 Feb 2024 10:14:12 GMT</pubDate>
+ <pubDate>Tue, 06 Feb 2024 08:47:38 GMT</pubDate>
<description><![CDATA[Apache ShenYu is an asynchronous, high-performance, cross-language, responsive API gateway.]]></description>
</item>
<item>
- <title><![CDATA[PredicateJudge -- analyze the design based on SPI]]></title>
- <link>https://shenyu.apache.org/blog/SPI-SourceCode-Analysis-PredicateJudge-SPI</link>
- <guid>PredicateJudge -- analyze the design based on SPI</guid>
- <pubDate>Mon, 05 Feb 2024 10:14:12 GMT</pubDate>
- <description><![CDATA[Apache Shenyu has been identified as a gateway application which supports a variety of protocols and microservice frameworks such as Dubbo, gRPC, Spring-Cloud, etc. To do this, the product has accomplished an elegant SPI (Service Provider Interface) as its foundation, and make the Rule data parsing and predicting program very simple , resiliency and security. As to rule data parsing processing, the SPI design increases the product's scalability. Whe [...]
- </item>
- <item>
- <title><![CDATA[LoadBalancer SPI Source Code Analysis]]></title>
- <link>https://shenyu.apache.org/blog/SPI-SourceCode-Analysis-LoadBalance-SPI</link>
- <guid>LoadBalancer SPI Source Code Analysis</guid>
- <pubDate>Mon, 05 Feb 2024 10:14:12 GMT</pubDate>
- <description><![CDATA[Gateway applications need to support a variety of load balancing strategies, including random,Hashing, RoundRobin and so on. In Apache Shenyu gateway, it not only realizes such traditional algorithms, but also makes smoother traffic processing for the entry of server nodes through detailed processing such as traffic warm-up, so as to obtain better overall stability. In this article, let's walk through how Apache Shenyu is designed and implemented this p [...]
+ <title><![CDATA[Code Analysis For Dubbo Plugin]]></title>
+ <link>https://shenyu.apache.org/blog/Plugin-SourceCode-Analysis-Dubbo-Plugin</link>
+ <guid>Code Analysis For Dubbo Plugin</guid>
+ <pubDate>Tue, 06 Feb 2024 08:47:38 GMT</pubDate>
+ <description><![CDATA[Apache ShenYu is an asynchronous, high-performance, cross-language, responsive API gateway.]]></description>
</item>
<item>
<title><![CDATA[SPI Source Code Analysis]]></title>
diff --git a/blog/tags/apache-shen-yu/index.html b/blog/tags/apache-shen-yu/index.html
index 03a7530686..a2c14f9750 100644
--- a/blog/tags/apache-shen-yu/index.html
+++ b/blog/tags/apache-shen-yu/index.html
@@ -9,12 +9,53 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">20 posts tagged with "apache shenyu" | Apache ShenYu</title><meta data-react-helmet="true" property="og:title" content="20 posts tagged with "apache shenyu" | Apache ShenYu"><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//blog/tags/apache-shen-yu"><meta data-react-helmet="true" name="docsearch [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
+<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> Boolean match(List<ConditionData> conditionDataList, ServerWebExchange exchange);</span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>The annotation <code>@SPI</code> means that this is an <code>SPI</code> interfa [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private String paramType;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private String operator;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private String paramName;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private String paramValue;</span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h2><a aria-hidden="true" t [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public String buildRealData(final ConditionData condition, final ServerWebExchange exchange) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return ParameterDataFactory.builderData(condition.getParamType(), condition.getParamName(), exchange);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><spa [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public Boolean match(final List<ConditionData> conditionDataList, final ServerWebExchange exchange) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return conditionDataList</span></span><span class="token-line" style="color:#393A34"><span class="t [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * this is select one for upstream list.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param upstreamList upstream list</span></span><span class="token-line" style="c [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * url.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private String url;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="di [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * weight.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private final int weight;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * false close, true open.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private boolean status;</span></span><span class="token-line" style="color:#393A34"><span class= [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * startup time.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private final long timestamp;</span></span><span class="token-line" style="color:#393A34"><span class="tok [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * warmup.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private final int warmup;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * healthy.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private boolean healthy;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * lastHealthTimestamp.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private long lastHealthTimestamp;</span></span><span class="token-line" style="color:#393A34"><span [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * lastUnhealthyTimestamp.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private long lastUnhealthyTimestamp;</span></span><span class="token-line" style="color:#393A34" [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * group.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private String group;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * version.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private String version;</span></span><span class="token-line" style="color:#393A34"><span class="token plain">} [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
+</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="design-of-loadbalancer-module"></a>Design of LoadBalancer module<a class="hash-link" href="#design-of-loadbalancer-module" title="Direct link to heading">#</a></h2><p>The class diagram of <code>LoadBalancer</code> module<code>is</code>shown as follows.</p><p><img alt=" [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Random load balance enum.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> RANDOM(2, "random", true),</span></span><span class="token-line" style="color:#393A3 [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Round robin load balance enum.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> ROUND_ROBIN(3, "roundRobin", true);</span></span><span class="token-line" style [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private final int code;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private final String name;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private final boolean support;</span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span></code></pre><button type="button" ari [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public Upstream select(final List<Upstream> upstreamList, final String ip) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> if (CollectionUtils.isEmpty(upstreamList)) {</span></span><span class="token-line" style="color:#393A34"><span class="token [...]
+$$ {1-1}
+ww = min(1,uptime/(warmup/weight))
+$$
+It can be seen from the formula that the final weight(<code>ww</code>) is proportional to the original-<code>weight</code> value. The closer the time interval is to the <code>warmup</code> time, the greater the final <code>ww</code>. That is, the longer the waiting time of the request, the higher the final <code>weight</code>. When there is no <code>timestamp</code> or other conditions, the <code>ww</code> is equal to the <code>weight</code> value of <code>Upstream</code> object.</p><p>T [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private Upstream random(final int totalWeight, final int halfLengthTotalWeight, final int[] weights, final List<Upstream> upstreamList) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // If the weights are not the same and the weights are greater than 0, then random by the total number of weights.</span></span><span class="token-line" style="col [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public Upstream doSelect(final List<Upstream> upstreamList, final String ip) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> final ConcurrentSkipListMap<Long, Upstream> treeMap = new ConcurrentSkipListMap<>();</span></span><span class= [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private int weight;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private final AtomicLong current = new AtomicLong(0);</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private long lastUpdate;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> void setWeight(final int weight) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> this.weight = weight;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> current.set(0);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" style="col [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> void sel(final int total) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> current.addAndGet(-1 * total);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> void setLastUpdate(final long lastUpdate) {</span></span><span cla [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //calling the Utility class and invoke the LoadBalance processing.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> Upstream upstream = LoadBalancerFactory.selector(upstreamList, ruleHandle.getLoadBalance(), ip);</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p> [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * judge conditionData and realData is match.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param conditionData {@linkplain ConditionData}</span></span><span class="t [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">contains=org.apache.shenyu.plugin.base.condition.judge.ContainsPredicateJudge</span></span><span class="token-line" style="color:#393A34"><span class="token plain">Groovy=org.apache.shenyu.plugin.base.condition.judge.GroovyPredicateJudge</span></span><span class="token-line" style="color:#393A34"><span class="token plain">match=org.apache.shenyu.plugin.base.condition.judge.MatchPredicateJudge</span></s [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><span class="token tag" style="color:#00009f">mirror</span><span class="token tag punctuation" style="color:#393A34">></span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><spa [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><span class="token tag" style="color:#00009f">mirror</span><span class="token tag punctuation" style="color:#393A34">></span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><spa [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><span class="token tag" style="color:#00009f">mirror</span><span class="token tag punctuation" style="color:#393A34">></span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><spa [...]
+If the shenyu-e2e build fails, then add the <code><relativePath>. /pom.xml</relativePath></code> to <code><relativePath/></code>.</p></li></ol><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="start-gateway-service"></a>Start Gateway Service<a class="hash-link" href="#start-gateway-service" title="Direct link to heading">#</a></h4><ol><li><p>Start the <code>shenyu-admin</code> console (H2 database is used by default)</p><img src="/img/activi [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">C:</span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain">Users</span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain">pc</span><span class="token operator" style="color:#393A34">></span><span class="token plain">npm -v</span></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * get Key resolver's name.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @return Key resolver's name</span></span><span class="token-line" style="color:#393 [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * resolve.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param exchange exchange the current server exchange {@linkplain ServerWebExchange}</span></span><span class= [...]
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p><code>@SPI</code> registers the current interface as Apache Shenyu SPI. Method <code>resolve(ServerWebExchange exchange)</code> is used to provide the resolution way. Currently there are two key resolvers in <code>RateLimiterKeyResolver</code> <code>SPI</code>:<code>WholeKeyResolve</code> and <code>RemoteAddrKeyResolver</code>. The res [...]
@@ -22,12 +63,7 @@
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">if count < capacity then</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> redis.call("zadd", key, timestamp, id)</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> allowed = 1</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> count = count + 1</span></span><span class="token-li [...]
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>The filled_tokens is produced evenly by time interval * rate,if the number of tokens greater than requests, then allowed=1, and update new_tokens.</p><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI lua"><pre tabindex="0" class="prism-code language-lua codeBlock_rtdJ thin-scrollbar" style="color:#393A34;background-color [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">return { allowed_num, new_tokens }</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>Here <code>now</code> is current time parameters passed in, set <code>tokens_key</code> to hold the string <code>new_tokens</code> and set<code>tokens_key</code> to timeout after <code>ttl</code> of seconds. Set <code>ti [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain">return { allowed_num, remain_request }</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>Previously has set <code>window_time</code>=1, using <code>zremrangebyscore</code> command of Redis to remove all the elements in the sorted set stored at <code>tokens_key</code> with a score in [0,now - window_size / w [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><span class="token tag" style="color:#00009f">mirror</span><span class="token tag punctuation" style="color:#393A34">></span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><spa [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><span class="token tag" style="color:#00009f">mirror</span><span class="token tag punctuation" style="color:#393A34">></span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><spa [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><span class="token tag" style="color:#00009f">mirror</span><span class="token tag punctuation" style="color:#393A34">></span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><spa [...]
-If the shenyu-e2e build fails, then add the <code><relativePath>. /pom.xml</relativePath></code> to <code><relativePath/></code>.</p></li></ol><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="start-gateway-service"></a>Start Gateway Service<a class="hash-link" href="#start-gateway-service" title="Direct link to heading">#</a></h4><ol><li><p>Start the <code>shenyu-admin</code> console (H2 database is used by default)</p><img src="/img/activi [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain">C:</span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain">Users</span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain">pc</span><span class="token operator" style="color:#393A34">></span><span class="token plain">npm -v</span></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">return { allowed_num, remain_request }</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>Previously has set <code>window_time</code>=1, using <code>zremrangebyscore</code> command of Redis to remove all the elements in the sorted set stored at <code>tokens_key</code> with a score in [0,now - window_size / w [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> } else {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // update data, delete and then insert</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> selectorCount = selectorMapper.updateSelective(selectorDO);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // update upstream</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> updateDivideUpstream(selectorDO);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return selectorCount;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" styl [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //......</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_W [...]
@@ -53,7 +89,7 @@ If the shenyu-e2e build fails, then add the <code><relativePath>. /pom.xml
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private void watcherPlugin(final String pluginName) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> String pluginPath = DefaultPathConstants.buildPluginPath(pluginName);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> cachePluginData(etcdClient.get(pluginPath));</span></span><span class="token-line" style= [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private void cachePluginData(final String dataString) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> final PluginData pluginData = GsonUtils.getInstance().fromJson(dataString, PluginData.class);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> Optional.ofNullable(pluginData)</span></span><span class="token [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private void subscribePluginDataChanges(final String pluginPath, final String pluginName) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> etcdClient.watchDataChange(pluginPath, (updatePath, updateValue) -> {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> final String dataPath = buildRealPath(pluginPath, upda [...]
-</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>The above source code is given comments, I believe you can understand. The main logic for subscribing to plug-in data is as follows:</p><blockquote><ol><li>Create the current plugin path</li><li>Read the current node data on etcd and deserialize it</li><li>The plugin data is cached in the gateway memory</li><li>Subscribe to the plug-in node</l [...]
+</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>The above source code is given comments, I believe you can understand. The main logic for subscribing to plug-in data is as follows:</p><blockquote><ol><li>Create the current plugin path</li><li>Read the current node data on etcd and deserialize it</li><li>The plugin data is cached in the gateway memory</li><li>Subscribe to the plug-in node</l [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">/**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Http sync data configuration for spring boot.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain">@Configuration</span></span><span class="token-line" style="color:#393A34"><span class="to [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private static final Logger LOGGER = LoggerFactory.getLogger(HttpSyncDataConfiguration.class);</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Rest template.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param httpConfig the http config</span></span><span class="token-line" style="color:#393A34"><span cla [...]
@@ -125,48 +161,7 @@ If the gateway layer is not processed in time, or the administrator updates the
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">/**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Event forwarders, which forward the changed events to each ConfigEventListener.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Data change event distributor: synchronize the change data to ShenYu gateway when there is a data change in admin side</span></span><span class [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // other logic omitted</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Call this method when there are data changes</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param event</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34" [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private void doRun(final Collection<LongPollingClient> clients) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Notify all clients that a data change has occurred</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> for (Iterator<LongPollingClient> iter = clients.iterator(); iter.hasN [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> } else {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // update data, delete and then insert</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> selectorCount = selectorMapper.updateSelective(selectorDO);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // update upstream</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> updateDivideUpstream(selectorDO);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return selectorCount;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" styl [...]
-</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>In the <code>Service</code> class to persist data, i.e. to the database, this should be familiar, not expand. The update upstream operation is analyzed in the corresponding section below, focusing on the publish event operation, which performs data synchronization.</p><p>The logic of the <code>publishEvent()</code> method is to find the plugi [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //......</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_W [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * This method is called when there are data changes</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param event</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34 [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Config event listener data changed listener.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @return the data changed listener</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span cla [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Websocket collector.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Websocket collector class: establish a connection, send a message, close the connection and other operations</span></span><span class="token-line" style="color:#393A34"><span cla [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Server endpoint exporter </span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @return the server endpoint exporter</span></span><span class="token-line" s [...]
-</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>This configuration class is implemented through the <code>SpringBoot</code> conditional assembly class. The <code>WebsocketListener</code> class has several annotations:</p><ul><li><p><code>@Configuration</code>: Configuration file, application context;</p></li><li><p><code>@ConditionalOnProperty(name = "shenyu.sync.websocket.enabled" [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private static void sendMessageBySession(final Session session, final String message) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> try {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // The message is sent through the Websocket session</span></span><span class="token-line" style="color:#393A34"><s [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // handle data</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> websocketDataHandler.executor(groupEnum, json, eventType);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span></code></pre><button type="button" a [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain">/**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Create Websocket data handlers through factory mode</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * The type Websocket cache handler.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="co [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private static final EnumMap<ConfigGroupEnum, DataHandler> ENUM_MAP = new EnumMap<>(ConfigGroupEnum.class);</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Instantiates a new Websocket data handler.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param pluginDataSubscriber the plugin data subscriber</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param metaDataSubsc [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Executor.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param type the type</span></span><span class="token-line" style="color:#393A34"><span class="token pla [...]
-</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>Different data types have different ways of handling data, so there are different implementation classes. But they also have the same processing logic between them, so they can be implemented through the template approach to design patterns. The same logic is placed in the <code>handle()</code> method of the abstract class, and the different l [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public abstract class AbstractDataHandler<T> implements DataHandler {</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Convert list.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * The different logic is implemented by the respective implementation classes</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param json the json</span>< [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Do refresh.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * The different logic is implemented by the respective implementation classes</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param dataList the data list< [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Do update.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * The different logic is implemented by the respective implementation classes</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param dataList the data list</ [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Do delete.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * The different logic is implemented by the respective implementation classes</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param dataList the data list</ [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // General purpose logic, abstract class implementation</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public void handle(final String json, final String eventType) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain">/**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * The type Selector data handler.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain">@RequiredArgsConstructor</span></span><span class="token-line" style="color:#393A34"><span class="token [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private final PluginDataSubscriber pluginDataSubscriber;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //......</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // update data</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> protected void doUpdate(final List<SelectorData> dataList) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> dataList.forEach(pluginDataSubscrib [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain">/**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * WebsocketSyncDataService</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Conditional injection is implemented through SpringBoot</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Websocket sync data configuration for spring boot.</s [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Websocket sync data service.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param websocketConfig the websocket config</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param pluginSubscriber the plugin subscrib [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Config websocket config.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @return the websocket config</span></span><span class="token-line" style="color:#393A34"><spa [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain">/**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Websocket sync data service.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain">@Slf4j</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public class W [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private final List<WebSocketClient> clients = new ArrayList<>();</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private final ScheduledThreadPoolExecutor executor;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Instantiates a new Websocket sync cache.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param websocketConfig the websocket config</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param pluginDataSubscriber [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Run a scheduled task every 10 seconds</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // The main function is to check whether the WebSocket connection is disconnected. If the connection is disconnected, retry the connection.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // I [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public void close() {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // close websocket client</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> for (WebSocketClient client : clients) {</span></span><span class [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain">/**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * The type shenyu websocket client.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain">@Slf4j</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public fi [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Execute after the connection is successfully established</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public void onOpen(final ServerHandshake serverHandshake) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Execute after receiving the message</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public void onMessage(final String result) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // handle data</span></span><span [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // handle data</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> websocketDataHandler.executor(groupEnum, json, eventType);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span><span class="token-line" style="colo [...]
-</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="5-summary"></a>5. Summary<a class="hash-link" href="#5-summary" title="Direct link to heading">#</a></h3><p>This paper through a practical case, the data synchronization principle of websocket source code analysis. The main knowledge points involved are as follows:</p> [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private void doRun(final Collection<LongPollingClient> clients) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Notify all clients that a data change has occurred</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> for (Iterator<LongPollingClient> iter = clients.iterator(); iter.hasN [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> } else {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // update data, delete and then insert</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> selectorCount = selectorMapper.updateSelective(selectorDO);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // update upstream</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> updateDivideUpstream(selectorDO);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return selectorCount;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" styl [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //......</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_W [...]
@@ -219,11 +214,48 @@ If the gateway layer is not processed in time, or the administrator updates the
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private final SyncDataService syncDataService;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Instantiates a new Nacos data init.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param configService the nacos config service</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param syncDataService the sync data [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public void run(final String... args) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> String pluginDataId = NacosPathConstants.PLUGIN_DATA_ID;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> String authDataI [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private boolean dataIdNotExist(final String pluginDataId) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> try {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> String group = NacosPathConstants.GROUP;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> long [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">on</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">pull_request</span><span class="token punctuation" style="color:#393A34">:</span><span class="token [...]
-</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>@ShenYuTest is extended through the ShenYuExtension class, and the configuration of admin and gateway takes effect in beforeAll in ShenYuExtension. The specific effective logic is implemented in the DockerServiceCompose class.</p><p><img alt="e2e-shenyutest" src="/assets/images/e2e-shenyutest-8ea26c9ea373d2c182be8d19c53cb021.png"></p><p><img a [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> MultiValueMap<String, String> formData = new LinkedMultiValueMap<>();</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> formData.add("id", "8");</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> formData.add("name", "springCloud");</span></span><span class= [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private ShenYuScenarioSpec testWithUriEquals() {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return ShenYuScenarioSpec.builder()</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> .name("single-spring-cloud uri =]")</span></span><span class="token-line" style="color:#393A34"><span class="t [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private boolean dataIdNotExist(final String pluginDataId) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> try {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> String group = NacosPathConstants.GROUP;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> long [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> } else {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // update data, delete and then insert</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> selectorCount = selectorMapper.updateSelective(selectorDO);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // update upstream</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> updateDivideUpstream(selectorDO);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return selectorCount;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" styl [...]
+</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>In the <code>Service</code> class to persist data, i.e. to the database, this should be familiar, not expand. The update upstream operation is analyzed in the corresponding section below, focusing on the publish event operation, which performs data synchronization.</p><p>The logic of the <code>publishEvent()</code> method is to find the plugi [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //......</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_W [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * This method is called when there are data changes</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param event</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34 [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Config event listener data changed listener.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @return the data changed listener</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span cla [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Websocket collector.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Websocket collector class: establish a connection, send a message, close the connection and other operations</span></span><span class="token-line" style="color:#393A34"><span cla [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Server endpoint exporter </span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @return the server endpoint exporter</span></span><span class="token-line" s [...]
+</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>This configuration class is implemented through the <code>SpringBoot</code> conditional assembly class. The <code>WebsocketListener</code> class has several annotations:</p><ul><li><p><code>@Configuration</code>: Configuration file, application context;</p></li><li><p><code>@ConditionalOnProperty(name = "shenyu.sync.websocket.enabled" [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private static void sendMessageBySession(final Session session, final String message) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> try {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // The message is sent through the Websocket session</span></span><span class="token-line" style="color:#393A34"><s [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // handle data</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> websocketDataHandler.executor(groupEnum, json, eventType);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span></code></pre><button type="button" a [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">/**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Create Websocket data handlers through factory mode</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * The type Websocket cache handler.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="co [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private static final EnumMap<ConfigGroupEnum, DataHandler> ENUM_MAP = new EnumMap<>(ConfigGroupEnum.class);</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Instantiates a new Websocket data handler.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param pluginDataSubscriber the plugin data subscriber</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param metaDataSubsc [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Executor.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param type the type</span></span><span class="token-line" style="color:#393A34"><span class="token pla [...]
+</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>Different data types have different ways of handling data, so there are different implementation classes. But they also have the same processing logic between them, so they can be implemented through the template approach to design patterns. The same logic is placed in the <code>handle()</code> method of the abstract class, and the different l [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public abstract class AbstractDataHandler<T> implements DataHandler {</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Convert list.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * The different logic is implemented by the respective implementation classes</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param json the json</span>< [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Do refresh.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * The different logic is implemented by the respective implementation classes</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param dataList the data list< [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Do update.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * The different logic is implemented by the respective implementation classes</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param dataList the data list</ [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Do delete.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * The different logic is implemented by the respective implementation classes</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param dataList the data list</ [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // General purpose logic, abstract class implementation</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public void handle(final String json, final String eventType) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">/**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * The type Selector data handler.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain">@RequiredArgsConstructor</span></span><span class="token-line" style="color:#393A34"><span class="token [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private final PluginDataSubscriber pluginDataSubscriber;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //......</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // update data</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> protected void doUpdate(final List<SelectorData> dataList) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> dataList.forEach(pluginDataSubscrib [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">/**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * WebsocketSyncDataService</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Conditional injection is implemented through SpringBoot</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Websocket sync data configuration for spring boot.</s [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Websocket sync data service.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param websocketConfig the websocket config</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param pluginSubscriber the plugin subscrib [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Config websocket config.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @return the websocket config</span></span><span class="token-line" style="color:#393A34"><spa [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">/**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Websocket sync data service.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain">@Slf4j</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public class W [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private final List<WebSocketClient> clients = new ArrayList<>();</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private final ScheduledThreadPoolExecutor executor;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Instantiates a new Websocket sync cache.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param websocketConfig the websocket config</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param pluginDataSubscriber [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Run a scheduled task every 10 seconds</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // The main function is to check whether the WebSocket connection is disconnected. If the connection is disconnected, retry the connection.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // I [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public void close() {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // close websocket client</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> for (WebSocketClient client : clients) {</span></span><span class [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">/**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * The type shenyu websocket client.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain">@Slf4j</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public fi [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Execute after the connection is successfully established</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public void onOpen(final ServerHandshake serverHandshake) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Execute after receiving the message</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public void onMessage(final String result) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // handle data</span></span><span [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // handle data</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> websocketDataHandler.executor(groupEnum, json, eventType);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span><span class="token-line" style="colo [...]
+</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="5-summary"></a>5. Summary<a class="hash-link" href="#5-summary" title="Direct link to heading">#</a></h3><p>This paper through a practical case, the data synchronization principle of websocket source code analysis. The main knowledge points involved are as follows:</p> [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> } else {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // update data, delete and then insert</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> selectorCount = selectorMapper.updateSelective(selectorDO);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // update upstream</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> updateDivideUpstream(selectorDO);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return selectorCount;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" styl [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //......</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_W [...]
@@ -250,13 +282,15 @@ If the gateway layer is not processed in time, or the administrator updates the
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private void watcherPlugin(final String pluginName) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // plugin path</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> String pluginPath = DefaultPathConstants.buildPluginPath(pluginName);</span></span><span class="token-line" style="color:#393A34"><span class="t [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public void handleDataChange(final String dataPath, final Object data) { // update</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //omit implementation logic, is actually the CommonPluginDataSubscriber operation, can connect wit [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public void handleDataDeleted(final String dataPath) { // delete</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Omit implementation logic, is actually the CommonPluginDataSubscriber operation, can connect with the front</sp [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> });</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span></span><span class="token-line" style="color:#393A34"><span class="token plain">} </span></span></cod [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> });</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span></span><span class="token-line" style="color:#393A34"><span class="token plain">} </span></span></cod [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">on</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">pull_request</span><span class="token punctuation" style="color:#393A34">:</span><span class="token [...]
+</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>@ShenYuTest is extended through the ShenYuExtension class, and the configuration of admin and gateway takes effect in beforeAll in ShenYuExtension. The specific effective logic is implemented in the DockerServiceCompose class.</p><p><img alt="e2e-shenyutest" src="/assets/images/e2e-shenyutest-8ea26c9ea373d2c182be8d19c53cb021.png"></p><p><img a [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> MultiValueMap<String, String> formData = new LinkedMultiValueMap<>();</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> formData.add("id", "8");</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> formData.add("name", "springCloud");</span></span><span class= [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private ShenYuScenarioSpec testWithUriEquals() {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return ShenYuScenarioSpec.builder()</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> .name("single-spring-cloud uri =]")</span></span><span class="token-line" style="color:#393A34"><span class="t [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">shenyu-examples-http</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">deploy</span><span class="token punctuation" style="color:#393A34">:</span><s [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">shenyu-admin</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">image</span><span class="token punctuation" style="color:#393A34">:</span><span class [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">shenyu-integrated-test-http</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">container_name</span><span class="token punctuation" style="color:#393 [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">networks</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">shenyu</span><span class="token punctuation" style="color:#393A34">:</span><span class="token [...]
-By default, it will scan every 300 seconds after 30 seconds of startup.</p><p>Meanwhile, the decision to enable extension plugin functionality can be made through the configuration of <code>shenyu. extPlugin. enabled</code>.</p><p>The above configurations can be adjusted in the configuration file:</p><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI yaml"><pre tabindex="0" class="prism-code language-yaml codeBlock_rtdJ thin-scrollbar" style="color:#393A34;background- [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>The logic of this method processes two data points:</p><ol><li>Synchronize the data that implements the <code>ShenyuPlugin</code> interface to the plugins list of <code>webHandler</code>.</li></ol><div class="codeBlockContainer_J+bg"><div class="codeBl [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">networks</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">shenyu</span><span class="token punctuation" style="color:#393A34">:</span><span class="token [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">@Retention(RetentionPolicy.RUNTIME)</span></span><span class="token-line" style="color:#393A34"><span class="token plain">@Target({ElementType.TYPE, ElementType.METHOD})</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public @interface ShenyuSpringMvcClient {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span></span><sp [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //is enabled</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> boolean enabled() default true;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //register MetaData</span></span><span class="token-line" style="color:#393A34"><span [...]
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="12-scan-annotation"></a>1.2 Scan annotation<a class="hash-link" href="#12-scan-annotation" title="Direct link to heading">#</a></h4><p>Annotation scanning is done through <code>SpringMvcClientBeanPostProcessor</code>, which implements the <code>BeanPostProcessor</code> [...]
@@ -292,9 +326,11 @@ By default, it will scan every 300 seconds after 30 seconds of startup.</p><p>Me
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //......</span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><ul><li>org.apache.shenyu.plugin.httpclient.WebClientPlugin#doRequest()</li></ul><p>Initiate a real request call via <code>webClient</code> in the <code>doRequest()</code> method.</p><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI java"><pre tabindex="0" class="prism-code language-java codeBlock_rtdJ thin-scrollbar" style=" [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">@Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> protected Mono<ClientResponse> doRequest(final ServerWebExchange exchange, final String httpMethod, final URI uri,</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> final HttpHeaders httpHeaders, final Flux<DataBuff [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public Mono<Void> writeWith(final ServerWebExchange exchange, final ShenyuPluginChain chain) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return chain.execute(exchange).then(Mono.defer(() -> {</span></span><span class="token-line" style="col [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public Mono<Void> writeWith(final ServerWebExchange exchange, final ShenyuPluginChain chain) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return chain.execute(exchange).then(Mono.defer(() -> {</span></span><span class="token-line" style="col [...]
+By default, it will scan every 300 seconds after 30 seconds of startup.</p><p>Meanwhile, the decision to enable extension plugin functionality can be made through the configuration of <code>shenyu. extPlugin. enabled</code>.</p><p>The above configurations can be adjusted in the configuration file:</p><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI yaml"><pre tabindex="0" class="prism-code language-yaml codeBlock_rtdJ thin-scrollbar" style="color:#393A34;background- [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>The logic of this method processes two data points:</p><ol><li>Synchronize the data that implements the <code>ShenyuPlugin</code> interface to the plugins list of <code>webHandler</code>.</li></ol><div class="codeBlockContainer_J+bg"><div class="codeBl [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">// method overridden by FormDataOperator</span></span><span class="token-line" style="color:#393A34"><span class="token plain">@Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public void operation(final DocumentContext context, final ParamMappingHandle paramMappingHandle) {</span></span><span class="token-line" style="color:#393A34"><span class="token pla [...]
-<code>LinkedMultiValueMap<String, String> modifyMap = GsonUtils.getInstance().toLinkedMultiValueMap(modify);</code></p><p>This line converts the modified json into <code>LinkedMultiValueMap</code>, <code>GsonUtils#toLinkedMultiValueMap</code> is as follows.</p><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI java"><pre tabindex="0" class="prism-code language-java codeBlock_rtdJ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlo [...]
+<code>LinkedMultiValueMap<String, String> modifyMap = GsonUtils.getInstance().toLinkedMultiValueMap(modify);</code></p><p>This line converts the modified json into <code>LinkedMultiValueMap</code>, <code>GsonUtils#toLinkedMultiValueMap</code> is as follows.</p><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI java"><pre tabindex="0" class="prism-code language-java codeBlock_rtdJ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlo [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><span class="token tag namespace" style="color:#00009f;opacity:0.7">dubbo:</span><span class="token tag" style="color:#00009f">application</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><span class="token tag namespace" style="color:#00009f;opacity:0.7">dubbo:</span><span class="token tag" style="color:#00009f">service</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">timeout</span><span class="token tag attr-value punctuation attr-equals" s [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34"></</span><span class="token tag" style="color:#00009f">beans</span><span class="token tag punctuation" style="color:#393A34">></span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>Declare the application service name, register the center add [...]
@@ -334,36 +370,7 @@ By default, it will scan every 300 seconds after 30 seconds of startup.</p><p>Me
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> Map<String, String> parameters = new HashMap<>(2);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> parameters.put("dispatcher", "direct");</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> reference.setParameters(parameters);</span></span><span class="token-line" [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> String rpcExt = metaData.getRpcExt();//rpc ext param</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> DubboParam dubboParam = parserToDubboParam(rpcExt);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> if (Objects.nonNull(dubboParam)) {</span></span><span class="token-line" style="color:#393A3 [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public class RPCMessageWriter implements MessageWriter {</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public Mono<Void> writeWith(final ServerWebExchange exchange, final ShenyuPluginChain chain) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return chain.execute(exchange).then(Mono.defer(() -> {</span></span><span class="token-line" style="col [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * this is select one for upstream list.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param upstreamList upstream list</span></span><span class="token-line" style="c [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * url.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private String url;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="di [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * weight.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private final int weight;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * false close, true open.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private boolean status;</span></span><span class="token-line" style="color:#393A34"><span class= [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * startup time.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private final long timestamp;</span></span><span class="token-line" style="color:#393A34"><span class="tok [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * warmup.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private final int warmup;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * healthy.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private boolean healthy;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * lastHealthTimestamp.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private long lastHealthTimestamp;</span></span><span class="token-line" style="color:#393A34"><span [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * lastUnhealthyTimestamp.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private long lastUnhealthyTimestamp;</span></span><span class="token-line" style="color:#393A34" [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * group.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private String group;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * version.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private String version;</span></span><span class="token-line" style="color:#393A34"><span class="token plain">} [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
-</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="design-of-loadbalancer-module"></a>Design of LoadBalancer module<a class="hash-link" href="#design-of-loadbalancer-module" title="Direct link to heading">#</a></h2><p>The class diagram of <code>LoadBalancer</code> module<code>is</code>shown as follows.</p><p><img alt=" [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Random load balance enum.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> RANDOM(2, "random", true),</span></span><span class="token-line" style="color:#393A3 [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Round robin load balance enum.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> ROUND_ROBIN(3, "roundRobin", true);</span></span><span class="token-line" style [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private final int code;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private final String name;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private final boolean support;</span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span></code></pre><button type="button" ari [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public Upstream select(final List<Upstream> upstreamList, final String ip) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> if (CollectionUtils.isEmpty(upstreamList)) {</span></span><span class="token-line" style="color:#393A34"><span class="token [...]
-$$ {1-1}
-ww = min(1,uptime/(warmup/weight))
-$$
-It can be seen from the formula that the final weight(<code>ww</code>) is proportional to the original-<code>weight</code> value. The closer the time interval is to the <code>warmup</code> time, the greater the final <code>ww</code>. That is, the longer the waiting time of the request, the higher the final <code>weight</code>. When there is no <code>timestamp</code> or other conditions, the <code>ww</code> is equal to the <code>weight</code> value of <code>Upstream</code> object.</p><p>T [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private Upstream random(final int totalWeight, final int halfLengthTotalWeight, final int[] weights, final List<Upstream> upstreamList) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // If the weights are not the same and the weights are greater than 0, then random by the total number of weights.</span></span><span class="token-line" style="col [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public Upstream doSelect(final List<Upstream> upstreamList, final String ip) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> final ConcurrentSkipListMap<Long, Upstream> treeMap = new ConcurrentSkipListMap<>();</span></span><span class= [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private int weight;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private final AtomicLong current = new AtomicLong(0);</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private long lastUpdate;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> void setWeight(final int weight) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> this.weight = weight;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> current.set(0);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" style="col [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> void sel(final int total) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> current.addAndGet(-1 * total);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> void setLastUpdate(final long lastUpdate) {</span></span><span cla [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //calling the Utility class and invoke the LoadBalance processing.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> Upstream upstream = LoadBalancerFactory.selector(upstreamList, ruleHandle.getLoadBalance(), ip);</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p> [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public Mono<Void> writeWith(final ServerWebExchange exchange, final ShenyuPluginChain chain) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return chain.execute(exchange).then(Mono.defer(() -> {</span></span><span class="token-line" style="col [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // create SpringMvcClientEventListener to handle metadata and URI</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Bean</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public SpringMvcClientEventListener springHttpClientEventListener(final ShenyuClientConfig clientConfig,</span></span><span class="token-line" style= [...]
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p><code>ShenyuClientCommonBeanConfiguration</code> is a <code>shenyu</code> client common configuration class that will create the <code>bean</code> common to the registry client.</p><ul><li>Create <code>ShenyuClientRegisterRepository</code>, which is created by factory class.</li><li>Create <code>ShenyuRegisterCenterConfig</code>, which reads t [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">/**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Shenyu Client Common Bean Configuration</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain">@Configuration</span></span><span class="token-line" style="color:#393A34"><span class="token pl [...]
@@ -426,14 +433,7 @@ It can be seen from the formula that the final weight(<code>ww</code>) is propor
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public String register(final MetaDataRegisterDTO dto) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // 1.register selector information</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> String selectorHandler = selectorHandler(dto);</span></span><span class="token-line" style="color:#393A34"><span class="to [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //......</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public String registerURI(final String selectorName, final List<URIRegisterDTO> uriList) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> if (CollectionUtils.isEmpty(uriList)) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return "";</span></span><span class="token-line" style="color: [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Update records in the database</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> selectorService.updateSelective(selectorDO);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // publish Event to gateway</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> eventPub [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> Boolean match(List<ConditionData> conditionDataList, ServerWebExchange exchange);</span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>The annotation <code>@SPI</code> means that this is an <code>SPI</code> interfa [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private String paramType;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private String operator;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private String paramName;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private String paramValue;</span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h2><a aria-hidden="true" t [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public String buildRealData(final ConditionData condition, final ServerWebExchange exchange) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return ParameterDataFactory.builderData(condition.getParamType(), condition.getParamName(), exchange);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><spa [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public Boolean match(final List<ConditionData> conditionDataList, final ServerWebExchange exchange) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return conditionDataList</span></span><span class="token-line" style="color:#393A34"><span class="t [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * judge conditionData and realData is match.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param conditionData {@linkplain ConditionData}</span></span><span class="t [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain">contains=org.apache.shenyu.plugin.base.condition.judge.ContainsPredicateJudge</span></span><span class="token-line" style="color:#393A34"><span class="token plain">Groovy=org.apache.shenyu.plugin.base.condition.judge.GroovyPredicateJudge</span></span><span class="token-line" style="color:#393A34"><span class="token plain">match=org.apache.shenyu.plugin.base.condition.judge.MatchPredicateJudge</span></s [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Update records in the database</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> selectorService.updateSelective(selectorDO);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // publish Event to gateway</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> eventPub [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">ServiceLoader<Driver> loader = ServiceLoader.load(Driver.class)</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>The underlying implementation involves classloading, the parent delegate model, and so on, which I won't expand here. Based on this design idea, many mainstream frameworks self-impleme [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Value string.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @return the string</span></span><span class="token-line" style="color:#393A34"><span class="token plain" [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Indicates that the object joined by @Join is a singleton,</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * otherwise a completely new instance is created each time.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @r [...]
@@ -451,7 +451,7 @@ It can be seen from the formula that the final weight(<code>ww</code>) is propor
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Gets Extension.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param <T> the type parameter</span></span><span class="token-line" style="color:#393A34"><spa [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public <T> T getExtension(final String key, final Class<T> clazz) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return Optional.ofNullable(clazz) // 入参clazz非空</span></span><span class="token-line" style="color:#393A34"><span class="token [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"># then load it with ExtensionLoader</span></span><span class="token-line" style="color:#393A34"><span class="token plain">ExtensionFactory extensionFactory = ExtensionLoader.getExtensionLoader(ExtensionFactory.class).getDefaultJoin();</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>Once you have an 'E [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/tags/context-path/index.html b/blog/tags/context-path/index.html
index 309fce9ceb..c611890daa 100644
--- a/blog/tags/context-path/index.html
+++ b/blog/tags/context-path/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">One post tagged with "context-path" | Apache ShenYu</title><meta data-react-helmet="true" property="og:title" content="One post tagged with "context-path" | Apache ShenYu"><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//blog/tags/context-path"><meta data-react-helmet="true" name="docsearch:lan [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/tags/data-sync/index.html b/blog/tags/data-sync/index.html
index fb02e80868..79eedbe438 100644
--- a/blog/tags/data-sync/index.html
+++ b/blog/tags/data-sync/index.html
@@ -9,12 +9,12 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">5 posts tagged with "data sync" | Apache ShenYu</title><meta data-react-helmet="true" property="og:title" content="5 posts tagged with "data sync" | Apache ShenYu"><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//blog/tags/data-sync"><meta data-react-helmet="true" name="docsearch:language" cont [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
+<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> } else {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // update data, delete and then insert</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> selectorCount = selectorMapper.updateSelective(selectorDO);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // update upstream</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> updateDivideUpstream(selectorDO);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return selectorCount;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" styl [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //......</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_W [...]
@@ -40,7 +40,7 @@
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private void watcherPlugin(final String pluginName) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> String pluginPath = DefaultPathConstants.buildPluginPath(pluginName);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> cachePluginData(etcdClient.get(pluginPath));</span></span><span class="token-line" style= [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private void cachePluginData(final String dataString) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> final PluginData pluginData = GsonUtils.getInstance().fromJson(dataString, PluginData.class);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> Optional.ofNullable(pluginData)</span></span><span class="token [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private void subscribePluginDataChanges(final String pluginPath, final String pluginName) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> etcdClient.watchDataChange(pluginPath, (updatePath, updateValue) -> {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> final String dataPath = buildRealPath(pluginPath, upda [...]
-</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>The above source code is given comments, I believe you can understand. The main logic for subscribing to plug-in data is as follows:</p><blockquote><ol><li>Create the current plugin path</li><li>Read the current node data on etcd and deserialize it</li><li>The plugin data is cached in the gateway memory</li><li>Subscribe to the plug-in node</l [...]
+</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>The above source code is given comments, I believe you can understand. The main logic for subscribing to plug-in data is as follows:</p><blockquote><ol><li>Create the current plugin path</li><li>Read the current node data on etcd and deserialize it</li><li>The plugin data is cached in the gateway memory</li><li>Subscribe to the plug-in node</l [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">/**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Http sync data configuration for spring boot.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain">@Configuration</span></span><span class="token-line" style="color:#393A34"><span class="to [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private static final Logger LOGGER = LoggerFactory.getLogger(HttpSyncDataConfiguration.class);</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Rest template.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param httpConfig the http config</span></span><span class="token-line" style="color:#393A34"><span cla [...]
@@ -112,48 +112,7 @@ If the gateway layer is not processed in time, or the administrator updates the
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">/**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Event forwarders, which forward the changed events to each ConfigEventListener.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Data change event distributor: synchronize the change data to ShenYu gateway when there is a data change in admin side</span></span><span class [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // other logic omitted</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Call this method when there are data changes</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param event</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34" [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private void doRun(final Collection<LongPollingClient> clients) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Notify all clients that a data change has occurred</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> for (Iterator<LongPollingClient> iter = clients.iterator(); iter.hasN [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> } else {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // update data, delete and then insert</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> selectorCount = selectorMapper.updateSelective(selectorDO);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // update upstream</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> updateDivideUpstream(selectorDO);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return selectorCount;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" styl [...]
-</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>In the <code>Service</code> class to persist data, i.e. to the database, this should be familiar, not expand. The update upstream operation is analyzed in the corresponding section below, focusing on the publish event operation, which performs data synchronization.</p><p>The logic of the <code>publishEvent()</code> method is to find the plugi [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //......</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_W [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * This method is called when there are data changes</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param event</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34 [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Config event listener data changed listener.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @return the data changed listener</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span cla [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Websocket collector.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Websocket collector class: establish a connection, send a message, close the connection and other operations</span></span><span class="token-line" style="color:#393A34"><span cla [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Server endpoint exporter </span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @return the server endpoint exporter</span></span><span class="token-line" s [...]
-</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>This configuration class is implemented through the <code>SpringBoot</code> conditional assembly class. The <code>WebsocketListener</code> class has several annotations:</p><ul><li><p><code>@Configuration</code>: Configuration file, application context;</p></li><li><p><code>@ConditionalOnProperty(name = "shenyu.sync.websocket.enabled" [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private static void sendMessageBySession(final Session session, final String message) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> try {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // The message is sent through the Websocket session</span></span><span class="token-line" style="color:#393A34"><s [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // handle data</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> websocketDataHandler.executor(groupEnum, json, eventType);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span></code></pre><button type="button" a [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain">/**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Create Websocket data handlers through factory mode</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * The type Websocket cache handler.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="co [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private static final EnumMap<ConfigGroupEnum, DataHandler> ENUM_MAP = new EnumMap<>(ConfigGroupEnum.class);</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Instantiates a new Websocket data handler.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param pluginDataSubscriber the plugin data subscriber</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param metaDataSubsc [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Executor.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param type the type</span></span><span class="token-line" style="color:#393A34"><span class="token pla [...]
-</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>Different data types have different ways of handling data, so there are different implementation classes. But they also have the same processing logic between them, so they can be implemented through the template approach to design patterns. The same logic is placed in the <code>handle()</code> method of the abstract class, and the different l [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public abstract class AbstractDataHandler<T> implements DataHandler {</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Convert list.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * The different logic is implemented by the respective implementation classes</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param json the json</span>< [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Do refresh.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * The different logic is implemented by the respective implementation classes</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param dataList the data list< [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Do update.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * The different logic is implemented by the respective implementation classes</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param dataList the data list</ [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Do delete.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * The different logic is implemented by the respective implementation classes</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param dataList the data list</ [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // General purpose logic, abstract class implementation</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public void handle(final String json, final String eventType) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain">/**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * The type Selector data handler.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain">@RequiredArgsConstructor</span></span><span class="token-line" style="color:#393A34"><span class="token [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private final PluginDataSubscriber pluginDataSubscriber;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //......</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // update data</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> protected void doUpdate(final List<SelectorData> dataList) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> dataList.forEach(pluginDataSubscrib [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain">/**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * WebsocketSyncDataService</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Conditional injection is implemented through SpringBoot</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Websocket sync data configuration for spring boot.</s [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Websocket sync data service.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param websocketConfig the websocket config</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param pluginSubscriber the plugin subscrib [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Config websocket config.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @return the websocket config</span></span><span class="token-line" style="color:#393A34"><spa [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain">/**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Websocket sync data service.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain">@Slf4j</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public class W [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private final List<WebSocketClient> clients = new ArrayList<>();</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private final ScheduledThreadPoolExecutor executor;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Instantiates a new Websocket sync cache.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param websocketConfig the websocket config</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param pluginDataSubscriber [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Run a scheduled task every 10 seconds</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // The main function is to check whether the WebSocket connection is disconnected. If the connection is disconnected, retry the connection.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // I [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public void close() {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // close websocket client</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> for (WebSocketClient client : clients) {</span></span><span class [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain">/**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * The type shenyu websocket client.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain">@Slf4j</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public fi [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Execute after the connection is successfully established</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public void onOpen(final ServerHandshake serverHandshake) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Execute after receiving the message</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public void onMessage(final String result) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // handle data</span></span><span [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // handle data</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> websocketDataHandler.executor(groupEnum, json, eventType);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span><span class="token-line" style="colo [...]
-</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="5-summary"></a>5. Summary<a class="hash-link" href="#5-summary" title="Direct link to heading">#</a></h3><p>This paper through a practical case, the data synchronization principle of websocket source code analysis. The main knowledge points involved are as follows:</p> [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private void doRun(final Collection<LongPollingClient> clients) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Notify all clients that a data change has occurred</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> for (Iterator<LongPollingClient> iter = clients.iterator(); iter.hasN [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> } else {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // update data, delete and then insert</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> selectorCount = selectorMapper.updateSelective(selectorDO);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // update upstream</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> updateDivideUpstream(selectorDO);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return selectorCount;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" styl [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //......</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_W [...]
@@ -206,7 +165,48 @@ If the gateway layer is not processed in time, or the administrator updates the
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private final SyncDataService syncDataService;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Instantiates a new Nacos data init.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param configService the nacos config service</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param syncDataService the sync data [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public void run(final String... args) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> String pluginDataId = NacosPathConstants.PLUGIN_DATA_ID;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> String authDataI [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private boolean dataIdNotExist(final String pluginDataId) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> try {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> String group = NacosPathConstants.GROUP;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> long [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private boolean dataIdNotExist(final String pluginDataId) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> try {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> String group = NacosPathConstants.GROUP;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> long [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> } else {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // update data, delete and then insert</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> selectorCount = selectorMapper.updateSelective(selectorDO);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // update upstream</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> updateDivideUpstream(selectorDO);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return selectorCount;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" styl [...]
+</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>In the <code>Service</code> class to persist data, i.e. to the database, this should be familiar, not expand. The update upstream operation is analyzed in the corresponding section below, focusing on the publish event operation, which performs data synchronization.</p><p>The logic of the <code>publishEvent()</code> method is to find the plugi [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //......</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_W [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * This method is called when there are data changes</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param event</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34 [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Config event listener data changed listener.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @return the data changed listener</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span cla [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Websocket collector.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Websocket collector class: establish a connection, send a message, close the connection and other operations</span></span><span class="token-line" style="color:#393A34"><span cla [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Server endpoint exporter </span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @return the server endpoint exporter</span></span><span class="token-line" s [...]
+</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>This configuration class is implemented through the <code>SpringBoot</code> conditional assembly class. The <code>WebsocketListener</code> class has several annotations:</p><ul><li><p><code>@Configuration</code>: Configuration file, application context;</p></li><li><p><code>@ConditionalOnProperty(name = "shenyu.sync.websocket.enabled" [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private static void sendMessageBySession(final Session session, final String message) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> try {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // The message is sent through the Websocket session</span></span><span class="token-line" style="color:#393A34"><s [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // handle data</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> websocketDataHandler.executor(groupEnum, json, eventType);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span></code></pre><button type="button" a [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">/**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Create Websocket data handlers through factory mode</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * The type Websocket cache handler.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="co [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private static final EnumMap<ConfigGroupEnum, DataHandler> ENUM_MAP = new EnumMap<>(ConfigGroupEnum.class);</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Instantiates a new Websocket data handler.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param pluginDataSubscriber the plugin data subscriber</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param metaDataSubsc [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Executor.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param type the type</span></span><span class="token-line" style="color:#393A34"><span class="token pla [...]
+</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>Different data types have different ways of handling data, so there are different implementation classes. But they also have the same processing logic between them, so they can be implemented through the template approach to design patterns. The same logic is placed in the <code>handle()</code> method of the abstract class, and the different l [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public abstract class AbstractDataHandler<T> implements DataHandler {</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Convert list.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * The different logic is implemented by the respective implementation classes</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param json the json</span>< [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Do refresh.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * The different logic is implemented by the respective implementation classes</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param dataList the data list< [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Do update.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * The different logic is implemented by the respective implementation classes</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param dataList the data list</ [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Do delete.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * The different logic is implemented by the respective implementation classes</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param dataList the data list</ [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // General purpose logic, abstract class implementation</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public void handle(final String json, final String eventType) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">/**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * The type Selector data handler.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain">@RequiredArgsConstructor</span></span><span class="token-line" style="color:#393A34"><span class="token [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private final PluginDataSubscriber pluginDataSubscriber;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //......</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // update data</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> protected void doUpdate(final List<SelectorData> dataList) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> dataList.forEach(pluginDataSubscrib [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">/**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * WebsocketSyncDataService</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Conditional injection is implemented through SpringBoot</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Websocket sync data configuration for spring boot.</s [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Websocket sync data service.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param websocketConfig the websocket config</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param pluginSubscriber the plugin subscrib [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Config websocket config.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @return the websocket config</span></span><span class="token-line" style="color:#393A34"><spa [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">/**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Websocket sync data service.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain">@Slf4j</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public class W [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private final List<WebSocketClient> clients = new ArrayList<>();</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private final ScheduledThreadPoolExecutor executor;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Instantiates a new Websocket sync cache.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param websocketConfig the websocket config</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param pluginDataSubscriber [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Run a scheduled task every 10 seconds</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // The main function is to check whether the WebSocket connection is disconnected. If the connection is disconnected, retry the connection.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // I [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public void close() {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // close websocket client</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> for (WebSocketClient client : clients) {</span></span><span class [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">/**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * The type shenyu websocket client.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain">@Slf4j</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public fi [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Execute after the connection is successfully established</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public void onOpen(final ServerHandshake serverHandshake) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Execute after receiving the message</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public void onMessage(final String result) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // handle data</span></span><span [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // handle data</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> websocketDataHandler.executor(groupEnum, json, eventType);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span><span class="token-line" style="colo [...]
+</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="5-summary"></a>5. Summary<a class="hash-link" href="#5-summary" title="Direct link to heading">#</a></h3><p>This paper through a practical case, the data synchronization principle of websocket source code analysis. The main knowledge points involved are as follows:</p> [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> } else {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // update data, delete and then insert</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> selectorCount = selectorMapper.updateSelective(selectorDO);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // update upstream</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> updateDivideUpstream(selectorDO);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return selectorCount;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" styl [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //......</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_W [...]
@@ -234,7 +234,7 @@ If the gateway layer is not processed in time, or the administrator updates the
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public void handleDataChange(final String dataPath, final Object data) { // update</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //omit implementation logic, is actually the CommonPluginDataSubscriber operation, can connect wit [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public void handleDataDeleted(final String dataPath) { // delete</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Omit implementation logic, is actually the CommonPluginDataSubscriber operation, can connect with the front</sp [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> });</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span></span><span class="token-line" style="color:#393A34"><span class="token plain">} </span></span></cod [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/tags/divide/index.html b/blog/tags/divide/index.html
index 7c50ce2b39..e009e06c35 100644
--- a/blog/tags/divide/index.html
+++ b/blog/tags/divide/index.html
@@ -9,12 +9,12 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">One post tagged with "divide" | Apache ShenYu</title><meta data-react-helmet="true" property="og:title" content="One post tagged with "divide" | Apache ShenYu"><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//blog/tags/divide"><meta data-react-helmet="true" name="docsearch:language" content="en [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
+<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">@Retention(RetentionPolicy.RUNTIME)</span></span><span class="token-line" style="color:#393A34"><span class="token plain">@Target({ElementType.TYPE, ElementType.METHOD})</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public @interface ShenyuSpringMvcClient {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span></span><sp [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //is enabled</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> boolean enabled() default true;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //register MetaData</span></span><span class="token-line" style="color:#393A34"><span [...]
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="12-scan-annotation"></a>1.2 Scan annotation<a class="hash-link" href="#12-scan-annotation" title="Direct link to heading">#</a></h4><p>Annotation scanning is done through <code>SpringMvcClientBeanPostProcessor</code>, which implements the <code>BeanPostProcessor</code> [...]
@@ -51,7 +51,7 @@
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><ul><li>org.apache.shenyu.plugin.httpclient.WebClientPlugin#doRequest()</li></ul><p>Initiate a real request call via <code>webClient</code> in the <code>doRequest()</code> method.</p><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI java"><pre tabindex="0" class="prism-code language-java codeBlock_rtdJ thin-scrollbar" style=" [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">@Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> protected Mono<ClientResponse> doRequest(final ServerWebExchange exchange, final String httpMethod, final URI uri,</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> final HttpHeaders httpHeaders, final Flux<DataBuff [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public Mono<Void> writeWith(final ServerWebExchange exchange, final ShenyuPluginChain chain) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return chain.execute(exchange).then(Mono.defer(() -> {</span></span><span class="token-line" style="col [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/tags/dubbo/index.html b/blog/tags/dubbo/index.html
index 667794f400..925eb08dcc 100644
--- a/blog/tags/dubbo/index.html
+++ b/blog/tags/dubbo/index.html
@@ -9,12 +9,12 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">One post tagged with "dubbo" | Apache ShenYu</title><meta data-react-helmet="true" property="og:title" content="One post tagged with "dubbo" | Apache ShenYu"><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//blog/tags/dubbo"><meta data-react-helmet="true" name="docsearch:language" content="en">< [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
+<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><span class="token tag namespace" style="color:#00009f;opacity:0.7">dubbo:</span><span class="token tag" style="color:#00009f">application</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><span class="token tag namespace" style="color:#00009f;opacity:0.7">dubbo:</span><span class="token tag" style="color:#00009f">service</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">timeout</span><span class="token tag attr-value punctuation attr-equals" s [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34"></</span><span class="token tag" style="color:#00009f">beans</span><span class="token tag punctuation" style="color:#393A34">></span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>Declare the application service name, register the center add [...]
@@ -55,7 +55,7 @@
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> String rpcExt = metaData.getRpcExt();//rpc ext param</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> DubboParam dubboParam = parserToDubboParam(rpcExt);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> if (Objects.nonNull(dubboParam)) {</span></span><span class="token-line" style="color:#393A3 [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public class RPCMessageWriter implements MessageWriter {</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public Mono<Void> writeWith(final ServerWebExchange exchange, final ShenyuPluginChain chain) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return chain.execute(exchange).then(Mono.defer(() -> {</span></span><span class="token-line" style="col [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/tags/e-2-e-test/index.html b/blog/tags/e-2-e-test/index.html
index 10cd592a99..c3667a5351 100644
--- a/blog/tags/e-2-e-test/index.html
+++ b/blog/tags/e-2-e-test/index.html
@@ -9,17 +9,17 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">One post tagged with "e2e test" | Apache ShenYu</title><meta data-react-helmet="true" property="og:title" content="One post tagged with "e2e test" | Apache ShenYu"><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//blog/tags/e-2-e-test"><meta data-react-helmet="true" name="docsearch:language" con [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
+<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">on</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">pull_request</span><span class="token punctuation" style="color:#393A34">:</span><span class="token [...]
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>@ShenYuTest is extended through the ShenYuExtension class, and the configuration of admin and gateway takes effect in beforeAll in ShenYuExtension. The specific effective logic is implemented in the DockerServiceCompose class.</p><p><img alt="e2e-shenyutest" src="/assets/images/e2e-shenyutest-8ea26c9ea373d2c182be8d19c53cb021.png"></p><p><img a [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> MultiValueMap<String, String> formData = new LinkedMultiValueMap<>();</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> formData.add("id", "8");</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> formData.add("name", "springCloud");</span></span><span class= [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private ShenYuScenarioSpec testWithUriEquals() {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return ShenYuScenarioSpec.builder()</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> .name("single-spring-cloud uri =]")</span></span><span class="token-line" style="color:#393A34"><span class="t [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/tags/etcd/index.html b/blog/tags/etcd/index.html
index d03fea859d..1644b21193 100644
--- a/blog/tags/etcd/index.html
+++ b/blog/tags/etcd/index.html
@@ -9,12 +9,12 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">One post tagged with "etcd" | Apache ShenYu</title><meta data-react-helmet="true" property="og:title" content="One post tagged with "etcd" | Apache ShenYu"><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//blog/tags/etcd"><meta data-react-helmet="true" name="docsearch:language" content="en"><met [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
+<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> } else {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // update data, delete and then insert</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> selectorCount = selectorMapper.updateSelective(selectorDO);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // update upstream</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> updateDivideUpstream(selectorDO);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return selectorCount;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" styl [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //......</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_W [...]
@@ -41,7 +41,7 @@
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private void cachePluginData(final String dataString) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> final PluginData pluginData = GsonUtils.getInstance().fromJson(dataString, PluginData.class);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> Optional.ofNullable(pluginData)</span></span><span class="token [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private void subscribePluginDataChanges(final String pluginPath, final String pluginName) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> etcdClient.watchDataChange(pluginPath, (updatePath, updateValue) -> {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> final String dataPath = buildRealPath(pluginPath, upda [...]
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>The above source code is given comments, I believe you can understand. The main logic for subscribing to plug-in data is as follows:</p><blockquote><ol><li>Create the current plugin path</li><li>Read the current node data on etcd and deserialize it</li><li>The plugin data is cached in the gateway memory</li><li>Subscribe to the plug-in node</l [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/tags/ext/index.html b/blog/tags/ext/index.html
index baa8355be0..5b43264786 100644
--- a/blog/tags/ext/index.html
+++ b/blog/tags/ext/index.html
@@ -9,15 +9,15 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">One post tagged with "ext" | Apache ShenYu</title><meta data-react-helmet="true" property="og:title" content="One post tagged with "ext" | Apache ShenYu"><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//blog/tags/ext"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta d [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
+<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
By default, it will scan every 300 seconds after 30 seconds of startup.</p><p>Meanwhile, the decision to enable extension plugin functionality can be made through the configuration of <code>shenyu. extPlugin. enabled</code>.</p><p>The above configurations can be adjusted in the configuration file:</p><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI yaml"><pre tabindex="0" class="prism-code language-yaml codeBlock_rtdJ thin-scrollbar" style="color:#393A34;background- [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>The logic of this method processes two data points:</p><ol><li>Synchronize the data that implements the <code>ShenyuPlugin</code> interface to the plugins list of <code>webHandler</code>.</li></ol><div class="codeBlockContainer_J+bg"><div class="codeBl [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/tags/first-start/index.html b/blog/tags/first-start/index.html
index 97281456d5..c7a020c23d 100644
--- a/blog/tags/first-start/index.html
+++ b/blog/tags/first-start/index.html
@@ -9,18 +9,18 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">One post tagged with "first-start" | Apache ShenYu</title><meta data-react-helmet="true" property="og:title" content="One post tagged with "first-start" | Apache ShenYu"><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//blog/tags/first-start"><meta data-react-helmet="true" name="docsearch:langua [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
+<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><span class="token tag" style="color:#00009f">mirror</span><span class="token tag punctuation" style="color:#393A34">></span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><spa [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><span class="token tag" style="color:#00009f">mirror</span><span class="token tag punctuation" style="color:#393A34">></span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><spa [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><span class="token tag" style="color:#00009f">mirror</span><span class="token tag punctuation" style="color:#393A34">></span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><spa [...]
If the shenyu-e2e build fails, then add the <code><relativePath>. /pom.xml</relativePath></code> to <code><relativePath/></code>.</p></li></ol><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="start-gateway-service"></a>Start Gateway Service<a class="hash-link" href="#start-gateway-service" title="Direct link to heading">#</a></h4><ol><li><p>Start the <code>shenyu-admin</code> console (H2 database is used by default)</p><img src="/img/activi [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">C:</span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain">Users</span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain">pc</span><span class="token operator" style="color:#393A34">></span><span class="token plain">npm -v</span></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/tags/http/index.html b/blog/tags/http/index.html
index 3fa7df2470..e3a268422c 100644
--- a/blog/tags/http/index.html
+++ b/blog/tags/http/index.html
@@ -9,12 +9,12 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">2 posts tagged with "http" | Apache ShenYu</title><meta data-react-helmet="true" property="og:title" content="2 posts tagged with "http" | Apache ShenYu"><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//blog/tags/http"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
+<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">/**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Http sync data configuration for spring boot.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain">@Configuration</span></span><span class="token-line" style="color:#393A34"><span class="to [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private static final Logger LOGGER = LoggerFactory.getLogger(HttpSyncDataConfiguration.class);</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Rest template.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param httpConfig the http config</span></span><span class="token-line" style="color:#393A34"><span cla [...]
@@ -86,7 +86,7 @@ If the gateway layer is not processed in time, or the administrator updates the
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">/**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Event forwarders, which forward the changed events to each ConfigEventListener.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Data change event distributor: synchronize the change data to ShenYu gateway when there is a data change in admin side</span></span><span class [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // other logic omitted</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Call this method when there are data changes</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param event</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34" [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private void doRun(final Collection<LongPollingClient> clients) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Notify all clients that a data change has occurred</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> for (Iterator<LongPollingClient> iter = clients.iterator(); iter.hasN [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private void doRun(final Collection<LongPollingClient> clients) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Notify all clients that a data change has occurred</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> for (Iterator<LongPollingClient> iter = clients.iterator(); iter.hasN [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // create SpringMvcClientEventListener to handle metadata and URI</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Bean</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public SpringMvcClientEventListener springHttpClientEventListener(final ShenyuClientConfig clientConfig,</span></span><span class="token-line" style= [...]
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p><code>ShenyuClientCommonBeanConfiguration</code> is a <code>shenyu</code> client common configuration class that will create the <code>bean</code> common to the registry client.</p><ul><li>Create <code>ShenyuClientRegisterRepository</code>, which is created by factory class.</li><li>Create <code>ShenyuRegisterCenterConfig</code>, which reads t [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">/**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Shenyu Client Common Bean Configuration</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain">@Configuration</span></span><span class="token-line" style="color:#393A34"><span class="token pl [...]
@@ -150,7 +150,7 @@ If the gateway layer is not processed in time, or the administrator updates the
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //......</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public String registerURI(final String selectorName, final List<URIRegisterDTO> uriList) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> if (CollectionUtils.isEmpty(uriList)) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return "";</span></span><span class="token-line" style="color: [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Update records in the database</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> selectorService.updateSelective(selectorDO);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // publish Event to gateway</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> eventPub [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/tags/index.html b/blog/tags/index.html
index 1e1c6addc3..9fdb733528 100644
--- a/blog/tags/index.html
+++ b/blog/tags/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Tags | Apache ShenYu</title><meta data-react-helmet="true" property="og:title" content="Tags | Apache ShenYu"><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//blog/tags"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:docusaurus_tag" content="blo [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/tags/integration-test/index.html b/blog/tags/integration-test/index.html
index ea104552a7..8d7e5d2f77 100644
--- a/blog/tags/integration-test/index.html
+++ b/blog/tags/integration-test/index.html
@@ -9,17 +9,17 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">One post tagged with "integration test" | Apache ShenYu</title><meta data-react-helmet="true" property="og:title" content="One post tagged with "integration test" | Apache ShenYu"><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//blog/tags/integration-test"><meta data-react-helmet="true" name="d [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
+<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">shenyu-examples-http</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">deploy</span><span class="token punctuation" style="color:#393A34">:</span><s [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">shenyu-admin</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">image</span><span class="token punctuation" style="color:#393A34">:</span><span class [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">shenyu-integrated-test-http</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">container_name</span><span class="token punctuation" style="color:#393 [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">networks</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">shenyu</span><span class="token punctuation" style="color:#393A34">:</span><span class="token [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/tags/load-balance/index.html b/blog/tags/load-balance/index.html
index f23cba01db..cb6cf36fe1 100644
--- a/blog/tags/load-balance/index.html
+++ b/blog/tags/load-balance/index.html
@@ -9,12 +9,12 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">One post tagged with "load balance" | Apache ShenYu</title><meta data-react-helmet="true" property="og:title" content="One post tagged with "load balance" | Apache ShenYu"><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//blog/tags/load-balance"><meta data-react-helmet="true" name="docsearch:lan [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
+<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * this is select one for upstream list.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param upstreamList upstream list</span></span><span class="token-line" style="c [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * url.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private String url;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="di [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * weight.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private final int weight;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" [...]
@@ -44,7 +44,7 @@ It can be seen from the formula that the final weight(<code>ww</code>) is propor
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> void setWeight(final int weight) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> this.weight = weight;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> current.set(0);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" style="col [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> void sel(final int total) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> current.addAndGet(-1 * total);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> void setLastUpdate(final long lastUpdate) {</span></span><span cla [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //calling the Utility class and invoke the LoadBalance processing.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> Upstream upstream = LoadBalancerFactory.selector(upstreamList, ruleHandle.getLoadBalance(), ip);</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p> [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/tags/nacos/index.html b/blog/tags/nacos/index.html
index abf2cfbf24..50f4675f5d 100644
--- a/blog/tags/nacos/index.html
+++ b/blog/tags/nacos/index.html
@@ -9,12 +9,12 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">One post tagged with "nacos" | Apache ShenYu</title><meta data-react-helmet="true" property="og:title" content="One post tagged with "nacos" | Apache ShenYu"><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//blog/tags/nacos"><meta data-react-helmet="true" name="docsearch:language" content="en">< [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
+<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> } else {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // update data, delete and then insert</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> selectorCount = selectorMapper.updateSelective(selectorDO);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // update upstream</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> updateDivideUpstream(selectorDO);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return selectorCount;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" styl [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //......</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_W [...]
@@ -68,7 +68,7 @@
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Instantiates a new Nacos data init.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param configService the nacos config service</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param syncDataService the sync data [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public void run(final String... args) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> String pluginDataId = NacosPathConstants.PLUGIN_DATA_ID;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> String authDataI [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private boolean dataIdNotExist(final String pluginDataId) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> try {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> String group = NacosPathConstants.GROUP;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> long [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/tags/param-mapping/index.html b/blog/tags/param-mapping/index.html
index a51c246cbc..48d3a77c4b 100644
--- a/blog/tags/param-mapping/index.html
+++ b/blog/tags/param-mapping/index.html
@@ -9,15 +9,15 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">One post tagged with "param-mapping" | Apache ShenYu</title><meta data-react-helmet="true" property="og:title" content="One post tagged with "param-mapping" | Apache ShenYu"><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//blog/tags/param-mapping"><meta data-react-helmet="true" name="docsearch: [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
+<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">// method overridden by FormDataOperator</span></span><span class="token-line" style="color:#393A34"><span class="token plain">@Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public void operation(final DocumentContext context, final ParamMappingHandle paramMappingHandle) {</span></span><span class="token-line" style="color:#393A34"><span class="token pla [...]
<code>LinkedMultiValueMap<String, String> modifyMap = GsonUtils.getInstance().toLinkedMultiValueMap(modify);</code></p><p>This line converts the modified json into <code>LinkedMultiValueMap</code>, <code>GsonUtils#toLinkedMultiValueMap</code> is as follows.</p><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI java"><pre tabindex="0" class="prism-code language-java codeBlock_rtdJ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlo [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/tags/plugin/index.html b/blog/tags/plugin/index.html
index 4676733647..ce622ff8ec 100644
--- a/blog/tags/plugin/index.html
+++ b/blog/tags/plugin/index.html
@@ -9,14 +9,12 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">3 posts tagged with "plugin" | Apache ShenYu</title><meta data-react-helmet="true" property="og:title" content="3 posts tagged with "plugin" | Apache ShenYu"><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//blog/tags/plugin"><meta data-react-helmet="true" name="docsearch:language" content="en"> [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-By default, it will scan every 300 seconds after 30 seconds of startup.</p><p>Meanwhile, the decision to enable extension plugin functionality can be made through the configuration of <code>shenyu. extPlugin. enabled</code>.</p><p>The above configurations can be adjusted in the configuration file:</p><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI yaml"><pre tabindex="0" class="prism-code language-yaml codeBlock_rtdJ thin-scrollbar" style="color:#393A34;background- [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>The logic of this method processes two data points:</p><ol><li>Synchronize the data that implements the <code>ShenyuPlugin</code> interface to the plugins list of <code>webHandler</code>.</li></ol><div class="codeBlockContainer_J+bg"><div class="codeBl [...]
+<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">@Retention(RetentionPolicy.RUNTIME)</span></span><span class="token-line" style="color:#393A34"><span class="token plain">@Target({ElementType.TYPE, ElementType.METHOD})</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public @interface ShenyuSpringMvcClient {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span></span><sp [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //is enabled</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> boolean enabled() default true;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //register MetaData</span></span><span class="token-line" style="color:#393A34"><span [...]
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="12-scan-annotation"></a>1.2 Scan annotation<a class="hash-link" href="#12-scan-annotation" title="Direct link to heading">#</a></h4><p>Annotation scanning is done through <code>SpringMvcClientBeanPostProcessor</code>, which implements the <code>BeanPostProcessor</code> [...]
@@ -52,7 +50,9 @@ By default, it will scan every 300 seconds after 30 seconds of startup.</p><p>Me
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //......</span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><ul><li>org.apache.shenyu.plugin.httpclient.WebClientPlugin#doRequest()</li></ul><p>Initiate a real request call via <code>webClient</code> in the <code>doRequest()</code> method.</p><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI java"><pre tabindex="0" class="prism-code language-java codeBlock_rtdJ thin-scrollbar" style=" [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">@Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> protected Mono<ClientResponse> doRequest(final ServerWebExchange exchange, final String httpMethod, final URI uri,</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> final HttpHeaders httpHeaders, final Flux<DataBuff [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public Mono<Void> writeWith(final ServerWebExchange exchange, final ShenyuPluginChain chain) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return chain.execute(exchange).then(Mono.defer(() -> {</span></span><span class="token-line" style="col [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public Mono<Void> writeWith(final ServerWebExchange exchange, final ShenyuPluginChain chain) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return chain.execute(exchange).then(Mono.defer(() -> {</span></span><span class="token-line" style="col [...]
+By default, it will scan every 300 seconds after 30 seconds of startup.</p><p>Meanwhile, the decision to enable extension plugin functionality can be made through the configuration of <code>shenyu. extPlugin. enabled</code>.</p><p>The above configurations can be adjusted in the configuration file:</p><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI yaml"><pre tabindex="0" class="prism-code language-yaml codeBlock_rtdJ thin-scrollbar" style="color:#393A34;background- [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>The logic of this method processes two data points:</p><ol><li>Synchronize the data that implements the <code>ShenyuPlugin</code> interface to the plugins list of <code>webHandler</code>.</li></ol><div class="codeBlockContainer_J+bg"><div class="codeBl [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><span class="token tag namespace" style="color:#00009f;opacity:0.7">dubbo:</span><span class="token tag" style="color:#00009f">application</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><span class="token tag namespace" style="color:#00009f;opacity:0.7">dubbo:</span><span class="token tag" style="color:#00009f">service</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">timeout</span><span class="token tag attr-value punctuation attr-equals" s [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34"></</span><span class="token tag" style="color:#00009f">beans</span><span class="token tag punctuation" style="color:#393A34">></span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>Declare the application service name, register the center add [...]
@@ -93,7 +93,7 @@ By default, it will scan every 300 seconds after 30 seconds of startup.</p><p>Me
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> String rpcExt = metaData.getRpcExt();//rpc ext param</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> DubboParam dubboParam = parserToDubboParam(rpcExt);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> if (Objects.nonNull(dubboParam)) {</span></span><span class="token-line" style="color:#393A3 [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public class RPCMessageWriter implements MessageWriter {</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public Mono<Void> writeWith(final ServerWebExchange exchange, final ShenyuPluginChain chain) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return chain.execute(exchange).then(Mono.defer(() -> {</span></span><span class="token-line" style="col [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/tags/rate-limiter/index.html b/blog/tags/rate-limiter/index.html
index ff2626978f..cc9a38e69c 100644
--- a/blog/tags/rate-limiter/index.html
+++ b/blog/tags/rate-limiter/index.html
@@ -9,12 +9,12 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">One post tagged with "rate limiter" | Apache ShenYu</title><meta data-react-helmet="true" property="og:title" content="One post tagged with "rate limiter" | Apache ShenYu"><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//blog/tags/rate-limiter"><meta data-react-helmet="true" name="docsearch:lan [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
+<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * get Key resolver's name.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @return Key resolver's name</span></span><span class="token-line" style="color:#393 [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * resolve.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param exchange exchange the current server exchange {@linkplain ServerWebExchange}</span></span><span class= [...]
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p><code>@SPI</code> registers the current interface as Apache Shenyu SPI. Method <code>resolve(ServerWebExchange exchange)</code> is used to provide the resolution way. Currently there are two key resolvers in <code>RateLimiterKeyResolver</code> <code>SPI</code>:<code>WholeKeyResolve</code> and <code>RemoteAddrKeyResolver</code>. The res [...]
@@ -23,7 +23,7 @@
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>The filled_tokens is produced evenly by time interval * rate,if the number of tokens greater than requests, then allowed=1, and update new_tokens.</p><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI lua"><pre tabindex="0" class="prism-code language-lua codeBlock_rtdJ thin-scrollbar" style="color:#393A34;background-color [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">return { allowed_num, new_tokens }</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>Here <code>now</code> is current time parameters passed in, set <code>tokens_key</code> to hold the string <code>new_tokens</code> and set<code>tokens_key</code> to timeout after <code>ttl</code> of seconds. Set <code>ti [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">return { allowed_num, remain_request }</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>Previously has set <code>window_time</code>=1, using <code>zremrangebyscore</code> command of Redis to remove all the elements in the sorted set stored at <code>tokens_key</code> with a score in [0,now - window_size / w [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/tags/register-center/index.html b/blog/tags/register-center/index.html
index 73e667d07d..ada88e3a30 100644
--- a/blog/tags/register-center/index.html
+++ b/blog/tags/register-center/index.html
@@ -9,12 +9,12 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">One post tagged with "register center" | Apache ShenYu</title><meta data-react-helmet="true" property="og:title" content="One post tagged with "register center" | Apache ShenYu"><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//blog/tags/register-center"><meta data-react-helmet="true" name="docs [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
+<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // create SpringMvcClientEventListener to handle metadata and URI</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Bean</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public SpringMvcClientEventListener springHttpClientEventListener(final ShenyuClientConfig clientConfig,</span></span><span class="token-line" style= [...]
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p><code>ShenyuClientCommonBeanConfiguration</code> is a <code>shenyu</code> client common configuration class that will create the <code>bean</code> common to the registry client.</p><ul><li>Create <code>ShenyuClientRegisterRepository</code>, which is created by factory class.</li><li>Create <code>ShenyuRegisterCenterConfig</code>, which reads t [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">/**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Shenyu Client Common Bean Configuration</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain">@Configuration</span></span><span class="token-line" style="color:#393A34"><span class="token pl [...]
@@ -78,7 +78,7 @@
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //......</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public String registerURI(final String selectorName, final List<URIRegisterDTO> uriList) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> if (CollectionUtils.isEmpty(uriList)) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return "";</span></span><span class="token-line" style="color: [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Update records in the database</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> selectorService.updateSelective(selectorDO);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // publish Event to gateway</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> eventPub [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/tags/spi/index.html b/blog/tags/spi/index.html
index 1a063edd08..a436b2c849 100644
--- a/blog/tags/spi/index.html
+++ b/blog/tags/spi/index.html
@@ -9,20 +9,17 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">5 posts tagged with "spi" | Apache ShenYu</title><meta data-react-helmet="true" property="og:title" content="5 posts tagged with "spi" | Apache ShenYu"><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//blog/tags/spi"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta dat [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * get Key resolver's name.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @return Key resolver's name</span></span><span class="token-line" style="color:#393 [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * resolve.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param exchange exchange the current server exchange {@linkplain ServerWebExchange}</span></span><span class= [...]
-</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p><code>@SPI</code> registers the current interface as Apache Shenyu SPI. Method <code>resolve(ServerWebExchange exchange)</code> is used to provide the resolution way. Currently there are two key resolvers in <code>RateLimiterKeyResolver</code> <code>SPI</code>:<code>WholeKeyResolve</code> and <code>RemoteAddrKeyResolver</code>. The res [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain">local capacity = tonumber(ARGV[2])</span></span><span class="token-line" style="color:#393A34"><span class="token plain">local timestamp = tonumber(ARGV[3])</span></span><span class="token-line" style="color:#393A34"><span class="token plain">local id = KEYS[2]</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div> [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain">if count < capacity then</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> redis.call("zadd", key, timestamp, id)</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> allowed = 1</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> count = count + 1</span></span><span class="token-li [...]
-</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>The filled_tokens is produced evenly by time interval * rate,if the number of tokens greater than requests, then allowed=1, and update new_tokens.</p><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI lua"><pre tabindex="0" class="prism-code language-lua codeBlock_rtdJ thin-scrollbar" style="color:#393A34;background-color [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain">return { allowed_num, new_tokens }</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>Here <code>now</code> is current time parameters passed in, set <code>tokens_key</code> to hold the string <code>new_tokens</code> and set<code>tokens_key</code> to timeout after <code>ttl</code> of seconds. Set <code>ti [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain">return { allowed_num, remain_request }</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>Previously has set <code>window_time</code>=1, using <code>zremrangebyscore</code> command of Redis to remove all the elements in the sorted set stored at <code>tokens_key</code> with a score in [0,now - window_size / w [...]
+<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> Boolean match(List<ConditionData> conditionDataList, ServerWebExchange exchange);</span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>The annotation <code>@SPI</code> means that this is an <code>SPI</code> interfa [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private String paramType;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private String operator;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private String paramName;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private String paramValue;</span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h2><a aria-hidden="true" t [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public String buildRealData(final ConditionData condition, final ServerWebExchange exchange) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return ParameterDataFactory.builderData(condition.getParamType(), condition.getParamName(), exchange);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><spa [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public Boolean match(final List<ConditionData> conditionDataList, final ServerWebExchange exchange) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return conditionDataList</span></span><span class="token-line" style="color:#393A34"><span class="t [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * this is select one for upstream list.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param upstreamList upstream list</span></span><span class="token-line" style="c [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * url.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private String url;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="di [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * weight.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private final int weight;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" [...]
@@ -51,14 +48,17 @@ It can be seen from the formula that the final weight(<code>ww</code>) is propor
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private long lastUpdate;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> void setWeight(final int weight) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> this.weight = weight;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> current.set(0);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" style="col [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> void sel(final int total) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> current.addAndGet(-1 * total);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> void setLastUpdate(final long lastUpdate) {</span></span><span cla [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //calling the Utility class and invoke the LoadBalance processing.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> Upstream upstream = LoadBalancerFactory.selector(upstreamList, ruleHandle.getLoadBalance(), ip);</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p> [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> Boolean match(List<ConditionData> conditionDataList, ServerWebExchange exchange);</span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>The annotation <code>@SPI</code> means that this is an <code>SPI</code> interfa [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private String paramType;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private String operator;</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private String paramName;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private String paramValue;</span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h2><a aria-hidden="true" t [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public String buildRealData(final ConditionData condition, final ServerWebExchange exchange) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return ParameterDataFactory.builderData(condition.getParamType(), condition.getParamName(), exchange);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><spa [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public Boolean match(final List<ConditionData> conditionDataList, final ServerWebExchange exchange) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return conditionDataList</span></span><span class="token-line" style="color:#393A34"><span class="t [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //calling the Utility class and invoke the LoadBalance processing.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> Upstream upstream = LoadBalancerFactory.selector(upstreamList, ruleHandle.getLoadBalance(), ip);</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p> [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * judge conditionData and realData is match.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param conditionData {@linkplain ConditionData}</span></span><span class="t [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain">contains=org.apache.shenyu.plugin.base.condition.judge.ContainsPredicateJudge</span></span><span class="token-line" style="color:#393A34"><span class="token plain">Groovy=org.apache.shenyu.plugin.base.condition.judge.GroovyPredicateJudge</span></span><span class="token-line" style="color:#393A34"><span class="token plain">match=org.apache.shenyu.plugin.base.condition.judge.MatchPredicateJudge</span></s [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">contains=org.apache.shenyu.plugin.base.condition.judge.ContainsPredicateJudge</span></span><span class="token-line" style="color:#393A34"><span class="token plain">Groovy=org.apache.shenyu.plugin.base.condition.judge.GroovyPredicateJudge</span></span><span class="token-line" style="color:#393A34"><span class="token plain">match=org.apache.shenyu.plugin.base.condition.judge.MatchPredicateJudge</span></s [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * get Key resolver's name.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @return Key resolver's name</span></span><span class="token-line" style="color:#393 [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * resolve.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param exchange exchange the current server exchange {@linkplain ServerWebExchange}</span></span><span class= [...]
+</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p><code>@SPI</code> registers the current interface as Apache Shenyu SPI. Method <code>resolve(ServerWebExchange exchange)</code> is used to provide the resolution way. Currently there are two key resolvers in <code>RateLimiterKeyResolver</code> <code>SPI</code>:<code>WholeKeyResolve</code> and <code>RemoteAddrKeyResolver</code>. The res [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">local capacity = tonumber(ARGV[2])</span></span><span class="token-line" style="color:#393A34"><span class="token plain">local timestamp = tonumber(ARGV[3])</span></span><span class="token-line" style="color:#393A34"><span class="token plain">local id = KEYS[2]</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div> [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">if count < capacity then</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> redis.call("zadd", key, timestamp, id)</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> allowed = 1</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> count = count + 1</span></span><span class="token-li [...]
+</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>The filled_tokens is produced evenly by time interval * rate,if the number of tokens greater than requests, then allowed=1, and update new_tokens.</p><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI lua"><pre tabindex="0" class="prism-code language-lua codeBlock_rtdJ thin-scrollbar" style="color:#393A34;background-color [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">return { allowed_num, new_tokens }</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>Here <code>now</code> is current time parameters passed in, set <code>tokens_key</code> to hold the string <code>new_tokens</code> and set<code>tokens_key</code> to timeout after <code>ttl</code> of seconds. Set <code>ti [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">return { allowed_num, remain_request }</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>Previously has set <code>window_time</code>=1, using <code>zremrangebyscore</code> command of Redis to remove all the elements in the sorted set stored at <code>tokens_key</code> with a score in [0,now - window_size / w [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">ServiceLoader<Driver> loader = ServiceLoader.load(Driver.class)</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>The underlying implementation involves classloading, the parent delegate model, and so on, which I won't expand here. Based on this design idea, many mainstream frameworks self-impleme [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Value string.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @return the string</span></span><span class="token-line" style="color:#393A34"><span class="token plain" [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Indicates that the object joined by @Join is a singleton,</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * otherwise a completely new instance is created each time.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @r [...]
@@ -76,7 +76,7 @@ It can be seen from the formula that the final weight(<code>ww</code>) is propor
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Gets Extension.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param <T> the type parameter</span></span><span class="token-line" style="color:#393A34"><spa [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public <T> T getExtension(final String key, final Class<T> clazz) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return Optional.ofNullable(clazz) // 入参clazz非空</span></span><span class="token-line" style="color:#393A34"><span class="token [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"># then load it with ExtensionLoader</span></span><span class="token-line" style="color:#393A34"><span class="token plain">ExtensionFactory extensionFactory = ExtensionLoader.getExtensionLoader(ExtensionFactory.class).getDefaultJoin();</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>Once you have an 'E [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/tags/websocket/index.html b/blog/tags/websocket/index.html
index 7434435ac6..59587fd35f 100644
--- a/blog/tags/websocket/index.html
+++ b/blog/tags/websocket/index.html
@@ -9,12 +9,12 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">One post tagged with "websocket" | Apache ShenYu</title><meta data-react-helmet="true" property="og:title" content="One post tagged with "websocket" | Apache ShenYu"><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//blog/tags/websocket"><meta data-react-helmet="true" name="docsearch:language" co [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
+<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> } else {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // update data, delete and then insert</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> selectorCount = selectorMapper.updateSelective(selectorDO);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // update upstream</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> updateDivideUpstream(selectorDO);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return selectorCount;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" styl [...]
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>In the <code>Service</code> class to persist data, i.e. to the database, this should be familiar, not expand. The update upstream operation is analyzed in the corresponding section below, focusing on the publish event operation, which performs data synchronization.</p><p>The logic of the <code>publishEvent()</code> method is to find the plugi [...]
@@ -56,7 +56,7 @@
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Execute after receiving the message</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public void onMessage(final String result) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // handle data</span></span><span [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // handle data</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> websocketDataHandler.executor(groupEnum, json, eventType);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span><span class="token-line" style="colo [...]
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="5-summary"></a>5. Summary<a class="hash-link" href="#5-summary" title="Direct link to heading">#</a></h3><p>This paper through a practical case, the data synchronization principle of websocket source code analysis. The main knowledge points involved are as follows:</p> [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/tags/zookeeper/index.html b/blog/tags/zookeeper/index.html
index e5a07c9226..384e207b0b 100644
--- a/blog/tags/zookeeper/index.html
+++ b/blog/tags/zookeeper/index.html
@@ -9,12 +9,12 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">One post tagged with "zookeeper" | Apache ShenYu</title><meta data-react-helmet="true" property="og:title" content="One post tagged with "zookeeper" | Apache ShenYu"><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//blog/tags/zookeeper"><meta data-react-helmet="true" name="docsearch:language" co [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
+<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> } else {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // update data, delete and then insert</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> selectorCount = selectorMapper.updateSelective(selectorDO);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // update upstream</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> updateDivideUpstream(selectorDO);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return selectorCount;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" styl [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //......</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_W [...]
@@ -42,7 +42,7 @@
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public void handleDataChange(final String dataPath, final Object data) { // update</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //omit implementation logic, is actually the CommonPluginDataSubscriber operation, can connect wit [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public void handleDataDeleted(final String dataPath) { // delete</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Omit implementation logic, is actually the CommonPluginDataSubscriber operation, can connect with the front</sp [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> });</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span></span><span class="token-line" style="color:#393A34"><span class="token plain">} </span></span></cod [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/community/code-suggestions/index.html b/community/code-suggestions/index.html
index 0e2039cf24..1d9402429d 100644
--- a/community/code-suggestions/index.html
+++ b/community/code-suggestions/index.html
@@ -9,8 +9,8 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Code Suggestions | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//community/code-suggestions"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="current"><meta data-react-helmet="true" name="docsearch:docusau [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -44,8 +44,8 @@ current : </p><div class="codeBlockContainer_J+bg"><div class="codeBlockContent
current : </p><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI"><pre tabindex="0" class="prism-code language-undefined codeBlock_rtdJ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_1zSZ"><span class="token-line" style="color:#393A34"><span class="token plain">public Collection<String> getA(final String b) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> Collection<String& [...]
current :</p><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI"><pre tabindex="0" class="prism-code language-undefined codeBlock_rtdJ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_1zSZ"><span class="token-line" style="color:#393A34"><span class="token plain">private Collection<String> doXxx(final Collection<String> a, final Object<?> b) {</span></span><span class="token-line" style="color:#393A34"><span c [...]
current : <code>return null == a ? Optional.empty() : Optional.ofNullable(a.getXXX());</code><br>
-recommendation : <code>return Optional.ofNullable(a).map(e -> e.getXXX());</code></p></li></ul></div><footer class="row docusaurus-mt-lg"><div class="col"><a href="https://github.com/apache/shenyu-website/edit/main/community/1-code-suggestions.md" target="_blank" rel="noreferrer noopener"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_mS5F" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1. [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+recommendation : <code>return Optional.ofNullable(a).map(e -> e.getXXX());</code></p></li></ul></div><footer class="row docusaurus-mt-lg"><div class="col"><a href="https://github.com/apache/shenyu-website/edit/main/community/1-code-suggestions.md" target="_blank" rel="noreferrer noopener"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_mS5F" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1. [...]
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/community/committer/index.html b/community/committer/index.html
index b4afa2e037..e662324ec7 100644
--- a/community/committer/index.html
+++ b/community/committer/index.html
@@ -9,8 +9,8 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Committer Guide | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//community/committer"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="current"><meta data-react-helmet="true" name="docsearch:docusaurus_tag" [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -51,8 +51,8 @@
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">Here is the guideline for sign icla:</span></span><span class="token-line" style="color:#393A34"><span class="token plain">https://shenyu.apache.org/community/icla</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">Here is the guideline for all of the Apache ShenYu committers:</span></span><span class="token-line" style="color:#393A34"><span class="token plain">https://shenyu.apache.org/community/committer</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><ul><li><p>If nominee have not signed the ICLA, Please follow the < [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">The Project Management Committee (PMC) for Apache ShenYu</span></span><span class="token-line" style="color:#393A34"><span class="token plain">has invited (Nominee) to become a committer and we are pleased to</span></span><span class="token-line" style="color:#393A34"><span class="token plain">announce that he has accepted.</span></span><span class="token-line" style="color:#393A34"><span class="token [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain">(Nominee) is active in the Apache ShenYu community, hope to see your</span></span><span class="token-line" style="color:#393A34"><span class="token plain">further interactions with the community!</span></span><span class="token-line" style="color:#393A34"><span class="token plain">Thanks for your contributions.</span></span><span class="token-line" style="color:#393A34"><span class="token plain">Best w [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">(Nominee) is active in the Apache ShenYu community, hope to see your</span></span><span class="token-line" style="color:#393A34"><span class="token plain">further interactions with the community!</span></span><span class="token-line" style="color:#393A34"><span class="token plain">Thanks for your contributions.</span></span><span class="token-line" style="color:#393A34"><span class="token plain">Best w [...]
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/community/community/index.html b/community/community/index.html
index 1cc6c2c998..b55c620dac 100644
--- a/community/community/index.html
+++ b/community/community/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Community | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//community/community"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="current"><meta data-react-helmet="true" name="docsearch:docusaurus_tag" conte [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/community/contributor-guide/index.html b/community/contributor-guide/index.html
index 8110b17d11..9c20f8261d 100644
--- a/community/contributor-guide/index.html
+++ b/community/contributor-guide/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Contributor Guide | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//community/contributor-guide"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="current"><meta data-react-helmet="true" name="docsearch:docus [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/community/create-repository/index.html b/community/create-repository/index.html
index d36256e534..b34db3416b 100644
--- a/community/create-repository/index.html
+++ b/community/create-repository/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Create Git repository | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//community/create-repository"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="current"><meta data-react-helmet="true" name="docsearch:d [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/community/faq/index.html b/community/faq/index.html
index 340f1fcee0..b12c2ee504 100644
--- a/community/faq/index.html
+++ b/community/faq/index.html
@@ -9,16 +9,16 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">FAQ | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//community/faq"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="current"><meta data-react-helmet="true" name="docsearch:docusaurus_tag" content="docs-com [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
who left behind the touching story of the three times he crossed the Yellow River for the benefit of the people and successfully managed the flooding of the river.
He is known as one of the three greatest kings of ancient China, along with Yao and Shun.</p><ul><li>Firstly, the name ShenYu is to promote the traditional virtues of our Chinese civilisation.</li><li>Secondly, the most important thing about the gateway is the governance of the traffic.</li><li>Finally, the community will do things in a fair, just, open and meritocratic way, paying tribute to ShenYu while also conforming to the Apache Way.</li></ul><h3><a aria-hidden="true" tabindex="-1" [...]
-Or click "setting" button in system menu, print "Group Policy" to open a new window "Edit Group Policy", and then click 'Computer Configuration' > 'Administrative Templates' > 'System' > 'Filesystem', and then turn on 'Enable Win32 long paths' option.</p></blockquote><p>Reference material:</p><p><a href="https://docs.microsoft.com/zh-cn/windows/desktop/FileIO/naming-a-file" target="_blank" rel="noope [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+Or click "setting" button in system menu, print "Group Policy" to open a new window "Edit Group Policy", and then click 'Computer Configuration' > 'Administrative Templates' > 'System' > 'Filesystem', and then turn on 'Enable Win32 long paths' option.</p></blockquote><p>Reference material:</p><p><a href="https://docs.microsoft.com/zh-cn/windows/desktop/FileIO/naming-a-file" target="_blank" rel="noope [...]
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/community/icla/index.html b/community/icla/index.html
index 6e8cfddddf..4e5dd5f600 100644
--- a/community/icla/index.html
+++ b/community/icla/index.html
@@ -9,16 +9,16 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Sign ICLA Guide | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//community/icla"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="current"><meta data-react-helmet="true" name="docsearch:docusaurus_tag" cont [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
A signed ICLA is required to be on file before an individual is given commit rights to any ASF project.</p><p>If you have already signed an Apache ICLA, no need to send an email. As you have already submitted an ICLA under your public name, no need to resubmit it. If you have never signed an ICLA, please indicate this in your email, and PMC can apply for this account directly.</p><p>The process of submitting ICLA are:</p><p><strong>1. First, click the link <a href="https://www.apache.org [...]
Apache only accept hand-written signature or <a href="https://pdf.yozocloud.cn/p/pdfaddsign" target="_blank" rel="noopener noreferrer">PDF signature software</a></p><p><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAiAAAAAiCAYAAABm3mI+AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAhGVYSWZNTQAqAAAACAAFARIAAwAAAAEAAQAAARoABQAAAAEAAABKARsABQAAAAEAAABSASgAAwAAAAEAAgAAh2kABAAAAAEAAABaAAAAAAAAAGAAAAABAAAAYAAAAAEAA6ABAAMAAAABAAEAAKACAAQAAAABAAACIKAD [...]
-<img src="/assets/images/email_template-72b5a732dc0150f31cd2c3769616765f.png"></p><p>addressee</p><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI"><pre tabindex="0" class="prism-code language-undefined codeBlock_rtdJ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_1zSZ"><span class="token-line" style="color:#393A34"><span class="token plain">secretary@apache.org</span></span></code></pre><button type="button" aria-label="C [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<img src="/assets/images/email_template-72b5a732dc0150f31cd2c3769616765f.png"></p><p>addressee</p><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI"><pre tabindex="0" class="prism-code language-undefined codeBlock_rtdJ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_1zSZ"><span class="token-line" style="color:#393A34"><span class="token plain">secretary@apache.org</span></span></code></pre><button type="button" aria-label="C [...]
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/community/issue-pr/index.html b/community/issue-pr/index.html
index 39aaf9df61..a008e02ad2 100644
--- a/community/issue-pr/index.html
+++ b/community/issue-pr/index.html
@@ -9,16 +9,16 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Issue And Pull Request | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//community/issue-pr"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="current"><meta data-react-helmet="true" name="docsearch:docusauru [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
...</li></ul><p><code><module></code>: Any of the modules belonging to the Apache ShenYu project,Please strictly follow the name of the project, Including but not limited to the following:</p><ul><li>admin</li><li>client</li><li>common</li><li>metrics</li><li>spi</li><li>plugin-grpc</li><li>plugin-alibaba-dubbo</li><li>register-client-nacos
...</li></ul><p><code><body></code>:Short description for commit messages. Please note the following rules:</p><ul><li><p>No need for any capitalized words</p></li><li><p>Please end with <code>.</code></p></li></ul><p>for example:</p><ul><li>refactor admin : modify some error log.</li><li>fix plugin-grpc : modify result error.</li><li>feature plugin-alibaba-dubbo : add request for tag router.</li></ul><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id=" [...]
-...</li></ul><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="merged-pull-request"></a>Merged Pull Request<a class="hash-link" href="#merged-pull-request" title="Direct link to heading">#</a></h2><ul><li><p>All pull request must be approve and review.</p></li><li><p>Give appropriate advice whenever possible.</p></li><li><p>In general, pull request should be marked with 2 Lable and must set milestone.</p></li><li><p>After the merge is completed, need to che [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+...</li></ul><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="merged-pull-request"></a>Merged Pull Request<a class="hash-link" href="#merged-pull-request" title="Direct link to heading">#</a></h2><ul><li><p>All pull request must be approve and review.</p></li><li><p>Give appropriate advice whenever possible.</p></li><li><p>In general, pull request should be marked with 2 Lable and must set milestone.</p></li><li><p>After the merge is completed, need to che [...]
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/community/pmc/index.html b/community/pmc/index.html
index 0147493486..2f5aa5f0a2 100644
--- a/community/pmc/index.html
+++ b/community/pmc/index.html
@@ -9,8 +9,8 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">PMC Guide | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//community/pmc"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="current"><meta data-react-helmet="true" name="docsearch:docusaurus_tag" content="do [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -37,8 +37,8 @@
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">(vote result thread refer to https://lists.apache.org/list?private@shenyu.apache.org)</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p><strong>2. Add the new PMC to <a href="https://whimsy.apache.org/roster/committee/shenyu" target="_blank" rel="noopener noreferrer">roster</a></strong></p><p><strong>3. Notify the new PMC members to subscribe to the private mailing list:<a href="mailto:private-subscribe@shenyu.apache.org" target="_blank" rel="noopener noreferrer">private-subsc [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">The Project Management Committee (PMC) for Apache ShenYu</span></span><span class="token-line" style="color:#393A34"><span class="token plain">has invited (Nominee) to become a member and we are pleased to</span></span><span class="token-line" style="color:#393A34"><span class="token plain">announce that he has accepted.</span></span><span class="token-line" style="color:#393A34"><span class="token pla [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain">(Nominee) is active in the Apache ShenYu community, hope to see your</span></span><span class="token-line" style="color:#393A34"><span class="token plain">further interactions with the community!</span></span><span class="token-line" style="color:#393A34"><span class="token plain">Thanks for your contributions.</span></span><span class="token-line" style="color:#393A34"><span class="token plain">Best w [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">(Nominee) is active in the Apache ShenYu community, hope to see your</span></span><span class="token-line" style="color:#393A34"><span class="token plain">further interactions with the community!</span></span><span class="token-line" style="color:#393A34"><span class="token plain">Thanks for your contributions.</span></span><span class="token-line" style="color:#393A34"><span class="token plain">Best w [...]
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/community/release-guide/index.html b/community/release-guide/index.html
index 146c8c612b..ef2d6e4dd8 100644
--- a/community/release-guide/index.html
+++ b/community/release-guide/index.html
@@ -9,8 +9,8 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Release Guide | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//community/release-guide"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="current"><meta data-react-helmet="true" name="docsearch:docusaurus_ta [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -70,8 +70,8 @@ We just need to pay attention to whether the workflow is successfully executed.
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="reissue-not-required"></a>Reissue (not required)<a class="hash-link" href="#reissue-not-required" title="Direct link to heading">#</a></h2><blockquote><p>Note: You only need to republish if the vote did not pass.</p></blockquote><p><strong>1. Cancellation of voting ema [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">I'm cancelling this vote because of xxxxxx issues. I'll fix them and start the round ${n} vote process.</span></span><span class="token-line" style="color:#393A34"><span class="token plain">The detail of the modifications are as follows:</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">1. xxxxxx</span></span><span class="token-line" style="color:#393A34"><span class="token plain">2. xxxxxx</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain">Thanks a lot for all your help.</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p><strong>2. Clean stagingRepositories</strong></p><p>Go to <a href="https://repository.apache.org/#stagingRepositories" target="_blank" rel="noopener noreferrer">https://repository.apache.org/#stagingRepositories</a>, After logg [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">Thanks a lot for all your help.</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p><strong>2. Clean stagingRepositories</strong></p><p>Go to <a href="https://repository.apache.org/#stagingRepositories" target="_blank" rel="noopener noreferrer">https://repository.apache.org/#stagingRepositories</a>, After logg [...]
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/community/shenyu-client-dotnet-release-guide/index.html b/community/shenyu-client-dotnet-release-guide/index.html
index 8d6bc03326..a135c5459f 100644
--- a/community/shenyu-client-dotnet-release-guide/index.html
+++ b/community/shenyu-client-dotnet-release-guide/index.html
@@ -9,8 +9,8 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">ShenYu client .NET Release Guide | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//community/shenyu-client-dotnet-release-guide"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="current"><meta data-react-hel [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -74,8 +74,8 @@
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="reissue-not-required"></a>Reissue (not required)<a class="hash-link" href="#reissue-not-required" title="Direct link to heading">#</a></h2><blockquote><p>Note: You only need to republish if the vote did not pass.</p></blockquote><p><strong>1. Cancellation of voting ema [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">I'm cancelling this vote because of xxxxxx issues. I'll fix them and start the round ${n} vote process.</span></span><span class="token-line" style="color:#393A34"><span class="token plain">The detail of the modifications are as follows:</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">1. xxxxxx</span></span><span class="token-line" style="color:#393A34"><span class="token plain">2. xxxxxx</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain">Thanks a lot for all your help.</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p><strong>2. Clean stagingRepositories</strong></p><p>Go to <a href="https://repository.apache.org/#stagingRepositories" target="_blank" rel="noopener noreferrer">https://repository.apache.org/#stagingRepositories</a>, After logg [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">Thanks a lot for all your help.</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p><strong>2. Clean stagingRepositories</strong></p><p>Go to <a href="https://repository.apache.org/#stagingRepositories" target="_blank" rel="noopener noreferrer">https://repository.apache.org/#stagingRepositories</a>, After logg [...]
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/community/shenyu-client-golang-release-guide/index.html b/community/shenyu-client-golang-release-guide/index.html
index 67f8a074ea..7399303234 100644
--- a/community/shenyu-client-golang-release-guide/index.html
+++ b/community/shenyu-client-golang-release-guide/index.html
@@ -9,8 +9,8 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">ShenYu client Golang Release Guide | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//community/shenyu-client-golang-release-guide"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="current"><meta data-react-h [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -64,8 +64,8 @@
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="reissue-not-required"></a>Reissue (not required)<a class="hash-link" href="#reissue-not-required" title="Direct link to heading">#</a></h2><blockquote><p>Note: You only need to republish if the vote did not pass.</p></blockquote><p><strong>1. Cancellation of voting ema [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">I'm cancelling this vote because of xxxxxx issues. I'll fix them and start the round ${n} vote process.</span></span><span class="token-line" style="color:#393A34"><span class="token plain">The detail of the modifications are as follows:</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">1. xxxxxx</span></span><span class="token-line" style="color:#393A34"><span class="token plain">2. xxxxxx</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain">Thanks a lot for all your help.</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p><strong>2. Clean stagingRepositories</strong></p><p>Go to <a href="https://repository.apache.org/#stagingRepositories" target="_blank" rel="noopener noreferrer">https://repository.apache.org/#stagingRepositories</a>, After logg [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">Thanks a lot for all your help.</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p><strong>2. Clean stagingRepositories</strong></p><p>Go to <a href="https://repository.apache.org/#stagingRepositories" target="_blank" rel="noopener noreferrer">https://repository.apache.org/#stagingRepositories</a>, After logg [...]
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/community/shenyu-nginx-release-guide/index.html b/community/shenyu-nginx-release-guide/index.html
index cd62d8678d..c392c601c2 100644
--- a/community/shenyu-nginx-release-guide/index.html
+++ b/community/shenyu-nginx-release-guide/index.html
@@ -9,8 +9,8 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">ShenYu nginx Release Guide | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//community/shenyu-nginx-release-guide"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="current"><meta data-react-helmet="true" nam [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -68,8 +68,8 @@
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="reissue-not-required"></a>Reissue (not required)<a class="hash-link" href="#reissue-not-required" title="Direct link to heading">#</a></h2><blockquote><p>Note: You only need to republish if the vote did not pass.</p></blockquote><p><strong>1. Cancellation of voting ema [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">I'm cancelling this vote because of xxxxxx issues. I'll fix them and start the round ${n} vote process.</span></span><span class="token-line" style="color:#393A34"><span class="token plain">The detail of the modifications are as follows:</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">1. xxxxxx</span></span><span class="token-line" style="color:#393A34"><span class="token plain">2. xxxxxx</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain">Thanks a lot for all your help.</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p><strong>2. Clean stagingRepositories</strong></p><p>Go to <a href="https://repository.apache.org/#stagingRepositories" target="_blank" rel="noopener noreferrer">https://repository.apache.org/#stagingRepositories</a>, After logg [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">Thanks a lot for all your help.</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p><strong>2. Clean stagingRepositories</strong></p><p>Go to <a href="https://repository.apache.org/#stagingRepositories" target="_blank" rel="noopener noreferrer">https://repository.apache.org/#stagingRepositories</a>, After logg [...]
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/community/shenyu-wasm-release-guide/index.html b/community/shenyu-wasm-release-guide/index.html
index 9169678fbf..df167bd8f7 100644
--- a/community/shenyu-wasm-release-guide/index.html
+++ b/community/shenyu-wasm-release-guide/index.html
@@ -9,8 +9,8 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">ShenYu WASM Release Guide | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//community/shenyu-wasm-release-guide"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="current"><meta data-react-helmet="true" name= [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -65,8 +65,8 @@
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="reissue-not-required"></a>Reissue (not required)<a class="hash-link" href="#reissue-not-required" title="Direct link to heading">#</a></h2><blockquote><p>Note: You only need to republish if the vote did not pass.</p></blockquote><p><strong>1. Cancellation of voting ema [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">I'm cancelling this vote because of xxxxxx issues. I'll fix them and start the round ${n} vote process.</span></span><span class="token-line" style="color:#393A34"><span class="token plain">The detail of the modifications are as follows:</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">1. xxxxxx</span></span><span class="token-line" style="color:#393A34"><span class="token plain">2. xxxxxx</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain">Thanks a lot for all your help.</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p><strong>2. Clean stagingRepositories</strong></p><p>Go to <a href="https://repository.apache.org/#stagingRepositories" target="_blank" rel="noopener noreferrer">https://repository.apache.org/#stagingRepositories</a>, After logg [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">Thanks a lot for all your help.</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p><strong>2. Clean stagingRepositories</strong></p><p>Go to <a href="https://repository.apache.org/#stagingRepositories" target="_blank" rel="noopener noreferrer">https://repository.apache.org/#stagingRepositories</a>, After logg [...]
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/community/use-apache-email/index.html b/community/use-apache-email/index.html
index fa07f29ed7..62f7997ac1 100644
--- a/community/use-apache-email/index.html
+++ b/community/use-apache-email/index.html
@@ -9,16 +9,16 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">How to use Apache email | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//community/use-apache-email"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="current"><meta data-react-helmet="true" name="docsearch: [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">Good news! We have created your Apache Software Foundation (ASF) committer account, and it is now ready for you.</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">Your ApacheID is: xxxx</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain">......</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div></li><li><p>Apparently your Apache email is <code>xxxx@apache.org</code></p></li></ul><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="5-add-apache-email"></a>5. Add Apache email<a class="hash-link" href="#5-add-apache-email" [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">......</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div></li><li><p>Apparently your Apache email is <code>xxxx@apache.org</code></p></li></ul><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="5-add-apache-email"></a>5. Add Apache email<a class="hash-link" href="#5-add-apache-email" [...]
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/community/user-registration/index.html b/community/user-registration/index.html
index 9c01ca08a2..b734da3f39 100644
--- a/community/user-registration/index.html
+++ b/community/user-registration/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">User Registration | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//community/user-registration"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="current"><meta data-react-helmet="true" name="docsearch:docus [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/admin/dictionary-management/index.html b/docs/2.3.0-Legacy/admin/dictionary-management/index.html
index dd30dc4724..b2bdc8adbf 100644
--- a/docs/2.3.0-Legacy/admin/dictionary-management/index.html
+++ b/docs/2.3.0-Legacy/admin/dictionary-management/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Dict Management | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/admin/dictionary-management"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Legacy"><meta data-react-helmet="true" [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/admin/plugin-handle-explanation/index.html b/docs/2.3.0-Legacy/admin/plugin-handle-explanation/index.html
index 897f18b8ad..59128387dd 100644
--- a/docs/2.3.0-Legacy/admin/plugin-handle-explanation/index.html
+++ b/docs/2.3.0-Legacy/admin/plugin-handle-explanation/index.html
@@ -9,15 +9,15 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Plugin Handle Explanation | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/admin/plugin-handle-explanation"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Legacy"><meta data-react- [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
Configure the corresponding entity class as follows:</p><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI java"><pre tabindex="0" class="prism-code language-java codeBlock_rtdJ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_1zSZ"><span class="token-line" style="color:#393A34"><span class="token plain"> public class SpringCloudRuleHandle implements RuleHandle {</span></span><span class="token-line" style="color:#393A34">< [...]
<img src="https://yu199195.github.io/images/soul/plugin-manager.png"></p><p><strong>step2.</strong> Add a string type field path and a numeric type TIMEOUT</p><p><img src="https://yu199195.github.io/images/soul/add-plugin-handle.png"></p><p><strong>step3.</strong> Finally, you can enter path, TIMEOUT and commit to the handle field when you add a rule in the plugin rule configuration page</p><p><img src="https://yu199195.github.io/images/soul/springcloud-rule-handle.png"></p><p><em>Note: [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/admin/selector-and-rule/index.html b/docs/2.3.0-Legacy/admin/selector-and-rule/index.html
index 42421f1e1f..2e39137ee7 100644
--- a/docs/2.3.0-Legacy/admin/selector-and-rule/index.html
+++ b/docs/2.3.0-Legacy/admin/selector-and-rule/index.html
@@ -9,14 +9,14 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Selector Detailed Explanation | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/admin/selector-and-rule"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Legacy"><meta data-react-helm [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</p></li></ul><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="condition-explanation"></a>Condition Explanation<a class="hash-link" href="#condition-explanation" title="Direct link to heading">#</a></h2><ul><li><p>uri matching (recommend)</p><ul><li><p>uri matching is based on your request uri, the frontend won't change anything before accessing the gateway.</p></li><li><p>the <code>match</code> filter method is the same with<code>springmvc</code> fuzzy [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/design/config/index.html b/docs/2.3.0-Legacy/design/config/index.html
index e6f325bdea..3e137e12c3 100644
--- a/docs/2.3.0-Legacy/design/config/index.html
+++ b/docs/2.3.0-Legacy/design/config/index.html
@@ -9,14 +9,14 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Configuration Flow Introduction | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/design/config"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Legacy"><meta data-react-helmet="true [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
<img src="https://yu199195.github.io/images/soul/plugin-data.png"></p></li></ul><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="feature"></a>Feature<a class="hash-link" href="#feature" title="Direct link to heading">#</a></h2><ul><li>All the configurations of user can be dynamically updated, there is no need to restart the service for any modification.</li><li>Local cache is used to provide efficient performance during high concurrency.</li></ul></div><foot [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/design/data-sync/index.html b/docs/2.3.0-Legacy/design/data-sync/index.html
index 17ea2aaf55..583a4a4821 100644
--- a/docs/2.3.0-Legacy/design/data-sync/index.html
+++ b/docs/2.3.0-Legacy/design/data-sync/index.html
@@ -9,8 +9,8 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Data Synchronization Design | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/design/data-sync"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Legacy"><meta data-react-helmet="true" [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -19,7 +19,7 @@
<img src="https://bestkobe.gitee.io/images/soul/config-strage-processor.png?_t=201908032339" alt="Soul Configuration Synchronization Strategy Flow Chart"></li></ul><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="zookeeper-synchronization"></a>Zookeeper Synchronization<a class="hash-link" href="#zookeeper-synchronization" title="Direct link to heading">#</a></h2><p>The zookeeper-based synchronization principle is very simple,it mainly depends on <code>zookee [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public WebsocketSyncCache(final SoulConfig.WebsocketConfig websocketConfig) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(1,</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> SoulThreadFactory.create("websocket-connect" [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Servlet3.0 asynchronously responds to http request</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> final AsyncContext asyncContext = request.startAsync();</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> asyncContext.setTimeout(0L);</span></span><span class="token-line" style="color:#393A34"><span class="token pla [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/design/database-design/index.html b/docs/2.3.0-Legacy/design/database-design/index.html
index 547f24b370..eb2f8d5fca 100644
--- a/docs/2.3.0-Legacy/design/database-design/index.html
+++ b/docs/2.3.0-Legacy/design/database-design/index.html
@@ -9,15 +9,15 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Database Design | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/design/database-design"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Legacy"><meta data-react-helmet="true" name= [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
<img src="/assets/images/soul-db-0847449c4fb817f83e61abad7125ae4a.png"></p></li><li><p>Detailed design:</p><ul><li><p>One plugin corresponds to multiple selectors,one selector corresponds to multiple rules.</p></li><li><p>One selector corresponds to multiple match conditions,one rule corresponds to multiple match conditions.</p></li><li><p>Each rule handles differently in corresponding plugin according to field handler,field handler is a kind of data of JSON string type.You can view deta [...]
<img src="/assets/images/soul-permission-db-90c870eefea0da663079cdf6638c7ce7.png"></p></li><li><p>Detailed design:</p><ul><li>one user corresponds to multiple role,one role corresponds to multiple resources.</li></ul></li></ul></div><footer class="row docusaurus-mt-lg"><div class="col"><a href="https://github.com/apache/shenyu-website/edit/main/versioned_docs/version-2.3.0-Legacy/design/database-design.md" target="_blank" rel="noreferrer noopener"><svg fill="currentColor" height="20" wid [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/design/meta-data/index.html b/docs/2.3.0-Legacy/design/meta-data/index.html
index a33f959cd1..58b9bc471a 100644
--- a/docs/2.3.0-Legacy/design/meta-data/index.html
+++ b/docs/2.3.0-Legacy/design/meta-data/index.html
@@ -9,14 +9,14 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">MetaData Concept Design | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/design/meta-data"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Legacy"><meta data-react-helmet="true" nam [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><ul><li><p>Metadata design as below,the most important is using it in dubbo's generalization call.</p></li><li><p>Pay attention to the field <code>path</code>,we will match specific data according to your field path during requesting gateway,and then carry out the follow-up process.</p></li><li><p>Pay attention to the field <code>rpc_ext</co [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/developer-guide/custom-filter/index.html b/docs/2.3.0-Legacy/developer-guide/custom-filter/index.html
index 0ba78de2fb..6418620c23 100644
--- a/docs/2.3.0-Legacy/developer-guide/custom-filter/index.html
+++ b/docs/2.3.0-Legacy/developer-guide/custom-filter/index.html
@@ -9,8 +9,8 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Filter Extension | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/developer-guide/custom-filter"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Legacy"><meta data-react-helmet="tru [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public Mono<Void> filter(@Nullable final ServerWebExchange exchange, @Nullable final WebFilterChain chain) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> ServerHttpRequest request = Objects.requireNonNull(exchange).getRequest();</span></span><spa [...]
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="extending-orgdromarasoulwebfilterabstractwebfilter"></a>Extending <code>org.dromara.soul.web.filter.AbstractWebFilter</code><a class="hash-link" href="#extending-orgdromarasoulwebfilterabstractwebfilter" title="Direct link to heading">#</a></h2><ul><li>Add a new class [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * this is Template Method ,children Implement your own And response client.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param exchange the current server exchange. [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/developer-guide/custom-parsing-ip-and-host/index.html b/docs/2.3.0-Legacy/developer-guide/custom-parsing-ip-and-host/index.html
index 49a3297de1..f22e2d6aff 100644
--- a/docs/2.3.0-Legacy/developer-guide/custom-parsing-ip-and-host/index.html
+++ b/docs/2.3.0-Legacy/developer-guide/custom-parsing-ip-and-host/index.html
@@ -9,15 +9,15 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Fetching Correct IP Address And Host | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/developer-guide/custom-parsing-ip-and-host"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Leg [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Resolve inet socket address.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param exchange the exchange</span></span><span class="token-line" style="color:#393A34"> [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><ul><li>Register defined class as a Spring Bean.</li></ul><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI java"><pre tabindex="0" class="prism-code language-java codeBlock_rtdJ thin-scrollbar" style="color:#393A34;background-color:#f6f8f [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/developer-guide/custom-plugin/index.html b/docs/2.3.0-Legacy/developer-guide/custom-plugin/index.html
index c78a2a3f4d..374e6052f2 100644
--- a/docs/2.3.0-Legacy/developer-guide/custom-plugin/index.html
+++ b/docs/2.3.0-Legacy/developer-guide/custom-plugin/index.html
@@ -9,8 +9,8 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Custom Plugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/developer-guide/custom-plugin"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Legacy"><meta data-react-helmet="true" [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -23,7 +23,7 @@
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /*</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Then do your own business processing.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * The last execution chain.execute(exchange).</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Let it continue on t [...]
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><ul><li><p>Detailed explanation:</p><ul><li><p>Plugins will match the selector rule for customized plugins inherit from this abstract class. Following steps guide you to config your plugins.</p></li><li><p>Firstly define a new plugin in <code>soul-admin</code>, please mind that your plugin name should match the named() method overridden in your c [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> protected Mono<Void> handleRuleIsNull(final String pluginName, </span></span><span class="token-line" style="color:#393A34"><span class="token plain"> final ServerWebExchange exchange, </span></span><span class="token-line" style="color:#393A34"><span cl [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/developer-guide/custom-result/index.html b/docs/2.3.0-Legacy/developer-guide/custom-result/index.html
index 655cd40300..249136b5fd 100644
--- a/docs/2.3.0-Legacy/developer-guide/custom-result/index.html
+++ b/docs/2.3.0-Legacy/developer-guide/custom-result/index.html
@@ -9,8 +9,8 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Custom Response | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/developer-guide/custom-result"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Legacy"><meta data-react-helmet="true [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><ul><li>The returned json as follows:</li></ul><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI json"><pre tabindex="0" class="prism-code language-json codeBlock_rtdJ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code cl [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Error t.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param code the code</span></span><span class="token-line" style="color:#393A34"><span class="token pl [...]
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><ul><li><code>T</code> is a generic parameter for your response data.</li><li>Register defined class as a Spring Bean.</li></ul><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI java"><pre tabindex="0" class="prism-code language-java codeBlock_rtdJ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="co [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/developer-guide/custom-sign-algorithm/index.html b/docs/2.3.0-Legacy/developer-guide/custom-sign-algorithm/index.html
index 7501851434..2fa44e8568 100644
--- a/docs/2.3.0-Legacy/developer-guide/custom-sign-algorithm/index.html
+++ b/docs/2.3.0-Legacy/developer-guide/custom-sign-algorithm/index.html
@@ -9,14 +9,14 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Custom Sign Algorithm | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/developer-guide/custom-sign-algorithm"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Legacy"><meta data-reac [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><ul><li>When returning true in Pair, the sign verification passes. If there's false, the String in Pair will be return to the frontend to show.</li><li>Register defined class as a Spring Bean.</li></ul><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI java"><pre tabindex="0" class="prism-code language-java codeBlock_rtdJ [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/developer-guide/developer-soul-client/index.html b/docs/2.3.0-Legacy/developer-guide/developer-soul-client/index.html
index 515c874803..f4d2c88007 100644
--- a/docs/2.3.0-Legacy/developer-guide/developer-soul-client/index.html
+++ b/docs/2.3.0-Legacy/developer-guide/developer-soul-client/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">A multilingual HTTP client | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/developer-guide/developer-soul-client"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Legacy"><meta data [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/developer-guide/file-and-image/index.html b/docs/2.3.0-Legacy/developer-guide/file-and-image/index.html
index dfddc1b476..2471e8b81b 100644
--- a/docs/2.3.0-Legacy/developer-guide/file-and-image/index.html
+++ b/docs/2.3.0-Legacy/developer-guide/file-and-image/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">File Uploading And Downloading | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/developer-guide/file-and-image"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Legacy"><meta data-re [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/developer-guide/soul-optimize/index.html b/docs/2.3.0-Legacy/developer-guide/soul-optimize/index.html
index fc00248d42..acef0a750d 100644
--- a/docs/2.3.0-Legacy/developer-guide/soul-optimize/index.html
+++ b/docs/2.3.0-Legacy/developer-guide/soul-optimize/index.html
@@ -9,15 +9,15 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Soul Optimize | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/developer-guide/soul-optimize"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Legacy"><meta data-react-helmet="true" [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">private static class EventLoopNettyCustomizer implements NettyServerCustomizer {</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public HttpServer apply(final HttpServer httpServer) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return httpServer</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> .tcpConfiguration(tcpServer -> [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/developer-guide/thread/index.html b/docs/2.3.0-Legacy/developer-guide/thread/index.html
index 8ad35764f4..07e57607cf 100644
--- a/docs/2.3.0-Legacy/developer-guide/thread/index.html
+++ b/docs/2.3.0-Legacy/developer-guide/thread/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Thread Model | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/developer-guide/thread"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Legacy"><meta data-react-helmet="true" name="do [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/doc-download/index.html b/docs/2.3.0-Legacy/doc-download/index.html
index 8d792abb43..b573121d7f 100644
--- a/docs/2.3.0-Legacy/doc-download/index.html
+++ b/docs/2.3.0-Legacy/doc-download/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Doc Download | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/doc-download"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Legacy"><meta data-react-helmet="true" name="docsearch:do [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/index/index.html b/docs/2.3.0-Legacy/index/index.html
index 4f555cf364..8f3e721596 100644
--- a/docs/2.3.0-Legacy/index/index.html
+++ b/docs/2.3.0-Legacy/index/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Soul Introduction | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/index"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Legacy"><meta data-react-helmet="true" name="docsearch:docu [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/plugins/context-path-plugin/index.html b/docs/2.3.0-Legacy/plugins/context-path-plugin/index.html
index c4ec479c0c..443ba0b92a 100644
--- a/docs/2.3.0-Legacy/plugins/context-path-plugin/index.html
+++ b/docs/2.3.0-Legacy/plugins/context-path-plugin/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">ContextPath Plugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/plugins/context-path-plugin"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Legacy"><meta data-react-helmet="tru [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/plugins/divide-plugin/index.html b/docs/2.3.0-Legacy/plugins/divide-plugin/index.html
index 956bd761f4..b7ac9ccd58 100644
--- a/docs/2.3.0-Legacy/plugins/divide-plugin/index.html
+++ b/docs/2.3.0-Legacy/plugins/divide-plugin/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Divide Plugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/plugins/divide-plugin"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Legacy"><meta data-react-helmet="true" name="do [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/plugins/dubbo-plugin/index.html b/docs/2.3.0-Legacy/plugins/dubbo-plugin/index.html
index 53a674074e..51e9444bad 100644
--- a/docs/2.3.0-Legacy/plugins/dubbo-plugin/index.html
+++ b/docs/2.3.0-Legacy/plugins/dubbo-plugin/index.html
@@ -9,14 +9,14 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Dubbo Plugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/plugins/dubbo-plugin"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Legacy"><meta data-react-helmet="true" name="docs [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag punctuation" style="color:#393A34">></span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</spa [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/plugins/hystrix-plugin/index.html b/docs/2.3.0-Legacy/plugins/hystrix-plugin/index.html
index 335b4a9465..0ba259dcfe 100644
--- a/docs/2.3.0-Legacy/plugins/hystrix-plugin/index.html
+++ b/docs/2.3.0-Legacy/plugins/hystrix-plugin/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Hystrix Plugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/plugins/hystrix-plugin"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Legacy"><meta data-react-helmet="true" name=" [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/plugins/monitor-plugin/index.html b/docs/2.3.0-Legacy/plugins/monitor-plugin/index.html
index f624c3c4de..f2e4887018 100644
--- a/docs/2.3.0-Legacy/plugins/monitor-plugin/index.html
+++ b/docs/2.3.0-Legacy/plugins/monitor-plugin/index.html
@@ -9,15 +9,15 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Monitor Plugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/plugins/monitor-plugin"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Legacy"><meta data-react-helmet="true" name=" [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
<img src="https://yu199195.github.io/images/soul/soul-metrics.png"></p></li><li><p>Make even tracking in soul gateway by asynchronous or synchronous mode. </p></li><li><p>The <code>prometheus</code> server pulls metrics' through http request, and then displays it by <code>Grafana</code>.</p></li></ul><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="plugin-setting"></a>Plugin Setting<a class="hash-link" href="#plugin-setting" title="Direct link to headin [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># port : Pulled ports for exposing to prometheus service.</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># host : If not filled in, it is the host of soul Gateway.</span><span class=" [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/plugins/rate-limiter-plugin/index.html b/docs/2.3.0-Legacy/plugins/rate-limiter-plugin/index.html
index 6bc54e4e03..ee6d7c2043 100644
--- a/docs/2.3.0-Legacy/plugins/rate-limiter-plugin/index.html
+++ b/docs/2.3.0-Legacy/plugins/rate-limiter-plugin/index.html
@@ -9,8 +9,8 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">RateLimiter Plugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/plugins/rate-limiter-plugin"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Legacy"><meta data-react-helmet="tru [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -18,7 +18,7 @@
<img src="https://yu199195.github.io/images/soul/limiting.png"></li></ul><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="using-redis-leaky-bucket-algorithm-to-limit-traffic"></a>Using redis leaky bucket algorithm to limit traffic.<a class="hash-link" href="#using-redis-leaky-bucket-algorithm-to-limit-traffic" title="Direct link to heading">#</a></h4><ul><li>water (request) go to the leaky bucket first. The leaky bucket goes out at a fixed speed. When the fl [...]
<img src="/assets/images/leakybucket-cc829d5529e0847152a90793867e9f96.png"></li></ul><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="using-redis-sliding-time-window-algorithm-to-limit-traffic"></a>Using redis sliding time window algorithm to limit traffic.<a class="hash-link" href="#using-redis-sliding-time-window-algorithm-to-limit-traffic" title="Direct link to heading">#</a></h4><ul><li>The sliding time window maintains the count value of unit time. When [...]
<img src="/assets/images/sldingwindow-c529b50727afb275845585edb72b0215.png"></li></ul><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="plugin-setting"></a>Plugin Setting<a class="hash-link" href="#plugin-setting" title="Direct link to heading">#</a></h2><ul><li><p>In <code>soul-admin</code>--> plugin management--> <code>rate_limiter</code> set to enable.</p></li><li><p>Configure redis in the plugin.</p></li><li><p>Currently, supporting redis patterns o [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/plugins/redirect-plugin/index.html b/docs/2.3.0-Legacy/plugins/redirect-plugin/index.html
index f46a041ffc..329a6976ed 100644
--- a/docs/2.3.0-Legacy/plugins/redirect-plugin/index.html
+++ b/docs/2.3.0-Legacy/plugins/redirect-plugin/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Redirect Plugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/plugins/redirect-plugin"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Legacy"><meta data-react-helmet="true" name [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/plugins/resilience4j-plugin/index.html b/docs/2.3.0-Legacy/plugins/resilience4j-plugin/index.html
index 1c54a5aa3b..04f34110ed 100644
--- a/docs/2.3.0-Legacy/plugins/resilience4j-plugin/index.html
+++ b/docs/2.3.0-Legacy/plugins/resilience4j-plugin/index.html
@@ -9,14 +9,14 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Resilience4j Plugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/plugins/resilience4j-plugin"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Legacy"><meta data-react-helmet="tr [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
Sliding window can either be 0:count-based or 1:time-based.,default value:0。</p></li><li><p>minimumNumberOfCalls :Configures the minimum number of calls which are required (per sliding window period) before the CircuitBreaker can calculate the error rate or slow call rate,default value:100。</p></li><li><p>waitIntervalFunctionInOpenState :Configures the circuitBreaker time(ms) of duration,default value:10。</p></li><li><p>permittedNumberOfCallsInHalfOpenState :Configures the number of perm [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/plugins/rewrite-plugin/index.html b/docs/2.3.0-Legacy/plugins/rewrite-plugin/index.html
index ec4f00e539..aa984f3f14 100644
--- a/docs/2.3.0-Legacy/plugins/rewrite-plugin/index.html
+++ b/docs/2.3.0-Legacy/plugins/rewrite-plugin/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Rewrite Plugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/plugins/rewrite-plugin"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Legacy"><meta data-react-helmet="true" name=" [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/plugins/sentinel-plugin/index.html b/docs/2.3.0-Legacy/plugins/sentinel-plugin/index.html
index 5f302ac278..65250810d0 100644
--- a/docs/2.3.0-Legacy/plugins/sentinel-plugin/index.html
+++ b/docs/2.3.0-Legacy/plugins/sentinel-plugin/index.html
@@ -9,8 +9,8 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Sentinel Plugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/plugins/sentinel-plugin"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Legacy"><meta data-react-helmet="true" name [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -20,7 +20,7 @@
</li><li><code>degradeRuleCount</code>: threshold.
</li><li><code>degradeRuleTimeWindow</code>: time of degrading(unit: second).
</li><li><code>fallbackUri</code>: degraded uri after circuit breaking.</li></ul></li></ul></div><footer class="row docusaurus-mt-lg"><div class="col"><a href="https://github.com/apache/shenyu-website/edit/main/versioned_docs/version-2.3.0-Legacy/plugins/sentinel-plugin.md" target="_blank" rel="noreferrer noopener"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_mS5F" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0. [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/plugins/sign-plugin/index.html b/docs/2.3.0-Legacy/plugins/sign-plugin/index.html
index e7187b7db7..52e5b0dcf9 100644
--- a/docs/2.3.0-Legacy/plugins/sign-plugin/index.html
+++ b/docs/2.3.0-Legacy/plugins/sign-plugin/index.html
@@ -9,14 +9,14 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Sign Plugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/plugins/sign-plugin"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Legacy"><meta data-react-helmet="true" name="docsea [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> Map<String, String> map = Maps.newHashMapWithExpectedSize(2);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //timestamp is string format of millisecond. String.valueOf(LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli()) </span></span><span class="token-line" style="color:#393A34"><span class="token plain"> map.put("time [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/plugins/sofa-plugin/index.html b/docs/2.3.0-Legacy/plugins/sofa-plugin/index.html
index e776b567f6..9c517cdf22 100644
--- a/docs/2.3.0-Legacy/plugins/sofa-plugin/index.html
+++ b/docs/2.3.0-Legacy/plugins/sofa-plugin/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Sofa Plugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/plugins/sofa-plugin"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Legacy"><meta data-react-helmet="true" name="docsea [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/plugins/spring-cloud-plugin/index.html b/docs/2.3.0-Legacy/plugins/spring-cloud-plugin/index.html
index 554170725c..b8496f633e 100644
--- a/docs/2.3.0-Legacy/plugins/spring-cloud-plugin/index.html
+++ b/docs/2.3.0-Legacy/plugins/spring-cloud-plugin/index.html
@@ -9,15 +9,15 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">SpringCloud Plugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/plugins/spring-cloud-plugin"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Legacy"><meta data-react-helmet="tru [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34"><</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag punctuation" style="color:#393A34">></span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><spa [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34"><</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag punctuation" style="color:#393A34">></span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><spa [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/plugins/waf-plugin/index.html b/docs/2.3.0-Legacy/plugins/waf-plugin/index.html
index 8b7e995f6c..ad78f6494b 100644
--- a/docs/2.3.0-Legacy/plugins/waf-plugin/index.html
+++ b/docs/2.3.0-Legacy/plugins/waf-plugin/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Waf Plugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/plugins/waf-plugin"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Legacy"><meta data-react-helmet="true" name="docsearc [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/plugins/websocket-plugin/index.html b/docs/2.3.0-Legacy/plugins/websocket-plugin/index.html
index 7096164260..be2fbd15ac 100644
--- a/docs/2.3.0-Legacy/plugins/websocket-plugin/index.html
+++ b/docs/2.3.0-Legacy/plugins/websocket-plugin/index.html
@@ -9,14 +9,14 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Websocket Plugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/plugins/websocket-plugin"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Legacy"><meta data-react-helmet="true" na [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34"><</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag punctuation" style="color:#393A34">></span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><spa [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/quick-start/quick-start-dubbo/index.html b/docs/2.3.0-Legacy/quick-start/quick-start-dubbo/index.html
index 3bc9319dbe..dfa53dc3d8 100644
--- a/docs/2.3.0-Legacy/quick-start/quick-start-dubbo/index.html
+++ b/docs/2.3.0-Legacy/quick-start/quick-start-dubbo/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Quick start with Dubbo | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/quick-start/quick-start-dubbo"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Legacy"><meta data-react-helme [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/quick-start/quick-start-grpc/index.html b/docs/2.3.0-Legacy/quick-start/quick-start-grpc/index.html
index 96f45745a5..30a5d77fc1 100644
--- a/docs/2.3.0-Legacy/quick-start/quick-start-grpc/index.html
+++ b/docs/2.3.0-Legacy/quick-start/quick-start-grpc/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Quick start with grpc | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/quick-start/quick-start-grpc"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Legacy"><meta data-react-helmet= [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/quick-start/quick-start-http/index.html b/docs/2.3.0-Legacy/quick-start/quick-start-http/index.html
index 27e412ba6e..31296e7014 100644
--- a/docs/2.3.0-Legacy/quick-start/quick-start-http/index.html
+++ b/docs/2.3.0-Legacy/quick-start/quick-start-http/index.html
@@ -9,14 +9,14 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Quick start with http | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/quick-start/quick-start-http"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Legacy"><meta data-react-helmet= [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34"><</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag punctuation" style="color:#393A34">></span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><spa [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/quick-start/quick-start-sofa/index.html b/docs/2.3.0-Legacy/quick-start/quick-start-sofa/index.html
index 559c7c59fa..f65d888b23 100644
--- a/docs/2.3.0-Legacy/quick-start/quick-start-sofa/index.html
+++ b/docs/2.3.0-Legacy/quick-start/quick-start-sofa/index.html
@@ -9,8 +9,8 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Quick start with sofa | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/quick-start/quick-start-sofa"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Legacy"><meta data-react-helmet= [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -19,7 +19,7 @@
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="run-the-soul-examples-sofa-project"></a>Run the soul-examples-sofa project<a class="hash-link" href="#run-the-soul-examples-sofa-project" title="Direct link to heading">#</a></h2><p>Download <a href="https://github.com/dromara/soul/tree/2.3.0/soul-examples/soul-example [...]
<img src="/assets/images/rule-list-8024764d442e91078a69d7618ed7753f.png"></p><p>Use PostMan to simulate HTTP to request your Sofa service
<img src="/assets/images/postman-findbyid-37cef6ac98fe1f4cbb95e83661a214bf.png"></p><p>Complex multi-parameter example: The related interface implementation class is <code>org.dromara.soul.examples.sofa.service.impl.SofaMultiParamServiceImpl#batchSaveNameAndId</code></p><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI java"><pre tabindex="0" class="prism-code language-java codeBlock_rtdJ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="cod [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/quick-start/quick-start-springcloud/index.html b/docs/2.3.0-Legacy/quick-start/quick-start-springcloud/index.html
index f31d21ddff..57c34e7efa 100644
--- a/docs/2.3.0-Legacy/quick-start/quick-start-springcloud/index.html
+++ b/docs/2.3.0-Legacy/quick-start/quick-start-springcloud/index.html
@@ -9,15 +9,15 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Quick start with SpringCloud | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/quick-start/quick-start-springcloud"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Legacy"><meta data [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"><!-- If using Eureka as a registry needs to be introduced --></span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34"><</span><span class="token tag" style="color:#00009f">dependency</span><spa [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"><!--soul springCloud plugin start end--></span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>Startup the <code>soul-bootstrap</code> project</p><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="run-the [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/quick-start/quick-start-tars/index.html b/docs/2.3.0-Legacy/quick-start/quick-start-tars/index.html
index d06675b8f2..1f5147d624 100644
--- a/docs/2.3.0-Legacy/quick-start/quick-start-tars/index.html
+++ b/docs/2.3.0-Legacy/quick-start/quick-start-tars/index.html
@@ -9,14 +9,14 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Quick start with Tars | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/quick-start/quick-start-tars"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Legacy"><meta data-react-helmet= [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34"><</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag punctuation" style="color:#393A34">></span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><spa [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/register-center/register-center-access/index.html b/docs/2.3.0-Legacy/register-center/register-center-access/index.html
index b6f6ff9bc6..9a9b96ecb2 100644
--- a/docs/2.3.0-Legacy/register-center/register-center-access/index.html
+++ b/docs/2.3.0-Legacy/register-center/register-center-access/index.html
@@ -9,8 +9,8 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Register Center Access | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/register-center/register-center-access"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Legacy"><meta data-re [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -21,7 +21,7 @@
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="soul-client-3"></a>Soul-Client<a class="hash-link" href="#soul-client-3" title="Direct link to heading">#</a></h4><p><strong>Note, consul registry is not compatible with current and SpringCloud will and Eureka / Nacos registry conflicts</strong> </p><ul><li>Add depende [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">spring</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">cloud</span><span class="token punctuation" style="color:#393A34">:</span><span class="token pl [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># registerType : register type, set consul.</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># port: your project port number; apply to springmvc/tars/grpc</span><span class="token plai [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/register-center/register-center-design/index.html b/docs/2.3.0-Legacy/register-center/register-center-design/index.html
index 64e26d67ed..7f3dfa52e9 100644
--- a/docs/2.3.0-Legacy/register-center/register-center-design/index.html
+++ b/docs/2.3.0-Legacy/register-center/register-center-design/index.html
@@ -9,14 +9,14 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Register Center Design | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/register-center/register-center-design"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Legacy"><meta data-re [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>Consul register client will save data to consul when soul client is started.</p><p>Consul register server will keep watching the change of data node.</p><p>Trigger selector and rule data update and event will be published, when metadata data node update.</p><p>Trigger selector and upstream update and event will be published, when uri data node [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/team/index.html b/docs/2.3.0-Legacy/team/index.html
index 1d5fbbf255..87c2d078eb 100644
--- a/docs/2.3.0-Legacy/team/index.html
+++ b/docs/2.3.0-Legacy/team/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Team Introduction | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/team"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Legacy"><meta data-react-helmet="true" name="docsearch:docus [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/users-guide/dubbo-proxy/index.html b/docs/2.3.0-Legacy/users-guide/dubbo-proxy/index.html
index 5b66003ef7..3606d333db 100644
--- a/docs/2.3.0-Legacy/users-guide/dubbo-proxy/index.html
+++ b/docs/2.3.0-Legacy/users-guide/dubbo-proxy/index.html
@@ -9,8 +9,8 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Integrate dubbo with soul gateway | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/users-guide/dubbo-proxy"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Legacy"><meta data-react- [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -26,7 +26,7 @@ project.</p></li></ul><h3><a aria-hidden="true" tabindex="-1" class="anchor enha
method.</li></ul></li><li>Single java bean parameter type (<code>default</code>).</li><li>Multi-parameter type support, add this config value in gateway's yaml file:</li></ul><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI yaml"><pre tabindex="0" class="prism-code language-yaml codeBlock_rtdJ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_1zSZ"><span class="token-line" style="color:#393A34"><span class="token key atr [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Build parameter pair.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * this is Resolve http body to get dubbo param.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#39 [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @SoulDubboClient(path = "/test", desc = "test method")</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public String test(@Valid HelloServiceRequest name) throws SoulException {</span></span><span class="token-line" style="colo [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/users-guide/http-proxy/index.html b/docs/2.3.0-Legacy/users-guide/http-proxy/index.html
index 6712dc6fea..fc777bf49b 100644
--- a/docs/2.3.0-Legacy/users-guide/http-proxy/index.html
+++ b/docs/2.3.0-Legacy/users-guide/http-proxy/index.html
@@ -9,14 +9,14 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Integrate Http with soul gateway | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/users-guide/http-proxy"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Legacy"><meta data-react-he [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag punctuation" style="color:#393A34">></span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</spa [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/users-guide/sofa-rpc-proxy/index.html b/docs/2.3.0-Legacy/users-guide/sofa-rpc-proxy/index.html
index a7dc203216..8b7d950d2a 100644
--- a/docs/2.3.0-Legacy/users-guide/sofa-rpc-proxy/index.html
+++ b/docs/2.3.0-Legacy/users-guide/sofa-rpc-proxy/index.html
@@ -9,8 +9,8 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Sofa RPC Proxy | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/users-guide/sofa-rpc-proxy"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Legacy"><meta data-react-helmet="true" na [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -24,7 +24,7 @@
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Now it's to request the gateway via post:http://localhost:9195/order/test/save</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Where localhost:9195 is the IP port of the gateway,default port is 9195 ,/order is the contextPath of your sofa access gateway configuration</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><ul><li><p>Parameter passing:</p><ul><li>Acc [...]
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div></div><footer class="row docusaurus-mt-lg"><div class="col"><a href="https://github.com/apache/shenyu-website/edit/main/versioned_docs/version-2.3.0-Legacy/users-guide/sofa-rpc-proxy.md" target="_blank" rel="noreferrer noopener"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_mS5F" aria-hidden="true"><g><path d [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/users-guide/soul-set-up/index.html b/docs/2.3.0-Legacy/users-guide/soul-set-up/index.html
index 695ab6c340..3f6141e2af 100644
--- a/docs/2.3.0-Legacy/users-guide/soul-set-up/index.html
+++ b/docs/2.3.0-Legacy/users-guide/soul-set-up/index.html
@@ -9,8 +9,8 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Environment Setup | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/users-guide/soul-set-up"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Legacy"><meta data-react-helmet="true" na [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@ With soul you can easily create application with your own gateway.</li><li>Syste
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag punctuation" style="color:#393A34">></span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</spa [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"><!--soul gateway start--></span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag punctuation" [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">management</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">health</span><span class="token punctuation" style="color:#393A34">:</span><span class="tok [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/users-guide/spring-cloud-proxy/index.html b/docs/2.3.0-Legacy/users-guide/spring-cloud-proxy/index.html
index bf9ea04144..bbb59bac42 100644
--- a/docs/2.3.0-Legacy/users-guide/spring-cloud-proxy/index.html
+++ b/docs/2.3.0-Legacy/users-guide/spring-cloud-proxy/index.html
@@ -9,8 +9,8 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">SpringCloud Proxy | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/users-guide/spring-cloud-proxy"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Legacy"><meta data-react-helmet="t [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># the request of other parameters don't change.</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Any questions, pls join the group and we can talk about it.</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><ul><li>Then you can visit, very easy and simple.</li></ul></div><footer class="row docusaurus-mt-lg"><div class="col"><a href="https://github.com/apache/shenyu-website/edit/main/versioned_docs/version-2.3.0-Legacy/users-guide/spring-cloud-proxy.md" target="_blank" rel="noreferrer noopener"><svg fill="currentColor" height="20" width="20" viewBox= [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.3.0-Legacy/users-guide/use-data-sync/index.html b/docs/2.3.0-Legacy/users-guide/use-data-sync/index.html
index 4d8b4cfd22..0d3739cfdf 100644
--- a/docs/2.3.0-Legacy/users-guide/use-data-sync/index.html
+++ b/docs/2.3.0-Legacy/users-guide/use-data-sync/index.html
@@ -9,14 +9,14 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Use Different Data-Sync Strategy | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.3.0-Legacy/users-guide/use-data-sync"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.3.0-Legacy"><meta data-react [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
problems.</p></li></ul></li></ul><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="http-long-polling-sync"></a>Http long-polling sync<a class="hash-link" href="#http-long-polling-sync" title="Direct link to heading">#</a></h2><ul><li><p>gateway setting(note:restart)</p><ul><li><p>Add these dependencies in <code>pom.xml</code>:</p><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI xml"><pre tabindex="0" class="prism-code language-xml codeBl [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/deployment/deployment-cluster/index.html b/docs/2.4.0/deployment/deployment-cluster/index.html
index 014ef38788..e239076d03 100644
--- a/docs/2.4.0/deployment/deployment-cluster/index.html
+++ b/docs/2.4.0/deployment/deployment-cluster/index.html
@@ -9,8 +9,8 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Cluster Deployment | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/deployment/deployment-cluster"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" name="doc [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -18,7 +18,7 @@
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">> linux: ./start.sh </span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="start-apache-shenyu-boostrap"></a>Start Apache ShenYu Boostrap<a class="hash-link" href="#start-apache-shenyu-boostrap" title="Direct link to heading">#</a></h [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">> linux : ./start.sh </span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><blockquote><p>After completing these operations, you will deploy <code>ShenYu Boostrap</code> Cluster.</p><p>For example. you will deploy <code>ShenYu Bootstrap</code> in <code>10.1.1.1</code> and <code>10.1.1.2</code> and deploy nginx [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">> linux: /usr/local/nginx/sbin/nginx </span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><ul><li>verify nginx, looking at your <code>ShenYu Bootstrap</code> log or <code>Nginx</code> log, Where will the verification request go.</li></ul></div><footer class="row docusaurus-mt-lg"><div class="col"><a href="http [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/deployment/deployment-custom/index.html b/docs/2.4.0/deployment/deployment-custom/index.html
index e79f61215e..469b138b28 100644
--- a/docs/2.4.0/deployment/deployment-custom/index.html
+++ b/docs/2.4.0/deployment/deployment-custom/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Custom Deployment | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/deployment/deployment-custom"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" name="docse [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/deployment/deployment-docker/index.html b/docs/2.4.0/deployment/deployment-docker/index.html
index 420e9d9ab3..f0cfcf5812 100644
--- a/docs/2.4.0/deployment/deployment-docker/index.html
+++ b/docs/2.4.0/deployment/deployment-docker/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Docker Deployment | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/deployment/deployment-docker"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" name="docse [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/deployment/deployment-helm/index.html b/docs/2.4.0/deployment/deployment-helm/index.html
index 79009ff6e3..a2911df5ae 100644
--- a/docs/2.4.0/deployment/deployment-helm/index.html
+++ b/docs/2.4.0/deployment/deployment-helm/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Helm Deployment | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/deployment/deployment-helm"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" name="docsearch [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/deployment/deployment-k8s/index.html b/docs/2.4.0/deployment/deployment-k8s/index.html
index ce170682d4..2dc630f64c 100644
--- a/docs/2.4.0/deployment/deployment-k8s/index.html
+++ b/docs/2.4.0/deployment/deployment-k8s/index.html
@@ -9,14 +9,14 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">K8s Deployment | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/deployment/deployment-k8s"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" name="docsearch:d [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
II. Use MySQL as the database</li></ol><p>Similar to the h2 process, there are two points to note</p><ol><li>you need to load <a href="https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.18/mysql-connector-java-8.0.18.jar" target="_blank" rel="noopener noreferrer">mysql-connector.jar</a>, so you need a place to store the file</li><li>you need to specify an external MySQL database configuration to proxy the external MySQL database via Endpoints</li></ol><p>The process is as foll [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/deployment/deployment-local/index.html b/docs/2.4.0/deployment/deployment-local/index.html
index a78a6a9e60..2d6a07d862 100644
--- a/docs/2.4.0/deployment/deployment-local/index.html
+++ b/docs/2.4.0/deployment/deployment-local/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Local Deployment | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/deployment/deployment-local"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" name="docsear [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/deployment/deployment-package/index.html b/docs/2.4.0/deployment/deployment-package/index.html
index b0134a363a..3cdc4b3638 100644
--- a/docs/2.4.0/deployment/deployment-package/index.html
+++ b/docs/2.4.0/deployment/deployment-package/index.html
@@ -9,8 +9,8 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Binary Packages Deployment | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/deployment/deployment-package"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" n [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -18,7 +18,7 @@
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">> linux: ./start.sh --spring.profiles.active = h2</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><ul><li>use <code>MySQL</code> to store data, copy <a href="https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.18/mysql-connector-java-8.0.18.jar" target="_blank" rel="noopener noreferrer">mysql-con [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">> linux: ./start.sh </span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="start-apache-shenyu-bootstrap"></a>Start Apache ShenYu Bootstrap<a class="hash-link" href="#start-apache-shenyu-bootstrap" title="Direct link to heading">#</a> [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">> linux : ./start.sh </span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div></div><footer class="row docusaurus-mt-lg"><div class="col"><a href="https://github.com/apache/shenyu-website/edit/main/versioned_docs/version-2.4.0/deployment/deployment-package.md" target="_blank" rel="noreferrer noopener"><svg fill="c [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/design/data-sync/index.html b/docs/2.4.0/design/data-sync/index.html
index 11d4ae3428..cc6b0b920c 100644
--- a/docs/2.4.0/design/data-sync/index.html
+++ b/docs/2.4.0/design/data-sync/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Data Synchronization Design | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/design/data-sync"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" name="docsear [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/design/database-design/index.html b/docs/2.4.0/design/database-design/index.html
index a744f5c0d8..01caae1e9b 100644
--- a/docs/2.4.0/design/database-design/index.html
+++ b/docs/2.4.0/design/database-design/index.html
@@ -9,15 +9,15 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Apache ShenYu Admin Database Design | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/design/database-design"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
<img src="/assets/images/shenyu-permission-db-90c870eefea0da663079cdf6638c7ce7.png"></p></li><li><p>Detailed design:</p><ul><li>one user corresponds to multiple role,one role corresponds to multiple resources.</li></ul></li></ul><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="data-permission"></a>Data Permission<a class="hash-link" href="#data-permission" title="Direct link to heading">#</a></h2><ul><li><p>Data Permission use database to store the relations [...]
<img alt="data permission uml" src="/assets/images/data_permission-f382375f134eeb359e481ee2cd43482d.png"></p></li></ul><ul><li>Detailed design:<ul><li>The most important table is <code>data_permission</code>, where a user corresponds to multiple data permissions.</li><li>The field <code>data_type</code> distinguishes between different types of data, which corresponds to the following: 0 -> selector, 1 -> rule.</li><li>The field <code>data_id</code> holds the primary key id of the c [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/design/flow-control/index.html b/docs/2.4.0/design/flow-control/index.html
index 6da01b35cf..672ac1e235 100644
--- a/docs/2.4.0/design/flow-control/index.html
+++ b/docs/2.4.0/design/flow-control/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Flow Control | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/design/flow-control"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" name="docsearch:docusauru [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/design/register-center-design/index.html b/docs/2.4.0/design/register-center-design/index.html
index 760e8c1044..842d5432a1 100644
--- a/docs/2.4.0/design/register-center-design/index.html
+++ b/docs/2.4.0/design/register-center-design/index.html
@@ -9,14 +9,14 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Application Client Access | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/design/register-center-design"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" na [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>When shenyu-client is started, The service interface information (MetaDataRegisterDTO/URIRegisterDTO) on the Metadata of the ServiceInstance (URIRegisterDTO) and Key-Value (MetaDataRegisterDTO), Store as described above.</p><p>shenyu-admin senses the update and deletion of data by monitoring the change of index of Catalog and KeyValue, and tri [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/design/spi-design/index.html b/docs/2.4.0/design/spi-design/index.html
index 714f777095..cd806a6239 100644
--- a/docs/2.4.0/design/spi-design/index.html
+++ b/docs/2.4.0/design/spi-design/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">SPI Design | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/design/spi-design"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" name="docsearch:docusaurus_ta [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/developer/custom-filter/index.html b/docs/2.4.0/developer/custom-filter/index.html
index 7471c418f4..a010a037ce 100644
--- a/docs/2.4.0/developer/custom-filter/index.html
+++ b/docs/2.4.0/developer/custom-filter/index.html
@@ -9,8 +9,8 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Custom Filter | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/developer/custom-filter"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" name="docsearch:docu [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -25,7 +25,7 @@
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public Mono<Void> filter(@Nullable final ServerWebExchange exchange, @Nullable final WebFilterChain chain) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> ServerHttpRequest request = Objects.requireNonNull(exchange).getRequest();</span></span><spa [...]
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="extending-orgapacheshenyuwebfilterabstractwebfilter"></a>Extending <code>org.apache.shenyu.web.filter.AbstractWebFilter</code><a class="hash-link" href="#extending-orgapacheshenyuwebfilterabstractwebfilter" title="Direct link to heading">#</a></h2><ul><li>Add a new cla [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * this is Template Method ,children Implement your own And response client.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param exchange the current server exchange. [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/developer/custom-parsing-ip-and-host/index.html b/docs/2.4.0/developer/custom-parsing-ip-and-host/index.html
index b17eeb55a3..bbc45cebb4 100644
--- a/docs/2.4.0/developer/custom-parsing-ip-and-host/index.html
+++ b/docs/2.4.0/developer/custom-parsing-ip-and-host/index.html
@@ -9,15 +9,15 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Fetching Correct IP Address And Host | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/developer/custom-parsing-ip-and-host"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-reac [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Resolve inet socket address.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param exchange the exchange</span></span><span class="token-line" style="color:#393A34"> [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><ul><li>Register defined class as a <code>Spring Bean</code>.</li></ul><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI java"><pre tabindex="0" class="prism-code language-java codeBlock_rtdJ thin-scrollbar" style="color:#393A34;background [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/developer/custom-plugin/index.html b/docs/2.4.0/developer/custom-plugin/index.html
index 610725684b..9dfd65ca7d 100644
--- a/docs/2.4.0/developer/custom-plugin/index.html
+++ b/docs/2.4.0/developer/custom-plugin/index.html
@@ -9,8 +9,8 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Custom Plugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/developer/custom-plugin"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" name="docsearch:docu [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -35,7 +35,7 @@
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Remove rule.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param ruleData the rule data</span></span><span class="token-line" style="color:#393A34"><span class="to [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Plugin named string.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @return the string</span></span><span class="token-line" style="color:#393A34"><span class="token [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><ul><li>Ensure <code>pluginNamed()</code> is same as the plugin name you defined.</li><li>Register defined class as a <code>Spring Bean</code>, or simply apply <code>@Component</code> in implementation class.</li></ul><div class="codeBlockContainer_J+bg"><div [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/developer/custom-result/index.html b/docs/2.4.0/developer/custom-result/index.html
index 09d317d08a..008f7708f8 100644
--- a/docs/2.4.0/developer/custom-result/index.html
+++ b/docs/2.4.0/developer/custom-result/index.html
@@ -9,8 +9,8 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Custom Response | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/developer/custom-result"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" name="docsearch:do [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><ul><li>The returned <code>json</code> as follows:</li></ul><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI json"><pre tabindex="0" class="prism-code language-json codeBlock_rtdJ thin-scrollbar" style="color:#393A34;background-color:#f6f [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Error t.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param code the code</span></span><span class="token-line" style="color:#393A34"><span class="token pl [...]
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><ul><li><code>T</code> is a generic parameter for your response data.</li><li>Register defined class as a <code>Spring Bean</code>.</li></ul><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI java"><pre tabindex="0" class="prism-code language-java codeBlock_rtdJ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><c [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/developer/custom-sign-algorithm/index.html b/docs/2.4.0/developer/custom-sign-algorithm/index.html
index 53997c8e9a..774ea084ad 100644
--- a/docs/2.4.0/developer/custom-sign-algorithm/index.html
+++ b/docs/2.4.0/developer/custom-sign-algorithm/index.html
@@ -9,14 +9,14 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Custom Sign Algorithm | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/developer/custom-sign-algorithm"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" name [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><ul><li>When returning true in Pair, the sign verification passes. If there's false, the String in Pair will be return to the frontend to show.</li><li>Register defined class as a Spring Bean.</li></ul><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI java"><pre tabindex="0" class="prism-code language-java codeBlock_rtdJ [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/developer/developer-shenyu-client/index.html b/docs/2.4.0/developer/developer-shenyu-client/index.html
index d0edd807ec..80213075ed 100644
--- a/docs/2.4.0/developer/developer-shenyu-client/index.html
+++ b/docs/2.4.0/developer/developer-shenyu-client/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">A multilingual HTTP client | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/developer/developer-shenyu-client"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="tru [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/developer/file-and-image/index.html b/docs/2.4.0/developer/file-and-image/index.html
index be98533e40..fc0054ea7e 100644
--- a/docs/2.4.0/developer/file-and-image/index.html
+++ b/docs/2.4.0/developer/file-and-image/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">File Upload And Download | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/developer/file-and-image"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" name="do [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/developer/shenyu-optimize/index.html b/docs/2.4.0/developer/shenyu-optimize/index.html
index cf4abfa3e0..f28fb5c0d8 100644
--- a/docs/2.4.0/developer/shenyu-optimize/index.html
+++ b/docs/2.4.0/developer/shenyu-optimize/index.html
@@ -9,15 +9,15 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">ShenYu Optimize | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/developer/shenyu-optimize"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" name="docsearch: [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">private static class EventLoopNettyCustomizer implements NettyServerCustomizer {</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public HttpServer apply(final HttpServer httpServer) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return httpServer</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> .tcpConfiguration(tcpServer -> [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/developer/spi/custom-load-balance/index.html b/docs/2.4.0/developer/spi/custom-load-balance/index.html
index 63a10e69d8..3dcf159703 100644
--- a/docs/2.4.0/developer/spi/custom-load-balance/index.html
+++ b/docs/2.4.0/developer/spi/custom-load-balance/index.html
@@ -9,14 +9,14 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Custom Load Balance | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/developer/spi/custom-load-balance"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" name [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
add <code>${you spi name}</code> = <code>${you class path}</code>:</li></ul><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI"><pre tabindex="0" class="prism-code language-undefined codeBlock_rtdJ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_1zSZ"><span class="token-line" style="color:#393A34"><span class="token plain">${you spi name} = ${you class path}</span></span></code></pre><button type="button" aria-label="Copy cod [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/developer/spi/custom-match-mode/index.html b/docs/2.4.0/developer/spi/custom-match-mode/index.html
index 86040aee65..3bd3d013aa 100644
--- a/docs/2.4.0/developer/spi/custom-match-mode/index.html
+++ b/docs/2.4.0/developer/spi/custom-match-mode/index.html
@@ -9,15 +9,15 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Custom Match Mode | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/developer/spi/custom-match-mode"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" name="do [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public Boolean match(final List<ConditionData> conditionDataList, final ServerWebExchange exchange) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // custom match strategy</span></span><span class="token-line" style="color:#393A34"><span class="t [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * And custom mode enum.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> CUSTOM(2, "custom"),</span></span></code></pre><button type="button" aria-label="Copy co [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/developer/spi/custom-metrics-monitor/index.html b/docs/2.4.0/developer/spi/custom-metrics-monitor/index.html
index 43f0b62973..5810c38c60 100644
--- a/docs/2.4.0/developer/spi/custom-metrics-monitor/index.html
+++ b/docs/2.4.0/developer/spi/custom-metrics-monitor/index.html
@@ -9,14 +9,14 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Custom Metrics Monitor | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/developer/spi/custom-metrics-monitor"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
add <code>${you spi name}</code> = <code>${you class path}</code>:</li></ul><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI"><pre tabindex="0" class="prism-code language-undefined codeBlock_rtdJ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_1zSZ"><span class="token-line" style="color:#393A34"><span class="token plain">${you spi name} = ${you class path}</span></span></code></pre><button type="button" aria-label="Copy cod [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/developer/spi/custom-parameter-data/index.html b/docs/2.4.0/developer/spi/custom-parameter-data/index.html
index 63f64b1fe0..5ee0f270e4 100644
--- a/docs/2.4.0/developer/spi/custom-parameter-data/index.html
+++ b/docs/2.4.0/developer/spi/custom-parameter-data/index.html
@@ -9,14 +9,14 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Custom Parameter Data | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/developer/spi/custom-parameter-data"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * custom param type enum.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> CUSTOM("custom", true),</span></span></code></pre><button type="button" aria-label="Co [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/developer/spi/custom-predicate-judge/index.html b/docs/2.4.0/developer/spi/custom-predicate-judge/index.html
index d51feb4265..80e29cfcc1 100644
--- a/docs/2.4.0/developer/spi/custom-predicate-judge/index.html
+++ b/docs/2.4.0/developer/spi/custom-predicate-judge/index.html
@@ -9,8 +9,8 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Custom Predicate Judge | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/developer/spi/custom-predicate-judge"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -18,7 +18,7 @@
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public Boolean judge(final ConditionData conditionData, final String realData) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Custom Predicate Judge</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></ [...]
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><ul><li>In <code>org.apache.shenyu.plugin.base.condition.judge.PredicateJudge</code> file, add key-value as following:</li></ul><div class="codeBlockContainer_J+bg"><div style="color:#393A34;background-color:#f6f8fa" class="codeBlockTitle_oQzk">script</div><div class="codeBlockContent_csEI shell"><pre tabindex="0" class="prism-code language-shell [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * custom operator enum.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> CUSTOM("custom", true),</span></span></code></pre><button type="button" aria-label="Copy [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/developer/spi/custom-rate-limiter/index.html b/docs/2.4.0/developer/spi/custom-rate-limiter/index.html
index 964754925f..d639186234 100644
--- a/docs/2.4.0/developer/spi/custom-rate-limiter/index.html
+++ b/docs/2.4.0/developer/spi/custom-rate-limiter/index.html
@@ -9,14 +9,14 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Custom Rate Limiter | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/developer/spi/custom-rate-limiter"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" name [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
add <code>${you spi name}</code> = <code>${you class path}</code>:</li></ul><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI"><pre tabindex="0" class="prism-code language-undefined codeBlock_rtdJ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_1zSZ"><span class="token-line" style="color:#393A34"><span class="token plain">${you spi name} = ${you class path}</span></span></code></pre><button type="button" aria-label="Copy cod [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/developer/thread-model/index.html b/docs/2.4.0/developer/thread-model/index.html
index 6328108400..395a33628f 100644
--- a/docs/2.4.0/developer/thread-model/index.html
+++ b/docs/2.4.0/developer/thread-model/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Thread Model | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/developer/thread-model"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" name="docsearch:docusa [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/index/index.html b/docs/2.4.0/index/index.html
index 98a3ac091a..a88f63d84c 100644
--- a/docs/2.4.0/index/index.html
+++ b/docs/2.4.0/index/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Overview | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/index"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" name="docsearch:docusaurus_tag" content="do [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/plugin-center/authority-and-certification/jwt-plugin/index.html b/docs/2.4.0/plugin-center/authority-and-certification/jwt-plugin/index.html
index 570679b9ac..542354c0de 100644
--- a/docs/2.4.0/plugin-center/authority-and-certification/jwt-plugin/index.html
+++ b/docs/2.4.0/plugin-center/authority-and-certification/jwt-plugin/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">JWT plugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/plugin-center/authority-and-certification/jwt-plugin"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet=" [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/plugin-center/authority-and-certification/oauth2-plugin/index.html b/docs/2.4.0/plugin-center/authority-and-certification/oauth2-plugin/index.html
index 6d9ced5e61..291f0d33eb 100644
--- a/docs/2.4.0/plugin-center/authority-and-certification/oauth2-plugin/index.html
+++ b/docs/2.4.0/plugin-center/authority-and-certification/oauth2-plugin/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">OAuth2 Plugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/plugin-center/authority-and-certification/oauth2-plugin"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-he [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/plugin-center/authority-and-certification/sign-plugin/index.html b/docs/2.4.0/plugin-center/authority-and-certification/sign-plugin/index.html
index 7412b381cf..d12db17759 100644
--- a/docs/2.4.0/plugin-center/authority-and-certification/sign-plugin/index.html
+++ b/docs/2.4.0/plugin-center/authority-and-certification/sign-plugin/index.html
@@ -9,8 +9,8 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Sign Plugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/plugin-center/authority-and-certification/sign-plugin"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -21,7 +21,7 @@
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> System.out.println(DigestUtils.md5DigestAsHex(sign.getBytes()).toUpperCase());</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div>< [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> List<String> storedKeys = Arrays.stream(map.keySet()</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> .toArray(new String[]{}))</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> .sorted(Comparator.naturalOrder())</span></span><span class="token-line" style="color:#393A34"><span class="toke [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> System.out.println(DigestUtils.md5DigestAsHex(sign.getBytes()).toUpperCase());</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div>< [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/plugin-center/authority-and-certification/waf-plugin/index.html b/docs/2.4.0/plugin-center/authority-and-certification/waf-plugin/index.html
index 5b6c523db7..500b5d0327 100644
--- a/docs/2.4.0/plugin-center/authority-and-certification/waf-plugin/index.html
+++ b/docs/2.4.0/plugin-center/authority-and-certification/waf-plugin/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Waf Plugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/plugin-center/authority-and-certification/waf-plugin"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet=" [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/plugin-center/fault-tolerance/hystrix-plugin/index.html b/docs/2.4.0/plugin-center/fault-tolerance/hystrix-plugin/index.html
index aa3d71f38f..faf96bb6d6 100644
--- a/docs/2.4.0/plugin-center/fault-tolerance/hystrix-plugin/index.html
+++ b/docs/2.4.0/plugin-center/fault-tolerance/hystrix-plugin/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Hystrix Plugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/plugin-center/fault-tolerance/hystrix-plugin"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/plugin-center/fault-tolerance/rate-limiter-plugin/index.html b/docs/2.4.0/plugin-center/fault-tolerance/rate-limiter-plugin/index.html
index 93ae9cc1d6..26d148bf0f 100644
--- a/docs/2.4.0/plugin-center/fault-tolerance/rate-limiter-plugin/index.html
+++ b/docs/2.4.0/plugin-center/fault-tolerance/rate-limiter-plugin/index.html
@@ -9,8 +9,8 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">RateLimiter Plugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/plugin-center/fault-tolerance/rate-limiter-plugin"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-hel [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -20,7 +20,7 @@
<img src="/assets/images/sldingwindow-c529b50727afb275845585edb72b0215.png"></li></ul><header><h1 class="h1Heading_dC7a">2. How to use plugin</h1></header><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="21-plugin-use-procedure"></a>2.1 Plugin-use procedure<a class="hash-link" href="#21-plugin-use-procedure" title="Direct link to heading">#</a></h2><p><img src="/assets/images/plugin_use_en-8b5661551cdf92fdabc9cb2e7947cffc.jpg"></p><h2><a aria-hidden="true" t [...]
mode: <code>cluster</code>, sentinel mode: <code>sentinel</code>.</p></li><li><p><code>master</code>: default is master.</p></li><li><p><code>url</code>: configure the IP and port of the redis database, configured by colon connection, example: <code>192.168.1.1:6379</code>.</p></li><li><p><code>password</code>: the password of the redis database, if not, you can not configure.</p></li></ul><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="242-selector-config" [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">server {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> location / {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> proxy_pass http://shenyu_gateway_cluster;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> proxy_set_header HOST $host;</span></span><span class="token-line [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/plugin-center/fault-tolerance/resilience4j-plugin/index.html b/docs/2.4.0/plugin-center/fault-tolerance/resilience4j-plugin/index.html
index ab30ded0a1..5b6dd99dca 100644
--- a/docs/2.4.0/plugin-center/fault-tolerance/resilience4j-plugin/index.html
+++ b/docs/2.4.0/plugin-center/fault-tolerance/resilience4j-plugin/index.html
@@ -9,14 +9,14 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Resilience4j Plugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/plugin-center/fault-tolerance/resilience4j-plugin"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-he [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
Sliding window can either be <code>0</code>:count-based or <code>1</code>:time-based.,default value:<code>0</code>.</p></li><li><p><code>timeoutDuration</code> :Configures request CircuitBreaker timeout(ms),default value:<code>30000</code>.</p></li><li><p><code>waitIntervalInOpen</code> :Configures the circuitBreaker time(ms) of duration,default value:<code>10</code>.</p></li><li><p><code>automaticTransitionFromOpenToHalfOpenEnabled</code> :Configures automatically transition from open s [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/plugin-center/fault-tolerance/sentinel-plugin/index.html b/docs/2.4.0/plugin-center/fault-tolerance/sentinel-plugin/index.html
index 48788cf6a2..b0da094e0e 100644
--- a/docs/2.4.0/plugin-center/fault-tolerance/sentinel-plugin/index.html
+++ b/docs/2.4.0/plugin-center/fault-tolerance/sentinel-plugin/index.html
@@ -9,8 +9,8 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Sentinel Plugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/plugin-center/fault-tolerance/sentinel-plugin"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="tr [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -19,7 +19,7 @@
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Save order dto.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * @param orderDTO the order dto</span></span><span class="token-line" style="color:#393A34"><span class= [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> Random random = new Random();</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> int num = random.nextInt(100);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> if (num > 40) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> throw new RuntimeException(&quo [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="2524-request-by-apache-jmeter"></a>2.5.2.4 request by <code>Apache Jmeter</code><a class="hash-link" href="#2524-request-by-apache-jmeter" title="Direct link to heading">#</a></h4>< [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/plugin-center/http-handle/context-path-plugin/index.html b/docs/2.4.0/plugin-center/http-handle/context-path-plugin/index.html
index fa5eda70f7..13e11a7513 100644
--- a/docs/2.4.0/plugin-center/http-handle/context-path-plugin/index.html
+++ b/docs/2.4.0/plugin-center/http-handle/context-path-plugin/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">ContextPath Plugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/plugin-center/http-handle/context-path-plugin"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet= [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/plugin-center/http-handle/divide-plugin/index.html b/docs/2.4.0/plugin-center/http-handle/divide-plugin/index.html
index a488575963..4a82803728 100644
--- a/docs/2.4.0/plugin-center/http-handle/divide-plugin/index.html
+++ b/docs/2.4.0/plugin-center/http-handle/divide-plugin/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Divide Plugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/plugin-center/http-handle/divide-plugin"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" name [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/plugin-center/http-handle/modify-response-plugin/index.html b/docs/2.4.0/plugin-center/http-handle/modify-response-plugin/index.html
index 30150ea41a..25c27fd225 100644
--- a/docs/2.4.0/plugin-center/http-handle/modify-response-plugin/index.html
+++ b/docs/2.4.0/plugin-center/http-handle/modify-response-plugin/index.html
@@ -9,15 +9,15 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">ModifyResponse Plugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/plugin-center/http-handle/modify-response-plugin"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-h [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
<img src="/assets/images/plugin-selector-config-en-c9eba64e9bd6d1d7daca6c974280c079.png"></li><li>Add rule config
<img src="/assets/images/plugin-rule-config-en-92ed9341ca270670294f41ffdfe520c3.png"></li></ul></li></ul><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="25-examples"></a>2.5 Examples<a class="hash-link" href="#25-examples" title="Direct link to heading">#</a></h2><p>Here is an example of client project <a href="https://github.com/apache/shenyu/tree/master/shenyu-examples/shenyu-examples-http" target="_blank" rel="noopener noreferrer">shenyu-examples-http</a [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/plugin-center/http-handle/param-mapping-plugin/index.html b/docs/2.4.0/plugin-center/http-handle/param-mapping-plugin/index.html
index 10d87b96e5..bc7b8f0caf 100644
--- a/docs/2.4.0/plugin-center/http-handle/param-mapping-plugin/index.html
+++ b/docs/2.4.0/plugin-center/http-handle/param-mapping-plugin/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Param-mapping Plugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/plugin-center/http-handle/param-mapping-plugin"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helm [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/plugin-center/http-handle/redirect-plugin/index.html b/docs/2.4.0/plugin-center/http-handle/redirect-plugin/index.html
index 082bf8eca5..3ad2b89669 100644
--- a/docs/2.4.0/plugin-center/http-handle/redirect-plugin/index.html
+++ b/docs/2.4.0/plugin-center/http-handle/redirect-plugin/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Redirect Plugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/plugin-center/http-handle/redirect-plugin"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/plugin-center/http-handle/request-plugin/index.html b/docs/2.4.0/plugin-center/http-handle/request-plugin/index.html
index 419188b0fb..ba28a92a31 100644
--- a/docs/2.4.0/plugin-center/http-handle/request-plugin/index.html
+++ b/docs/2.4.0/plugin-center/http-handle/request-plugin/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">RequestPlugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/plugin-center/http-handle/request-plugin"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" nam [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/plugin-center/http-handle/rewrite-plugin/index.html b/docs/2.4.0/plugin-center/http-handle/rewrite-plugin/index.html
index 0fca1e0c37..819ff80cda 100644
--- a/docs/2.4.0/plugin-center/http-handle/rewrite-plugin/index.html
+++ b/docs/2.4.0/plugin-center/http-handle/rewrite-plugin/index.html
@@ -9,14 +9,14 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Rewrite Plugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/plugin-center/http-handle/rewrite-plugin"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" na [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
<img src="/assets/images/rewrite_open_en-6f19bcb0b1115b24a6bf49b382938253.png"></li></ul><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="24-config-plugin"></a>2.4 Config plugin<a class="hash-link" href="#24-config-plugin" title="Direct link to heading">#</a></h2><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="241-plugin-config"></a>2.4.1 Plugin Config<a class="hash-link" href="#241-plugin-config" title="Direct link to heading" [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/plugin-center/http-handle/websocket-plugin/index.html b/docs/2.4.0/plugin-center/http-handle/websocket-plugin/index.html
index 061957b200..fb0b941ba9 100644
--- a/docs/2.4.0/plugin-center/http-handle/websocket-plugin/index.html
+++ b/docs/2.4.0/plugin-center/http-handle/websocket-plugin/index.html
@@ -9,14 +9,14 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">WebSocket Plugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/plugin-center/http-handle/websocket-plugin"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34"><</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag punctuation" style="color:#393A34">></span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><span [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/plugin-center/observability/logging-plugin/index.html b/docs/2.4.0/plugin-center/observability/logging-plugin/index.html
index c722905249..e87c0cf148 100644
--- a/docs/2.4.0/plugin-center/observability/logging-plugin/index.html
+++ b/docs/2.4.0/plugin-center/observability/logging-plugin/index.html
@@ -9,8 +9,8 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Logging Plugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/plugin-center/observability/logging-plugin"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -20,7 +20,7 @@
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">Response Code: 200 OK</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">[Response Headers Start]</span></span><span class="token-line" style="color:#393A34"><span class="token plain">transfer-encoding: chunked</span></span><span class="token-line" style="color:#393A34"><span class="token plain">Content-Length: 37</span></span><span class="token-line" style="color:#393A34"><span class="token plain">Content-Type: application/json</span></span><span class="token-line" style=" [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">[Response Body Start]</span></span><span class="token-line" style="color:#393A34"><span class="token plain">{"userId":"11","userName":"xiaoming"}</span></span><span class="token-line" style="color:#393A34"><span class="token plain">[Response Body End]</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean- [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/plugin-center/observability/monitor-plugin/index.html b/docs/2.4.0/plugin-center/observability/monitor-plugin/index.html
index 0a73f05389..1bdf1f10dd 100644
--- a/docs/2.4.0/plugin-center/observability/monitor-plugin/index.html
+++ b/docs/2.4.0/plugin-center/observability/monitor-plugin/index.html
@@ -9,15 +9,15 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Monitor Plugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/plugin-center/observability/monitor-plugin"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
<img src="/assets/images/shenyu-metrics-805b9a2539e9808d934caae9b3a1404f.png"></p></li><li><p>Make even tracking in ShenYu Gateway by asynchronous or synchronous mode.</p></li><li><p>The <code>prometheus</code> server pulls metrics' through http request, and then displays it by <code>Grafana</code>.</p></li></ul><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="plugin-setting"></a>Plugin Setting<a class="hash-link" href="#plugin-setting" title="Direct li [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># port : Pulled ports for exposing to prometheus service.</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># host : If not filled in, it is the host of Apache ShenYu Gateway.</span><spa [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/plugin-center/rpc-proxy/dubbo-plugin/index.html b/docs/2.4.0/plugin-center/rpc-proxy/dubbo-plugin/index.html
index ea435f108c..29c1b81b1d 100644
--- a/docs/2.4.0/plugin-center/rpc-proxy/dubbo-plugin/index.html
+++ b/docs/2.4.0/plugin-center/rpc-proxy/dubbo-plugin/index.html
@@ -9,8 +9,8 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Dubbo Plugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/plugin-center/rpc-proxy/dubbo-plugin"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" name="do [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -21,7 +21,7 @@ e.g. we have an interface <code>update(Integer id, String name, Integer age)</co
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">* No need to pay attention to the order when requesting, and no need to use null placeholders.</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> Request body example: `{"name":"Mike","id":1}`</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><ul><li>RpcExpand: corresponding to some configurations of dubbo interface; If you want to adjust, please modify here, which support json format like the following fields:</li></ [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/plugin-center/rpc-proxy/grpc-plugin/index.html b/docs/2.4.0/plugin-center/rpc-proxy/grpc-plugin/index.html
index 27bc51981d..1575316e74 100644
--- a/docs/2.4.0/plugin-center/rpc-proxy/grpc-plugin/index.html
+++ b/docs/2.4.0/plugin-center/rpc-proxy/grpc-plugin/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">gRPC Plugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/plugin-center/rpc-proxy/grpc-plugin"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" name="docs [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/plugin-center/rpc-proxy/motan-plugin/index.html b/docs/2.4.0/plugin-center/rpc-proxy/motan-plugin/index.html
index f75e0cf402..6421abd5d4 100644
--- a/docs/2.4.0/plugin-center/rpc-proxy/motan-plugin/index.html
+++ b/docs/2.4.0/plugin-center/rpc-proxy/motan-plugin/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Motan Plugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/plugin-center/rpc-proxy/motan-plugin"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" name="do [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/plugin-center/rpc-proxy/sofa-plugin/index.html b/docs/2.4.0/plugin-center/rpc-proxy/sofa-plugin/index.html
index b817d0d557..00219da98b 100644
--- a/docs/2.4.0/plugin-center/rpc-proxy/sofa-plugin/index.html
+++ b/docs/2.4.0/plugin-center/rpc-proxy/sofa-plugin/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Sofa Plugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/plugin-center/rpc-proxy/sofa-plugin"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" name="docs [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/plugin-center/rpc-proxy/spring-cloud-plugin/index.html b/docs/2.4.0/plugin-center/rpc-proxy/spring-cloud-plugin/index.html
index 5818ee6b53..804175bb3c 100644
--- a/docs/2.4.0/plugin-center/rpc-proxy/spring-cloud-plugin/index.html
+++ b/docs/2.4.0/plugin-center/rpc-proxy/spring-cloud-plugin/index.html
@@ -9,8 +9,8 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Spring Cloud Plugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/plugin-center/rpc-proxy/spring-cloud-plugin"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet=" [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -25,7 +25,7 @@
if you don't config loadbalance, springcloud plugin will use <code>roundRobin</code> algorithm.</p><p>Before ShenYu 2.4.3(include), ShenYu use <code>Ribbon</code> as loadbalancer client, you must config loadbalancer as follows.</p></blockquote><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI yaml"><pre tabindex="0" class="prism-code language-yaml codeBlock_rtdJ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_1zSZ"><spa [...]
please read [2.5.3 Rule Config](#2.5.3 Rule Config)</p><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="2615-request-springcloud-service-and-check-result"></a>2.6.1.5 Request SpringCloud Service and Check Result<a class="hash-link" href="#2615-request-springcloud-service-and-check-result" title="Direct link to heading">#</a></h4><p><img src="/assets/images/springcloud-request-a2b6b014e19f9de790a62f353723071b.png"></p><h3><a aria-hidden="true" tabindex="-1" c [...]
<code>timeout</code> is your service allow timeout.</p><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="2625-access-unregistered-services-through-configuration"></a>2.6.2.5 Access Unregistered Services Through Configuration<a class="hash-link" href="#2625-access-unregistered-services-through-configuration" title="Direct link to heading">#</a></h4><h5><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="26251-use-the-field-rpc_type-in-ht [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/plugin-center/rpc-proxy/tars-plugin/index.html b/docs/2.4.0/plugin-center/rpc-proxy/tars-plugin/index.html
index 5fae99c1d3..317da18bd0 100644
--- a/docs/2.4.0/plugin-center/rpc-proxy/tars-plugin/index.html
+++ b/docs/2.4.0/plugin-center/rpc-proxy/tars-plugin/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Tars Plugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/plugin-center/rpc-proxy/tars-plugin"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" name="docs [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/quick-start/quick-start-dubbo/index.html b/docs/2.4.0/quick-start/quick-start-dubbo/index.html
index 17d4de3f32..6f5d34ba21 100644
--- a/docs/2.4.0/quick-start/quick-start-dubbo/index.html
+++ b/docs/2.4.0/quick-start/quick-start-dubbo/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Quick start with Dubbo | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/quick-start/quick-start-dubbo"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" name= [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/quick-start/quick-start-grpc/index.html b/docs/2.4.0/quick-start/quick-start-grpc/index.html
index 6e5eaf2fc4..45a632c3e2 100644
--- a/docs/2.4.0/quick-start/quick-start-grpc/index.html
+++ b/docs/2.4.0/quick-start/quick-start-grpc/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Quick start with gRPC | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/quick-start/quick-start-grpc"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" name="d [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/quick-start/quick-start-http/index.html b/docs/2.4.0/quick-start/quick-start-http/index.html
index 49be0cfa8e..3f31629553 100644
--- a/docs/2.4.0/quick-start/quick-start-http/index.html
+++ b/docs/2.4.0/quick-start/quick-start-http/index.html
@@ -9,14 +9,14 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Quick start with Http | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/quick-start/quick-start-http"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" name="d [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag punctuation" style="color:#393A34">></span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34" [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/quick-start/quick-start-motan/index.html b/docs/2.4.0/quick-start/quick-start-motan/index.html
index 815765e417..4a4f566e0c 100644
--- a/docs/2.4.0/quick-start/quick-start-motan/index.html
+++ b/docs/2.4.0/quick-start/quick-start-motan/index.html
@@ -9,8 +9,8 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Quick start with Motan | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/quick-start/quick-start-motan"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" name= [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -21,7 +21,7 @@ Start up zookeeper in local.</p></blockquote><p>Import the gateway proxy plugin
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag punctuation" style="color:#393A34">></span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34" [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag punctuation" style="color:#393A34">></span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34" [...]
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="test"></a>Test<a class="hash-link" href="#test" title="Direct link to heading">#</a></h2><p>The <code>shenyu-examples-motan</code> project will automatically register the <code>@ShenyuMotanClient</code> annotated interface methods with the gateway and add selectors and [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/quick-start/quick-start-sofa/index.html b/docs/2.4.0/quick-start/quick-start-sofa/index.html
index 0cb216ae00..19839ddad5 100644
--- a/docs/2.4.0/quick-start/quick-start-sofa/index.html
+++ b/docs/2.4.0/quick-start/quick-start-sofa/index.html
@@ -9,15 +9,15 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Quick start with Sofa | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/quick-start/quick-start-sofa"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" name="d [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag punctuation" style="color:#393A34">></span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34" [...]
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="run-the-shenyu-examples-sofa-project"></a>Run the shenyu-examples-sofa project<a class="hash-link" href="#run-the-shenyu-examples-sofa-project" title="Direct link to heading">#</a></h2><p>Download <a href="https://github.com/apache/incubator-shenyu/tree/v2.4.0/shenyu-e [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/quick-start/quick-start-springcloud/index.html b/docs/2.4.0/quick-start/quick-start-springcloud/index.html
index d4aa165c3d..c4ca3c54eb 100644
--- a/docs/2.4.0/quick-start/quick-start-springcloud/index.html
+++ b/docs/2.4.0/quick-start/quick-start-springcloud/index.html
@@ -9,8 +9,8 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Quick start with Spring Cloud | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/quick-start/quick-start-springcloud"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -19,7 +19,7 @@
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag punctuation" style="color:#393A34">></span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style [...]
Execute the <code>org.apache.shenyu.examples.eureka.EurekaServerApplication</code> main method to start project.</p><p>Startup the Spring Cloud service:
Execute the <code>org.apache.shenyu.examples.springcloud.ShenyuTestSpringCloudApplication</code> main method to start project.</p><p>The following log appears when the startup is successful:</p><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI shell"><pre tabindex="0" class="prism-code language-shell codeBlock_rtdJ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_1zSZ"><span class="token-line" style="color:#393A34"><span clas [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/quick-start/quick-start-tars/index.html b/docs/2.4.0/quick-start/quick-start-tars/index.html
index a974cfd82b..2eef3a0c9e 100644
--- a/docs/2.4.0/quick-start/quick-start-tars/index.html
+++ b/docs/2.4.0/quick-start/quick-start-tars/index.html
@@ -9,14 +9,14 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Quick start with Tars | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/quick-start/quick-start-tars"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" name="d [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34"><</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag punctuation" style="color:#393A34">></span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><spa [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/user-guide/admin-usage/data-permission/index.html b/docs/2.4.0/user-guide/admin-usage/data-permission/index.html
index c2e8ef8182..9b626325a6 100644
--- a/docs/2.4.0/user-guide/admin-usage/data-permission/index.html
+++ b/docs/2.4.0/user-guide/admin-usage/data-permission/index.html
@@ -9,14 +9,14 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Data Permission Management | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/user-guide/admin-usage/data-permission"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
When the user does not configure data permissions, it has all the data permissions, as long as the permissions are configured, the data permissions will be controlled. As shown in the following picture.</p><img src="/img/shenyu/basicConfig/dataPermission/data-permission-profile-en.png" width="80%" height="50%"><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="how-to-use"></a>How to use<a class="hash-link" href="#how-to-use" title="Direct link to heading">#</a [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/user-guide/admin-usage/dictionary-management/index.html b/docs/2.4.0/user-guide/admin-usage/dictionary-management/index.html
index 8c1da4749d..c89d7754b6 100644
--- a/docs/2.4.0/user-guide/admin-usage/dictionary-management/index.html
+++ b/docs/2.4.0/user-guide/admin-usage/dictionary-management/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Dict Management | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/user-guide/admin-usage/dictionary-management"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="tru [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/user-guide/admin-usage/plugin-handle-explanation/index.html b/docs/2.4.0/user-guide/admin-usage/plugin-handle-explanation/index.html
index b16ee20aaf..87fd973ac3 100644
--- a/docs/2.4.0/user-guide/admin-usage/plugin-handle-explanation/index.html
+++ b/docs/2.4.0/user-guide/admin-usage/plugin-handle-explanation/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Plugin Config | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/user-guide/admin-usage/plugin-handle-explanation"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="t [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/user-guide/admin-usage/role-management/index.html b/docs/2.4.0/user-guide/admin-usage/role-management/index.html
index a0a1ba4fce..e0cf76fbb4 100644
--- a/docs/2.4.0/user-guide/admin-usage/role-management/index.html
+++ b/docs/2.4.0/user-guide/admin-usage/role-management/index.html
@@ -9,14 +9,14 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Role Management | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/user-guide/admin-usage/role-management"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" nam [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
You can add a user by pressing the "Add Data" button. The user role is selected to manage the menu and button permissions that the user sees after logging in. When a user selects more than one role, the maximum set of all roles is taken together. After changing a user's role permissions, users who are already logged in can simply refresh the page to get the changed permissions.</p><p>The following is an example of how the new user's permissions.</p><ul><li>editor defa [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/user-guide/admin-usage/selector-and-rule/index.html b/docs/2.4.0/user-guide/admin-usage/selector-and-rule/index.html
index a14c808e27..44ffe5ac2f 100644
--- a/docs/2.4.0/user-guide/admin-usage/selector-and-rule/index.html
+++ b/docs/2.4.0/user-guide/admin-usage/selector-and-rule/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Selector And Rule Config | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/user-guide/admin-usage/selector-and-rule"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/user-guide/property-config/admin-property-config/index.html b/docs/2.4.0/user-guide/property-config/admin-property-config/index.html
index 89dfa4d9f3..fd120908c0 100644
--- a/docs/2.4.0/user-guide/property-config/admin-property-config/index.html
+++ b/docs/2.4.0/user-guide/property-config/admin-property-config/index.html
@@ -9,14 +9,14 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Admin Property Config | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/user-guide/property-config/admin-property-config"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-h [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="property-detail"></a>Property Detail<a class="hash-link" href="#property-detail" title="Direct link to heading">#</a></h3><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="shenyuregister-config"></a>shenyu.register config<a class="hash-link [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/user-guide/property-config/client-property-config/index.html b/docs/2.4.0/user-guide/property-config/client-property-config/index.html
index bf18a0777f..bbfe0d98c3 100644
--- a/docs/2.4.0/user-guide/property-config/client-property-config/index.html
+++ b/docs/2.4.0/user-guide/property-config/client-property-config/index.html
@@ -9,14 +9,14 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Client Property Config | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/user-guide/property-config/client-property-config"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="property-detail"></a>Property Detail<a class="hash-link" href="#property-detail" title="Direct link to heading">#</a></h3><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="shenyuclient-config"></a>shenyu.client config<a class="hash-link" hr [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/user-guide/property-config/gateway-property-config/index.html b/docs/2.4.0/user-guide/property-config/gateway-property-config/index.html
index 55509e41b2..aee0608548 100644
--- a/docs/2.4.0/user-guide/property-config/gateway-property-config/index.html
+++ b/docs/2.4.0/user-guide/property-config/gateway-property-config/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Gateway Property Config | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/user-guide/property-config/gateway-property-config"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-rea [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/user-guide/proxy/dubbo-proxy/index.html b/docs/2.4.0/user-guide/proxy/dubbo-proxy/index.html
index d68bef2e9d..6f8bbb9eeb 100644
--- a/docs/2.4.0/user-guide/proxy/dubbo-proxy/index.html
+++ b/docs/2.4.0/user-guide/proxy/dubbo-proxy/index.html
@@ -9,8 +9,8 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Dubbo Proxy | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/user-guide/proxy/dubbo-proxy"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" name="docsearch:d [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -32,7 +32,7 @@ method.</li></ul></li><li>Single java bean parameter type (<code>default</code>)
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public void setAge(Integer age) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> this.age = age;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span></span></code></pre><button type="button" aria-label="C [...]
Two things need to notice after intgeration with gateway, one is the added annoation <code>@ShenyuDubboClient</code>, another is a path used to speicify the request path.
And you added a config value of <code>contextPath</code>.</p><p>If you have a function like this, the config value in contextPath is <code>/dubbo</code></p><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI java"><pre tabindex="0" class="prism-code language-java codeBlock_rtdJ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_1zSZ"><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></sp [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/user-guide/proxy/grpc-proxy/index.html b/docs/2.4.0/user-guide/proxy/grpc-proxy/index.html
index 7514f06c67..d4520c9fdb 100644
--- a/docs/2.4.0/user-guide/proxy/grpc-proxy/index.html
+++ b/docs/2.4.0/user-guide/proxy/grpc-proxy/index.html
@@ -9,14 +9,14 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">gRPC Proxy | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/user-guide/proxy/grpc-proxy"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" name="docsearch:doc [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="user-request"></a>User Request<a class="hash-link" href="#user-request" title="Direct link to heading">#</a></h2><p>You can request your gRPC service by Http. The <code>Apache ShenYu</code> gateway needs to have a route prefix that you access to configure <code>context [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/user-guide/proxy/http-proxy/index.html b/docs/2.4.0/user-guide/proxy/http-proxy/index.html
index e4877bf8ed..ffeb553cdf 100644
--- a/docs/2.4.0/user-guide/proxy/http-proxy/index.html
+++ b/docs/2.4.0/user-guide/proxy/http-proxy/index.html
@@ -9,8 +9,8 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Http Proxy | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/user-guide/proxy/http-proxy"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" name="docsearch:doc [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -21,7 +21,7 @@
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @GetMapping("/findByUserId")</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public UserDTO findByUserId(@RequestParam("userId") final String userId) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> UserDTO userDTO = new UserDTO();</span></span><span class="token-line" style="color:#39 [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @PostMapping("/save")</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @ShenyuSpringMvcClient(path = "/save")</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public OrderDTO save(@RequestBody final OrderDTO orderDTO) {</span></span><span class="token-line" style="color:#393A34"><span class=" [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @GetMapping("/findById")</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public OrderDTO findById(@RequestParam("id") final String id) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> OrderDTO orderDTO = new OrderDTO();</span></span><span class="token-line" style="color:#393A34"><span [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/user-guide/proxy/motan-proxy/index.html b/docs/2.4.0/user-guide/proxy/motan-proxy/index.html
index a3be8b236a..a5c369bc85 100644
--- a/docs/2.4.0/user-guide/proxy/motan-proxy/index.html
+++ b/docs/2.4.0/user-guide/proxy/motan-proxy/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Motan Proxy | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/user-guide/proxy/motan-proxy"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" name="docsearch:d [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/user-guide/proxy/sofa-rpc-proxy/index.html b/docs/2.4.0/user-guide/proxy/sofa-rpc-proxy/index.html
index 0084d9c1b7..1aace6d158 100644
--- a/docs/2.4.0/user-guide/proxy/sofa-rpc-proxy/index.html
+++ b/docs/2.4.0/user-guide/proxy/sofa-rpc-proxy/index.html
@@ -9,8 +9,8 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Sofa Proxy | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/user-guide/proxy/sofa-rpc-proxy"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" name="docsearch [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -25,7 +25,7 @@
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><span class="token tag" style="color:#00009f">bean</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">id</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Build parameter pair.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * this is Resolve http body to get sofa param.</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> *</span></span><span class="token-line" s [...]
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div></div><footer class="row docusaurus-mt-lg"><div class="col"><a href="https://github.com/apache/shenyu-website/edit/main/versioned_docs/version-2.4.0/user-guide/proxy/sofa-rpc-proxy.md" target="_blank" rel="noreferrer noopener"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_mS5F" aria-hidden="true"><g><path d=" [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/user-guide/proxy/spring-cloud-proxy/index.html b/docs/2.4.0/user-guide/proxy/spring-cloud-proxy/index.html
index 4cb2b0a7c8..eff1ae5192 100644
--- a/docs/2.4.0/user-guide/proxy/spring-cloud-proxy/index.html
+++ b/docs/2.4.0/user-guide/proxy/spring-cloud-proxy/index.html
@@ -9,8 +9,8 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Spring Cloud Proxy | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/user-guide/proxy/spring-cloud-proxy"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" nam [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -25,7 +25,7 @@
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @GetMapping("/findById")</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public OrderDTO findById(@RequestParam("id") final String id) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> OrderDTO orderDTO = new OrderDTO();</span></span><span class="token-line" style="color:#393A34"><span [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @PostMapping("/save")</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @ShenyuSpringMvcClient(path = "/save")</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public OrderDTO save(@RequestBody final OrderDTO orderDTO) {</span></span><span class="token-line" style="color:#393A34"><span class=" [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @GetMapping("/findById")</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public OrderDTO findById(@RequestParam("id") final String id) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> OrderDTO orderDTO = new OrderDTO();</span></span><span class="token-line" style="color:#393A34"><span [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/user-guide/proxy/tars-proxy/index.html b/docs/2.4.0/user-guide/proxy/tars-proxy/index.html
index 7bb1f97ba6..168f1f933b 100644
--- a/docs/2.4.0/user-guide/proxy/tars-proxy/index.html
+++ b/docs/2.4.0/user-guide/proxy/tars-proxy/index.html
@@ -9,8 +9,8 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Tars Proxy | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/user-guide/proxy/tars-proxy"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" name="docsearch:doc [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -18,7 +18,7 @@
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag punctuation" style="color:#393A34">></span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34" [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @ShenyuTarsClient(path = "/helloInt", desc = "helloInt")</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public int helloInt(int no, String name) {</span></span><span class="token-line" style="color:#393A34"><span class="token [...]
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="user-request"></a>User Request<a class="hash-link" href="#user-request" title="Direct link to heading">#</a></h2><p>You can request your tars service by Http. The <code>Apache ShenYu</code> gateway needs to have a route prefix which is the <code>contextPath</code> conf [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/user-guide/register-center-access/index.html b/docs/2.4.0/user-guide/register-center-access/index.html
index c6c6c98e19..ffce3aab50 100644
--- a/docs/2.4.0/user-guide/register-center-access/index.html
+++ b/docs/2.4.0/user-guide/register-center-access/index.html
@@ -9,8 +9,8 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Application Client Access Config | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/user-guide/register-center-access"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helme [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><img src="/img/shenyu/register/register-consul-admin-yml.png" width="70%" height="60%"><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="shenyu-client-config-3"></a>shenyu-client config<a class="hash-link" href="#shenyu-client-config-3" title="Direct link to heading">#</a></h4><blockquote><p>Note that the <code>consul [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"><</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag punctuation" style="color:#393A34">></span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34"> [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">spring</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">cloud</span><span class="token punctuation" style="color:#393A34">:</span><span class="token pl [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/user-guide/use-data-sync/index.html b/docs/2.4.0/user-guide/use-data-sync/index.html
index da346d2a78..2bacd0029a 100644
--- a/docs/2.4.0/user-guide/use-data-sync/index.html
+++ b/docs/2.4.0/user-guide/use-data-sync/index.html
@@ -9,15 +9,15 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Data Synchronization Config | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/user-guide/use-data-sync"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.0"><meta data-react-helmet="true" name= [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
the microservice needs to be restarted.
the Apache ShenYu gateway and shenyu-admin must use the same synchronization strategy.</p></blockquote></div><footer class="row docusaurus-mt-lg"><div class="col"><a href="https://github.com/apache/shenyu-website/edit/main/versioned_docs/version-2.4.0/user-guide/use-data-sync.md" target="_blank" rel="noreferrer noopener"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_mS5F" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/deployment/deployment-cluster/index.html b/docs/2.4.1/deployment/deployment-cluster/index.html
index 36a84a2f4c..2194538e52 100644
--- a/docs/2.4.1/deployment/deployment-cluster/index.html
+++ b/docs/2.4.1/deployment/deployment-cluster/index.html
@@ -9,8 +9,8 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Cluster Deployment | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.1/deployment/deployment-cluster"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.1"><meta data-react-helmet="true" name="doc [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -18,7 +18,7 @@
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">> linux: ./start.sh </span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="start-apache-shenyu-boostrap"></a>Start Apache ShenYu Boostrap<a class="hash-link" href="#start-apache-shenyu-boostrap" title="Direct link to heading">#</a></h [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">> linux : ./start.sh </span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><blockquote><p>After completing these operations, you will deploy <code>ShenYu Boostrap</code> Cluster.</p><p>For example. you will deploy <code>ShenYu Bootstrap</code> in <code>10.1.1.1</code> and <code>10.1.1.2</code> and deploy nginx [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">> linux: /usr/local/nginx/sbin/nginx </span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><ul><li>verify nginx, looking at your <code>ShenYu Bootstrap</code> log or <code>Nginx</code> log, Where will the verification request go.</li></ul></div><footer class="row docusaurus-mt-lg"><div class="col"><a href="http [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/deployment/deployment-custom/index.html b/docs/2.4.1/deployment/deployment-custom/index.html
index daecb56889..cc5270ff0f 100644
--- a/docs/2.4.1/deployment/deployment-custom/index.html
+++ b/docs/2.4.1/deployment/deployment-custom/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Custom Deployment | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.1/deployment/deployment-custom"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.1"><meta data-react-helmet="true" name="docse [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/deployment/deployment-docker/index.html b/docs/2.4.1/deployment/deployment-docker/index.html
index 22e494be5a..e966b13a37 100644
--- a/docs/2.4.1/deployment/deployment-docker/index.html
+++ b/docs/2.4.1/deployment/deployment-docker/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Docker Deployment | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.1/deployment/deployment-docker"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.1"><meta data-react-helmet="true" name="docse [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/deployment/deployment-helm/index.html b/docs/2.4.1/deployment/deployment-helm/index.html
index 759985ff7c..70855c4acf 100644
--- a/docs/2.4.1/deployment/deployment-helm/index.html
+++ b/docs/2.4.1/deployment/deployment-helm/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Helm Deployment | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.1/deployment/deployment-helm"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.1"><meta data-react-helmet="true" name="docsearch [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/deployment/deployment-k8s/index.html b/docs/2.4.1/deployment/deployment-k8s/index.html
index 2d3a1a1958..867cdf300c 100644
--- a/docs/2.4.1/deployment/deployment-k8s/index.html
+++ b/docs/2.4.1/deployment/deployment-k8s/index.html
@@ -9,14 +9,14 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">K8s Deployment | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.1/deployment/deployment-k8s"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.1"><meta data-react-helmet="true" name="docsearch:d [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
II. Use MySQL as the database</li></ol><p>Similar to the h2 process, there are two points to note</p><ol><li>you need to load <a href="https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.18/mysql-connector-java-8.0.18.jar" target="_blank" rel="noopener noreferrer">mysql-connector.jar</a>, so you need a place to store the file</li><li>you need to specify an external MySQL database configuration to proxy the external MySQL database via Endpoints</li></ol><p>The process is as foll [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/deployment/deployment-local/index.html b/docs/2.4.1/deployment/deployment-local/index.html
index 89226b3635..d87c351233 100644
--- a/docs/2.4.1/deployment/deployment-local/index.html
+++ b/docs/2.4.1/deployment/deployment-local/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Local Deployment | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.1/deployment/deployment-local"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.1"><meta data-react-helmet="true" name="docsear [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/deployment/deployment-package/index.html b/docs/2.4.1/deployment/deployment-package/index.html
index 5cb156a9ee..f61de863ec 100644
--- a/docs/2.4.1/deployment/deployment-package/index.html
+++ b/docs/2.4.1/deployment/deployment-package/index.html
@@ -9,8 +9,8 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Binary Packages Deployment | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.1/deployment/deployment-package"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.1"><meta data-react-helmet="true" n [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -19,7 +19,7 @@
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">> linux: ./start.sh </span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><ul><li>use <code>PostgreSql</code> to store data, go to the <code>/conf</code> directory, and modify <code>spring.profiles.active</code> of the configuration in <code>application.yaml</code> to <code>pg</code>.</li></ul><div class="code [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">> linux: ./start.sh </span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="start-apache-shenyu-bootstrap"></a>Start Apache ShenYu Bootstrap<a class="hash-link" href="#start-apache-shenyu-bootstrap" title="Direct link to heading">#</a> [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">> linux : ./start.sh </span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div></div><footer class="row docusaurus-mt-lg"><div class="col"><a href="https://github.com/apache/shenyu-website/edit/main/versioned_docs/version-2.4.1/deployment/deployment-package.md" target="_blank" rel="noreferrer noopener"><svg fill="c [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/deployment/deployment-quick/index.html b/docs/2.4.1/deployment/deployment-quick/index.html
index e412bcfb17..716b31f968 100644
--- a/docs/2.4.1/deployment/deployment-quick/index.html
+++ b/docs/2.4.1/deployment/deployment-quick/index.html
@@ -9,14 +9,14 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Local Quick Deployment | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.1/deployment/deployment-quick"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.1"><meta data-react-helmet="true" name="d [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">> linux : ./start.sh </span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="selector-and-rule-configuration"></a>Selector and rule configuration<a class="hash-link" href="#selector-and-rule-configuration" title="Direct link to heading [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/design/data-sync/index.html b/docs/2.4.1/design/data-sync/index.html
index cc43381bda..03c538b9a5 100644
--- a/docs/2.4.1/design/data-sync/index.html
+++ b/docs/2.4.1/design/data-sync/index.html
@@ -9,13 +9,13 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Data Synchronization Design | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.1/design/data-sync"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.1"><meta data-react-helmet="true" name="docsear [...]
-<link rel="preload" href="/assets/js/runtime~main.80cd9f2f.js" as="script">
-<link rel="preload" href="/assets/js/main.38e23c42.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.3f429ee8.js" as="script">
+<link rel="preload" href="/assets/js/main.f80cece7.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navba [...]
-<script src="/assets/js/runtime~main.80cd9f2f.js"></script>
-<script src="/assets/js/main.38e23c42.js"></script>
+<script src="/assets/js/runtime~main.3f429ee8.js"></script>
+<script src="/assets/js/main.f80cece7.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/design/database-design/index.html b/docs/2.4.1/design/database-design/index.html
index 7c11079196..7d26bbb042 100644
--- a/docs/2.4.1/design/database-design/index.html
+++ b/docs/2.4.1/design/database-design/index.html
@@ -9,15 +9,15 @@
<link rel="search" type="application/opensearchdescription+xml" title="Apache ShenYu" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/news/rss.xml" title="Apache ShenYu Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/news/atom.xml" title="Apache ShenYu Blog Atom Feed"><title data-react-helmet="true">Apache ShenYu Admin Database Design | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.1/design/database-design"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.1"><meta data-react-helmet="true" [...]
... 49773 lines suppressed ...