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 2022/12/19 17:02:38 UTC
[shenyu-website] branch asf-site updated: deploy: 2bb789e9ef38f4970407d33bd6f762e9ea42e811
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 7e714677261 deploy: 2bb789e9ef38f4970407d33bd6f762e9ea42e811
7e714677261 is described below
commit 7e714677261ef70cee0ec2aa5220c077f7bb8e6f
Author: github-actions[bot] <gi...@users.noreply.github.com>
AuthorDate: Mon Dec 19 17:02:26 2022 +0000
deploy: 2bb789e9ef38f4970407d33bd6f762e9ea42e811
---
404.html | 8 +-
assets/js/052ca6ab.42377d52.js | 1 +
assets/js/052ca6ab.c9a1e42c.js | 1 -
assets/js/08867c29.01acd0bf.js | 1 +
assets/js/08867c29.2cad6d44.js | 1 -
assets/js/0b6e15f8.381fd6d2.js | 1 -
assets/js/0b6e15f8.446360b5.js | 1 +
assets/js/0f6f7a4b.368fb6e7.js | 1 -
assets/js/0f6f7a4b.5afae381.js | 1 +
assets/js/116e6d8f.75ed9d95.js | 1 -
assets/js/116e6d8f.a0cd0be3.js | 1 +
assets/js/1659b332.b664ba4b.js | 1 -
assets/js/1659b332.eb9ede4d.js | 1 +
assets/js/1a04ab40.3a23292f.js | 1 +
assets/js/1a04ab40.fc7bb78e.js | 1 -
assets/js/24348229.3b6d7d5f.js | 1 +
assets/js/24348229.e3a9946c.js | 1 -
assets/js/267487da.4eedf88d.js | 1 -
assets/js/267487da.d9ba767d.js | 1 +
assets/js/2ad358a6.484e727f.js | 1 +
assets/js/2de77161.9b68c499.js | 1 -
assets/js/2de77161.e7142414.js | 1 +
assets/js/2f9b393f.6afdd28d.js | 1 +
assets/js/2f9b393f.f9f863fe.js | 1 -
assets/js/380526c3.18900080.js | 1 -
assets/js/380526c3.425376b3.js | 1 +
assets/js/3b810fa0.f376be40.js | 1 +
assets/js/3b810fa0.ff614e62.js | 1 -
assets/js/3be0678d.85435386.js | 1 +
assets/js/3be0678d.9b2fcf34.js | 1 -
assets/js/3c1d5675.8e6d602b.js | 1 +
assets/js/3c1d5675.dce73bb5.js | 1 -
assets/js/3c32e005.37d657bc.js | 1 -
assets/js/3c32e005.b9609bf9.js | 1 +
assets/js/3e51ef3b.cdde5413.js | 1 +
assets/js/3e51ef3b.cfdb9202.js | 1 -
assets/js/3ec2dd5b.12716895.js | 1 -
assets/js/3ec2dd5b.40029169.js | 1 +
assets/js/405a2402.eec28b62.js | 1 +
assets/js/43105b19.287c7256.js | 1 -
assets/js/43105b19.9e878b02.js | 1 +
assets/js/44e9e6f4.6dc8993e.js | 1 -
assets/js/44e9e6f4.83e5dbb2.js | 1 +
assets/js/4521f334.68c5dbe5.js | 1 -
assets/js/4521f334.e585317b.js | 1 +
assets/js/4fb2eb56.22564f3a.js | 1 -
assets/js/4fb2eb56.a039294a.js | 1 +
assets/js/5410ef7f.a2908810.js | 1 -
assets/js/5410ef7f.c87b6eb4.js | 1 +
assets/js/54cfa241.0fcfd32c.js | 1 +
assets/js/54cfa241.4f3153b8.js | 1 -
assets/js/55672386.0215ac08.js | 1 -
assets/js/55672386.58a090de.js | 1 +
assets/js/55b3f2e2.36133956.js | 1 +
assets/js/55b3f2e2.4b60e1b1.js | 1 -
assets/js/55f15e0e.b7ee2b92.js | 1 +
assets/js/55f15e0e.d9bfb3e0.js | 1 -
assets/js/5727a7c9.2526108d.js | 1 +
assets/js/5727a7c9.e99ab87a.js | 1 -
assets/js/58ee83e2.329714d7.js | 1 +
assets/js/58ee83e2.aad71810.js | 1 -
assets/js/59735065.411910d1.js | 1 +
assets/js/59735065.fe797f4a.js | 1 -
assets/js/5ff6eb0a.05d93a65.js | 1 +
assets/js/5ff6eb0a.c697d1ba.js | 1 -
assets/js/60d30544.b2b55962.js | 1 +
assets/js/60d30544.e4a2979c.js | 1 -
assets/js/616119c6.9229b21b.js | 1 -
assets/js/616119c6.eecb9e29.js | 1 +
assets/js/72f98f92.19d6814b.js | 1 +
assets/js/7e9bc4f1.afc7030f.js | 1 -
assets/js/7e9bc4f1.d8ed7322.js | 1 +
assets/js/817af225.3cb1f68f.js | 1 +
assets/js/817af225.b3521dda.js | 1 -
assets/js/82b01cda.315b984b.js | 1 -
assets/js/82b01cda.82181d0a.js | 1 +
assets/js/831027cc.730b09f5.js | 1 -
assets/js/831027cc.d2c40271.js | 1 +
assets/js/8452233b.95dffad7.js | 1 -
assets/js/8452233b.d8558920.js | 1 +
assets/js/84fc8ece.13bf01c7.js | 1 +
assets/js/84fc8ece.6b7fc9ea.js | 1 -
assets/js/87137adb.63e7f169.js | 1 +
assets/js/87137adb.b5d7c9ed.js | 1 -
assets/js/8877b104.639f58ab.js | 1 -
assets/js/8877b104.96778c28.js | 1 +
assets/js/8afb6277.37271d31.js | 1 -
assets/js/8afb6277.72cf3628.js | 1 +
assets/js/8ebe6518.99468172.js | 1 +
assets/js/8fcb083f.a7184e62.js | 1 +
assets/js/8fcb083f.ee327c4d.js | 1 -
assets/js/935f2afb.49b6bb49.js | 1 +
assets/js/935f2afb.c7cd1912.js | 1 -
assets/js/947a0520.07fd0bc2.js | 1 +
assets/js/947a0520.8c22a203.js | 1 -
assets/js/94c195cb.ac3afca3.js | 1 -
assets/js/94c195cb.f9811cbf.js | 1 +
assets/js/95e485e3.4e88a42d.js | 1 -
assets/js/95e485e3.c62178e8.js | 1 +
assets/js/97f557ce.38d0cb53.js | 1 -
assets/js/97f557ce.4762e251.js | 1 +
assets/js/9bd813a2.916e141e.js | 1 +
assets/js/9bd813a2.bc8d40fd.js | 1 -
assets/js/9e8596f8.599503b7.js | 1 -
assets/js/9e8596f8.b2ef2c08.js | 1 +
assets/js/a0096cbe.2dfe89ef.js | 1 +
assets/js/a0096cbe.dcc50107.js | 1 -
assets/js/a3552f5a.c8414a39.js | 1 +
assets/js/a3552f5a.ca18dc3b.js | 1 -
assets/js/a7023ddc.9c904ae7.js | 1 -
assets/js/a7023ddc.d76c13ad.js | 1 +
assets/js/aa12c159.3bf976d8.js | 1 -
assets/js/aa12c159.85494034.js | 1 +
assets/js/b157d6b8.32186e09.js | 1 -
assets/js/b157d6b8.91752ead.js | 1 +
assets/js/b5d8c0a0.0131e00c.js | 1 +
assets/js/b5d8c0a0.ef727ef4.js | 1 -
assets/js/b82d0e2d.235bb937.js | 1 +
assets/js/b82d0e2d.98a458f4.js | 1 -
assets/js/ba4a7a1c.4803409a.js | 1 -
assets/js/ba4a7a1c.97ff184d.js | 1 +
assets/js/bb2b5f22.0cf6d8bf.js | 1 +
assets/js/bb2b5f22.2f6be834.js | 1 -
assets/js/bb7fdef6.1bfa36fc.js | 1 -
assets/js/bb7fdef6.6d21b226.js | 1 +
assets/js/bce5470e.0359940d.js | 1 -
assets/js/bce5470e.c7b2ce16.js | 1 +
assets/js/bd113394.9590a249.js | 1 -
assets/js/bd113394.c17abe7b.js | 1 +
assets/js/bef79935.3da15e9f.js | 1 -
assets/js/bef79935.5d61f11e.js | 1 +
assets/js/c16da20a.2d5bbeba.js | 1 +
assets/js/c4cf7888.09fe5fed.js | 1 -
assets/js/c4cf7888.66f2ba6b.js | 1 +
assets/js/c59f34d8.0134ffdc.js | 1 +
assets/js/c59f34d8.9bc2a76a.js | 1 -
assets/js/c5b72fd0.5d75fbb3.js | 1 -
assets/js/c5b72fd0.970e5f20.js | 1 +
assets/js/c67c2a3d.87c2c914.js | 1 -
assets/js/c67c2a3d.c66673ce.js | 1 +
assets/js/cd0e252c.4499a2fd.js | 1 +
assets/js/cd0e252c.9e5f66c1.js | 1 -
assets/js/cdce4d88.885d4772.js | 1 +
assets/js/cdce4d88.a0ba2625.js | 1 -
assets/js/ce6a09fc.7945845a.js | 1 -
assets/js/ce6a09fc.e2d2a58a.js | 1 +
assets/js/cee33d69.3398b002.js | 1 -
assets/js/cee33d69.691fe1ef.js | 1 +
assets/js/d124637b.076dda9d.js | 1 -
assets/js/d124637b.d52addeb.js | 1 +
assets/js/d34575f9.4b3b3892.js | 1 +
assets/js/d34575f9.a9d17b5c.js | 1 -
assets/js/d4ae858d.02a715d0.js | 1 -
assets/js/d4ae858d.c7bbbeec.js | 1 +
assets/js/d9d26c48.6ff56053.js | 1 -
assets/js/d9d26c48.acd685ce.js | 1 +
assets/js/e14e2680.5cc89fe5.js | 1 -
assets/js/e14e2680.a8ea0eeb.js | 1 +
assets/js/e1b162fa.327ecbf7.js | 1 +
assets/js/e1b162fa.7a6775f3.js | 1 -
assets/js/e55ca4fc.d53d88be.js | 1 +
assets/js/e55ca4fc.f9c9e26d.js | 1 -
assets/js/e6da6e1b.2606edf6.js | 1 -
assets/js/e6da6e1b.71243013.js | 1 +
assets/js/e800dce1.0ab47719.js | 1 -
assets/js/e800dce1.c92d4e1c.js | 1 +
assets/js/ea353db9.83610572.js | 1 -
assets/js/ea353db9.f6a3947b.js | 1 +
assets/js/eade0d33.3834f028.js | 1 +
assets/js/eade0d33.3dbda66c.js | 1 -
assets/js/efd0111a.7a81b082.js | 1 +
assets/js/efd0111a.99b435de.js | 1 -
assets/js/f292e823.2a609420.js | 1 -
assets/js/f292e823.e2d4102f.js | 1 +
assets/js/f2ce4146.955849b6.js | 1 +
assets/js/f2ce4146.c9bdb580.js | 1 -
assets/js/main.1fdf3d3a.js | 2 -
assets/js/main.305409c4.js | 2 +
...js.LICENSE.txt => main.305409c4.js.LICENSE.txt} | 0
assets/js/runtime~main.29364ae6.js | 1 -
assets/js/runtime~main.bc6125ff.js | 1 +
.../index.html | 12 +-
.../index.html | 10 +-
.../index.html | 12 +-
.../index.html | 12 +-
.../index.html | 12 +-
blog/IntegrationTest-Analysis/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 | 10 +-
.../index.html | 12 +-
blog/SPI-SourceCode-Analysis-SPI/index.html | 10 +-
.../index.html | 10 +-
blog/atom.xml | 90 ++---
blog/index.html | 8 +-
blog/page/2/index.html | 127 +++++--
blog/rss.xml | 90 ++---
blog/tags/apache-shen-yu/index.html | 268 +++++++--------
blog/tags/context-path/index.html | 10 +-
blog/tags/data-sync/index.html | 72 ++--
blog/tags/divide/index.html | 10 +-
blog/tags/dubbo/index.html | 10 +-
blog/tags/etcd/index.html | 10 +-
blog/tags/http/index.html | 12 +-
blog/tags/index.html | 10 +-
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 | 12 +-
blog/tags/rate-limiter/index.html | 10 +-
blog/tags/register-center/index.html | 10 +-
blog/tags/spi/index.html | 16 +-
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/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/use-apache-email/index.html | 10 +-
community/user-registration/index.html | 10 +-
community/vote-pmc/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 +-
docs/2.4.0/user-guide/dubbo-proxy/index.html | 8 +-
docs/2.4.0/user-guide/grpc-proxy/index.html | 8 +-
docs/2.4.0/user-guide/http-proxy/index.html | 8 +-
docs/2.4.0/user-guide/motan-proxy/index.html | 8 +-
.../admin-property-config/index.html | 8 +-
.../client-property-config/index.html | 8 +-
.../gateway-property-config/index.html | 8 +-
.../user-guide/register-center-access/index.html | 8 +-
docs/2.4.0/user-guide/sofa-rpc-proxy/index.html | 8 +-
.../2.4.0/user-guide/spring-cloud-proxy/index.html | 8 +-
docs/2.4.0/user-guide/tars-proxy/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 +-
docs/2.4.1/user-guide/dubbo-proxy/index.html | 8 +-
docs/2.4.1/user-guide/grpc-proxy/index.html | 8 +-
docs/2.4.1/user-guide/http-proxy/index.html | 8 +-
docs/2.4.1/user-guide/motan-proxy/index.html | 8 +-
.../admin-property-config/index.html | 8 +-
.../client-property-config/index.html | 8 +-
.../gateway-property-config/index.html | 8 +-
.../user-guide/register-center-access/index.html | 8 +-
docs/2.4.1/user-guide/sofa-rpc-proxy/index.html | 8 +-
.../2.4.1/user-guide/spring-cloud-proxy/index.html | 8 +-
docs/2.4.1/user-guide/tars-proxy/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 +-
docs/2.4.2/user-guide/dubbo-proxy/index.html | 8 +-
docs/2.4.2/user-guide/grpc-proxy/index.html | 8 +-
docs/2.4.2/user-guide/http-proxy/index.html | 8 +-
docs/2.4.2/user-guide/motan-proxy/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 +-
.../user-guide/register-center-access/index.html | 8 +-
.../user-guide/register-center-instance/index.html | 8 +-
docs/2.4.2/user-guide/sofa-rpc-proxy/index.html | 8 +-
.../2.4.2/user-guide/spring-cloud-proxy/index.html | 8 +-
docs/2.4.2/user-guide/tars-proxy/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 +-
docs/2.4.3/user-guide/dubbo-proxy/index.html | 8 +-
docs/2.4.3/user-guide/grpc-proxy/index.html | 8 +-
docs/2.4.3/user-guide/http-proxy/index.html | 8 +-
docs/2.4.3/user-guide/motan-proxy/index.html | 8 +-
.../admin-property-config/index.html | 8 +-
.../client-property-config/index.html | 8 +-
.../gateway-property-config/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/sofa-rpc-proxy/index.html | 8 +-
.../2.4.3/user-guide/spring-cloud-proxy/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.4.3/user-guide/websocket-proxy/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/developer/custom-filter/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/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/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/developer/custom-filter/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/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-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 +-
.../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 +-
.../admin-usage/data-permission/index.html | 10 +-
.../admin-usage/dictionary-management/index.html | 10 +-
.../plugin-handle-explanation/index.html | 10 +-
.../admin-usage/role-management/index.html | 10 +-
.../admin-usage/selector-and-rule/index.html | 10 +-
docs/next/user-guide/dubbo-proxy/index.html | 12 +-
docs/next/user-guide/grpc-proxy/index.html | 10 +-
docs/next/user-guide/http-proxy/index.html | 10 +-
docs/next/user-guide/motan-proxy/index.html | 10 +-
.../admin-property-config/index.html | 10 +-
.../client-property-config/index.html | 10 +-
.../gateway-property-config/index.html | 10 +-
.../register-center-access/index.html | 10 +-
.../register-center-instance/index.html | 10 +-
.../property-config/use-data-sync/index.html | 10 +-
.../sdk-usage/shenyu-sdk-consul/index.html | 28 ++
.../sdk-usage/shenyu-sdk-etcd/index.html | 28 ++
.../sdk-usage/shenyu-sdk-eureka/index.html | 26 ++
.../sdk-usage/shenyu-sdk-nacos/index.html | 26 ++
.../sdk-usage/shenyu-sdk-zookeeper/index.html | 28 ++
docs/next/user-guide/sofa-rpc-proxy/index.html | 10 +-
docs/next/user-guide/spring-cloud-proxy/index.html | 10 +-
docs/next/user-guide/tars-proxy/index.html | 10 +-
docs/next/user-guide/websocket-proxy/index.html | 10 +-
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-kafka/index.html | 8 +-
.../observability/logging-plugin/index.html | 8 +-
.../observability/logging-rocketmq/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 +-
.../proxy/websocket-plugin/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 +-
.../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 +-
docs/user-guide/dubbo-proxy/index.html | 8 +-
docs/user-guide/grpc-proxy/index.html | 8 +-
docs/user-guide/http-proxy/index.html | 8 +-
docs/user-guide/motan-proxy/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/sofa-rpc-proxy/index.html | 8 +-
docs/user-guide/spring-cloud-proxy/index.html | 8 +-
docs/user-guide/tars-proxy/index.html | 8 +-
docs/user-guide/websocket-proxy/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/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 +-
helloReact/index.html | 8 +-
helm/index/index.html | 10 +-
img/shenyu/sdk/shenyu-sdk_process.png | Bin 0 -> 88974 bytes
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-PPMC-2021-11-05/index.html | 8 +-
.../index.html | 8 +-
.../Apache-ShenYu-release-version-2.4.3/index.html | 8 +-
.../index.html | 8 +-
news/index.html | 8 +-
news/page/2/index.html | 8 +-
news/tags/apache-shen-yu/index.html | 8 +-
news/tags/index.html | 8 +-
pdf/apache_shenyu_docs_en.pdf | Bin 5552711 -> 5552717 bytes
pdf/apache_shenyu_docs_zh.pdf | Bin 4836364 -> 4836377 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 +-
sitemap.xml | 2 +-
team/index.html | 8 +-
users/index.html | 8 +-
versions/index.html | 8 +-
zh/404.html | 8 +-
zh/assets/js/004a8706.325f0c05.js | 1 +
zh/assets/js/004a8706.b056190c.js | 1 -
zh/assets/js/01a34b95.27cafbb1.js | 1 -
zh/assets/js/01a34b95.62805058.js | 1 +
zh/assets/js/043520ee.059a5956.js | 1 +
zh/assets/js/043520ee.289ebf88.js | 1 -
zh/assets/js/07aa3753.33937510.js | 1 +
zh/assets/js/07aa3753.e3940cca.js | 1 -
zh/assets/js/08df4d3e.2da10daa.js | 1 +
zh/assets/js/08df4d3e.daa759b2.js | 1 -
zh/assets/js/0bf34941.6f4ed909.js | 1 -
zh/assets/js/0bf34941.aaccface.js | 1 +
zh/assets/js/1176234e.09dcff32.js | 1 -
zh/assets/js/1176234e.c2f9b8e8.js | 1 +
zh/assets/js/11b1825b.12171748.js | 1 -
zh/assets/js/11b1825b.769e537b.js | 1 +
zh/assets/js/132e4f44.db7e7b80.js | 1 +
zh/assets/js/132e4f44.f84b591b.js | 1 -
zh/assets/js/1596876c.424c062d.js | 1 +
zh/assets/js/1596876c.b3418063.js | 1 -
zh/assets/js/18ddef57.722336d5.js | 1 +
zh/assets/js/21a929e8.8b2598c4.js | 1 +
zh/assets/js/2376329e.a78dbef4.js | 1 +
zh/assets/js/2498cb36.b920dbd2.js | 1 -
zh/assets/js/2498cb36.c46cc230.js | 1 +
zh/assets/js/29181f97.0f661ec4.js | 1 -
zh/assets/js/29181f97.47e189d9.js | 1 +
zh/assets/js/2b8fdfea.4f25823e.js | 1 +
zh/assets/js/2b8fdfea.5a5ba58f.js | 1 -
zh/assets/js/2c7455a0.981bdb07.js | 1 +
zh/assets/js/2c7455a0.dbf32817.js | 1 -
zh/assets/js/2ddbda6b.18b944f8.js | 1 -
zh/assets/js/2ddbda6b.729c71b6.js | 1 +
zh/assets/js/2fbcdd2b.700f8e3f.js | 1 +
zh/assets/js/2fbcdd2b.e570b49c.js | 1 -
zh/assets/js/321537af.6b781b47.js | 1 -
zh/assets/js/321537af.ac8192c7.js | 1 +
zh/assets/js/354c138e.47d8e6ff.js | 1 +
zh/assets/js/354c138e.79e78df1.js | 1 -
zh/assets/js/35e29d8a.206c0c8a.js | 1 +
zh/assets/js/35e29d8a.29a8a52f.js | 1 -
zh/assets/js/369a3dce.1ba77964.js | 1 +
zh/assets/js/38fb0855.6532e4af.js | 1 +
zh/assets/js/38fb0855.eaeca37e.js | 1 -
zh/assets/js/3bdb942c.55fd7f52.js | 1 +
zh/assets/js/3bdb942c.b91daae6.js | 1 -
zh/assets/js/3c2baceb.809d952d.js | 1 -
zh/assets/js/3c2baceb.8f93ff2b.js | 1 +
zh/assets/js/3d802670.82e32929.js | 1 -
zh/assets/js/3d802670.91f3c8c4.js | 1 +
zh/assets/js/42dca312.85626df0.js | 1 +
zh/assets/js/42dca312.9ac034b5.js | 1 -
zh/assets/js/43ea63f0.82cbf51f.js | 1 +
zh/assets/js/43ea63f0.bb2ad1bd.js | 1 -
zh/assets/js/48ac8416.3a72fad3.js | 1 +
zh/assets/js/48ac8416.f71385f3.js | 1 -
zh/assets/js/49904786.7dbd4e1b.js | 1 -
zh/assets/js/49904786.f3d1641c.js | 1 +
zh/assets/js/49e7e128.7cd1c0d4.js | 1 -
zh/assets/js/49e7e128.836aa606.js | 1 +
zh/assets/js/5857e074.028612f3.js | 1 -
zh/assets/js/5857e074.9ee68d8a.js | 1 +
zh/assets/js/58d80521.30dee43b.js | 1 -
zh/assets/js/58d80521.98ca88e5.js | 1 +
zh/assets/js/594d1c54.ab6804be.js | 1 -
zh/assets/js/594d1c54.e14e7202.js | 1 +
zh/assets/js/5aa56cc1.81819229.js | 1 +
zh/assets/js/5d1f44e6.61701ca2.js | 1 +
zh/assets/js/5d1f44e6.f77cdb9b.js | 1 -
zh/assets/js/64ddfa4d.04399741.js | 1 +
zh/assets/js/64ddfa4d.ca85e0f8.js | 1 -
zh/assets/js/69e68cac.9322c960.js | 1 -
zh/assets/js/69e68cac.9e08fe19.js | 1 +
zh/assets/js/6ed95132.5e58a51c.js | 1 +
zh/assets/js/6ed95132.9fbfa1f2.js | 1 -
zh/assets/js/70d58edf.54908660.js | 1 +
zh/assets/js/70d58edf.71781a13.js | 1 -
zh/assets/js/7135f35e.565dbb9b.js | 1 +
zh/assets/js/7135f35e.92574e82.js | 1 -
zh/assets/js/758785e3.53860dea.js | 1 +
zh/assets/js/758785e3.6b61f610.js | 1 -
zh/assets/js/76e12585.0d9e881d.js | 1 -
zh/assets/js/76e12585.834fff61.js | 1 +
zh/assets/js/7bb6d109.6caa051b.js | 1 +
zh/assets/js/7bb6d109.ced631af.js | 1 -
zh/assets/js/7d5b84f0.5b8777ca.js | 1 -
zh/assets/js/7d5b84f0.eeebc771.js | 1 +
zh/assets/js/837216e3.f46474d1.js | 1 +
zh/assets/js/837216e3.f8292944.js | 1 -
zh/assets/js/8dfcabf3.8d642829.js | 1 +
zh/assets/js/8dfcabf3.fc7e527f.js | 1 -
zh/assets/js/935f2afb.c958f33b.js | 1 -
zh/assets/js/935f2afb.cc26f0bd.js | 1 +
zh/assets/js/95e485e3.981ed235.js | 1 +
zh/assets/js/95e485e3.cff82942.js | 1 -
zh/assets/js/9f1f1d8b.1505714c.js | 1 -
zh/assets/js/9f1f1d8b.d9360a01.js | 1 +
zh/assets/js/a3964000.02e00c44.js | 1 -
zh/assets/js/a3964000.f3d37412.js | 1 +
zh/assets/js/a7084103.4763a36d.js | 1 -
zh/assets/js/a7084103.84df516b.js | 1 +
zh/assets/js/b1b9b75a.9b1a3bba.js | 1 +
zh/assets/js/b1b9b75a.a8b1950b.js | 1 -
zh/assets/js/b42ed7de.c8bd8f7d.js | 1 +
zh/assets/js/b42ed7de.f0429a88.js | 1 -
zh/assets/js/bbaffe6b.010071b7.js | 1 -
zh/assets/js/bbaffe6b.9a51aca0.js | 1 +
zh/assets/js/bd8d6e06.dae93cd4.js | 1 +
zh/assets/js/bd8d6e06.f7d37e50.js | 1 -
zh/assets/js/bf06b8b1.6c104ee8.js | 1 -
zh/assets/js/bf06b8b1.b0c4447e.js | 1 +
zh/assets/js/bfb16af5.094b1661.js | 1 +
zh/assets/js/bfb16af5.5a6411fc.js | 1 -
zh/assets/js/c0a1427a.334ea8f9.js | 1 -
zh/assets/js/c0a1427a.43010a30.js | 1 +
zh/assets/js/c2673bf5.1e3a6fe0.js | 1 -
zh/assets/js/c2673bf5.9740ae7a.js | 1 +
zh/assets/js/c2cb83aa.4b2fae68.js | 1 +
zh/assets/js/c2cb83aa.576a839c.js | 1 -
zh/assets/js/c5cc403f.3f0c86c3.js | 1 +
zh/assets/js/c5cc403f.c7e4a4b0.js | 1 -
zh/assets/js/c73bc142.18450429.js | 1 -
zh/assets/js/c73bc142.9ff6766e.js | 1 +
zh/assets/js/c967a27f.053297a9.js | 1 -
zh/assets/js/c967a27f.a54595e5.js | 1 +
zh/assets/js/ca6cd059.36eb9c34.js | 1 -
zh/assets/js/ca6cd059.c5df878d.js | 1 +
zh/assets/js/cdf7c864.550117fc.js | 1 +
zh/assets/js/cdf7c864.ecf4fdd9.js | 1 -
zh/assets/js/cfb2e8e5.19b65e33.js | 1 +
zh/assets/js/cfb2e8e5.1bc420e8.js | 1 -
zh/assets/js/d0c8fed6.6a4028e8.js | 1 -
zh/assets/js/d0c8fed6.8172e7fd.js | 1 +
zh/assets/js/d2ed4b72.05e5c2e8.js | 1 +
zh/assets/js/d2ed4b72.757d1707.js | 1 -
zh/assets/js/d4b084f0.30f35c5b.js | 1 +
zh/assets/js/d4b084f0.e3eddda9.js | 1 -
zh/assets/js/d5445dc7.136e473a.js | 1 +
zh/assets/js/d5445dc7.ac21ec2c.js | 1 -
zh/assets/js/dab02110.ee1b82df.js | 1 -
zh/assets/js/dab02110.f820fb0b.js | 1 +
zh/assets/js/e388bdf9.39567bff.js | 1 +
zh/assets/js/e388bdf9.cfdc6c13.js | 1 -
zh/assets/js/e3dc4f65.67aa68cf.js | 1 +
zh/assets/js/e3dc4f65.e936c685.js | 1 -
zh/assets/js/e492e8f5.12cdbb2b.js | 1 -
zh/assets/js/e492e8f5.da884d62.js | 1 +
zh/assets/js/e4f9bda5.2ec214b3.js | 1 +
zh/assets/js/e4f9bda5.b9534397.js | 1 -
zh/assets/js/e7c0330d.529a2136.js | 1 -
zh/assets/js/e7c0330d.c005951b.js | 1 +
zh/assets/js/e8309287.025e5653.js | 1 -
zh/assets/js/e8309287.9b3272d9.js | 1 +
zh/assets/js/e980f106.74b0bb68.js | 1 -
zh/assets/js/e980f106.b3b861f7.js | 1 +
zh/assets/js/eb2312e3.1b75067d.js | 1 -
zh/assets/js/eb2312e3.a14fce66.js | 1 +
zh/assets/js/ec388103.64cb1ed7.js | 1 +
zh/assets/js/ec388103.ee03e5fb.js | 1 -
zh/assets/js/edde8715.eee30f60.js | 1 -
zh/assets/js/edde8715.f5a36d7e.js | 1 +
zh/assets/js/f12fab5d.32671a9f.js | 1 -
zh/assets/js/f12fab5d.3bd762d8.js | 1 +
zh/assets/js/f3aef7d0.14663115.js | 1 -
zh/assets/js/f3aef7d0.701274b5.js | 1 +
zh/assets/js/f3d411b6.af669025.js | 1 +
zh/assets/js/f3d411b6.b9a6a1ff.js | 1 -
zh/assets/js/f7fcb56a.58ca9f28.js | 1 +
zh/assets/js/f7fcb56a.a10e55cd.js | 1 -
zh/assets/js/f9827c10.12acdf39.js | 1 +
zh/assets/js/f9827c10.e2e5eca4.js | 1 -
zh/assets/js/fde8ff6d.a60a3f4e.js | 1 +
zh/assets/js/fde8ff6d.afea0b11.js | 1 -
zh/assets/js/ffd3a1ef.9ca6a1a2.js | 1 +
zh/assets/js/ffd3a1ef.c1c3eef3.js | 1 -
zh/assets/js/main.01670ed3.js | 2 +
...js.LICENSE.txt => main.01670ed3.js.LICENSE.txt} | 0
zh/assets/js/main.6ffd100d.js | 2 -
zh/assets/js/runtime~main.340541e0.js | 1 +
zh/assets/js/runtime~main.b7fd6a4b.js | 1 -
.../index.html | 12 +-
.../index.html | 12 +-
.../index.html | 12 +-
.../index.html | 12 +-
.../index.html | 12 +-
zh/blog/IntegrationTest-Analysis/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 | 10 +-
.../index.html | 10 +-
zh/blog/atom.xml | 106 +++---
zh/blog/index.html | 8 +-
zh/blog/page/2/index.html | 344 ++++++++-----------
zh/blog/rss.xml | 106 +++---
zh/blog/tags/apache-shen-yu/index.html | 378 ++++++++++-----------
zh/blog/tags/context-path/index.html | 10 +-
zh/blog/tags/data-sync/index.html | 76 ++---
zh/blog/tags/divide/index.html | 10 +-
zh/blog/tags/dubbo/index.html | 10 +-
zh/blog/tags/etcd/index.html | 10 +-
zh/blog/tags/http/index.html | 134 ++++----
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 | 12 +-
zh/blog/tags/rate-limiter/index.html | 10 +-
zh/blog/tags/register-center/index.html | 10 +-
zh/blog/tags/spi/index.html | 26 +-
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/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/use-apache-email/index.html | 10 +-
zh/community/user-registration/index.html | 10 +-
zh/community/vote-pmc/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 +-
zh/docs/2.4.0/user-guide/dubbo-proxy/index.html | 8 +-
zh/docs/2.4.0/user-guide/grpc-proxy/index.html | 8 +-
zh/docs/2.4.0/user-guide/http-proxy/index.html | 8 +-
zh/docs/2.4.0/user-guide/motan-proxy/index.html | 8 +-
.../admin-property-config/index.html | 8 +-
.../client-property-config/index.html | 8 +-
.../gateway-property-config/index.html | 8 +-
.../user-guide/register-center-access/index.html | 8 +-
zh/docs/2.4.0/user-guide/sofa-rpc-proxy/index.html | 8 +-
.../2.4.0/user-guide/spring-cloud-proxy/index.html | 8 +-
zh/docs/2.4.0/user-guide/tars-proxy/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 +-
zh/docs/2.4.1/user-guide/dubbo-proxy/index.html | 8 +-
zh/docs/2.4.1/user-guide/grpc-proxy/index.html | 8 +-
zh/docs/2.4.1/user-guide/http-proxy/index.html | 8 +-
zh/docs/2.4.1/user-guide/motan-proxy/index.html | 8 +-
.../admin-property-config/index.html | 8 +-
.../client-property-config/index.html | 8 +-
.../gateway-property-config/index.html | 8 +-
.../user-guide/register-center-access/index.html | 8 +-
zh/docs/2.4.1/user-guide/sofa-rpc-proxy/index.html | 8 +-
.../2.4.1/user-guide/spring-cloud-proxy/index.html | 8 +-
zh/docs/2.4.1/user-guide/tars-proxy/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 +-
zh/docs/2.4.2/user-guide/dubbo-proxy/index.html | 8 +-
zh/docs/2.4.2/user-guide/grpc-proxy/index.html | 8 +-
zh/docs/2.4.2/user-guide/http-proxy/index.html | 8 +-
zh/docs/2.4.2/user-guide/motan-proxy/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 +-
.../user-guide/register-center-access/index.html | 8 +-
.../user-guide/register-center-instance/index.html | 8 +-
zh/docs/2.4.2/user-guide/sofa-rpc-proxy/index.html | 8 +-
.../2.4.2/user-guide/spring-cloud-proxy/index.html | 8 +-
zh/docs/2.4.2/user-guide/tars-proxy/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 +-
zh/docs/2.4.3/user-guide/dubbo-proxy/index.html | 8 +-
zh/docs/2.4.3/user-guide/grpc-proxy/index.html | 8 +-
zh/docs/2.4.3/user-guide/http-proxy/index.html | 8 +-
zh/docs/2.4.3/user-guide/motan-proxy/index.html | 8 +-
.../admin-property-config/index.html | 8 +-
.../client-property-config/index.html | 8 +-
.../gateway-property-config/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/sofa-rpc-proxy/index.html | 8 +-
.../2.4.3/user-guide/spring-cloud-proxy/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.4.3/user-guide/websocket-proxy/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/developer/custom-filter/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/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/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/developer/custom-filter/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/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-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 +-
.../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 +-
.../admin-usage/data-permission/index.html | 10 +-
.../admin-usage/dictionary-management/index.html | 10 +-
.../plugin-handle-explanation/index.html | 10 +-
.../admin-usage/role-management/index.html | 10 +-
.../admin-usage/selector-and-rule/index.html | 10 +-
zh/docs/next/user-guide/dubbo-proxy/index.html | 12 +-
zh/docs/next/user-guide/grpc-proxy/index.html | 10 +-
zh/docs/next/user-guide/http-proxy/index.html | 10 +-
zh/docs/next/user-guide/motan-proxy/index.html | 10 +-
.../admin-property-config/index.html | 10 +-
.../client-property-config/index.html | 10 +-
.../gateway-property-config/index.html | 10 +-
.../register-center-access/index.html | 10 +-
.../register-center-instance/index.html | 10 +-
.../property-config/use-data-sync/index.html | 10 +-
.../sdk-usage/shenyu-sdk-consul/index.html | 27 ++
.../sdk-usage/shenyu-sdk-etcd/index.html | 27 ++
.../sdk-usage/shenyu-sdk-eureka/index.html | 25 ++
.../sdk-usage/shenyu-sdk-nacos/index.html | 26 ++
.../sdk-usage/shenyu-sdk-zookeeper/index.html | 27 ++
zh/docs/next/user-guide/sofa-rpc-proxy/index.html | 10 +-
.../next/user-guide/spring-cloud-proxy/index.html | 10 +-
zh/docs/next/user-guide/tars-proxy/index.html | 10 +-
zh/docs/next/user-guide/websocket-proxy/index.html | 10 +-
.../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-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 +-
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 +-
.../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 +-
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 +-
.../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 +-
zh/docs/user-guide/dubbo-proxy/index.html | 8 +-
zh/docs/user-guide/grpc-proxy/index.html | 8 +-
zh/docs/user-guide/http-proxy/index.html | 8 +-
zh/docs/user-guide/motan-proxy/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/sofa-rpc-proxy/index.html | 8 +-
zh/docs/user-guide/spring-cloud-proxy/index.html | 8 +-
zh/docs/user-guide/tars-proxy/index.html | 8 +-
zh/docs/user-guide/websocket-proxy/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/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/helloReact/index.html | 8 +-
zh/helm/index/index.html | 10 +-
zh/img/shenyu/sdk/shenyu-sdk_process.png | Bin 0 -> 88974 bytes
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 +-
zh/news/Apache-ShenYu-PPMC-2021-11-05/index.html | 8 +-
.../index.html | 8 +-
.../Apache-ShenYu-release-version-2.4.3/index.html | 8 +-
.../index.html | 8 +-
zh/news/index.html | 8 +-
zh/news/page/2/index.html | 8 +-
zh/news/tags/apache-shen-yu/index.html | 8 +-
zh/news/tags/index.html | 8 +-
zh/pdf/apache_shenyu_docs_en.pdf | Bin 5552711 -> 5552717 bytes
zh/pdf/apache_shenyu_docs_zh.pdf | Bin 4836364 -> 4836377 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/sitemap.xml | 2 +-
zh/team/index.html | 8 +-
zh/users/index.html | 8 +-
zh/versions/index.html | 8 +-
1754 files changed, 7072 insertions(+), 6755 deletions(-)
diff --git a/404.html b/404.html
index 8a746dbf728..1d97cca2be5 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/assets/js/052ca6ab.42377d52.js b/assets/js/052ca6ab.42377d52.js
new file mode 100644
index 00000000000..50d488da369
--- /dev/null
+++ b/assets/js/052ca6ab.42377d52.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[32191],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>h});var a=n(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/052ca6ab.c9a1e42c.js b/assets/js/052ca6ab.c9a1e42c.js
deleted file mode 100644
index 4d468979c4d..00000000000
--- a/assets/js/052ca6ab.c9a1e42c.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[32191],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>h});var a=n(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/08867c29.01acd0bf.js b/assets/js/08867c29.01acd0bf.js
new file mode 100644
index 00000000000..bcc58cab46a
--- /dev/null
+++ b/assets/js/08867c29.01acd0bf.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[58359],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>d});var r=n(67294);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/08867c29.2cad6d44.js b/assets/js/08867c29.2cad6d44.js
deleted file mode 100644
index 6dd2498c524..00000000000
--- a/assets/js/08867c29.2cad6d44.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[58359],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>d});var r=n(67294);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/0b6e15f8.381fd6d2.js b/assets/js/0b6e15f8.381fd6d2.js
deleted file mode 100644
index a4eaad9e25d..00000000000
--- a/assets/js/0b6e15f8.381fd6d2.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[48624],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var a=n(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/0b6e15f8.446360b5.js b/assets/js/0b6e15f8.446360b5.js
new file mode 100644
index 00000000000..2cdf24a71e6
--- /dev/null
+++ b/assets/js/0b6e15f8.446360b5.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[48624],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var a=n(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/0f6f7a4b.368fb6e7.js b/assets/js/0f6f7a4b.368fb6e7.js
deleted file mode 100644
index e03992ef4df..00000000000
--- a/assets/js/0f6f7a4b.368fb6e7.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[49841],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>d});var r=n(67294);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.5afae381.js b/assets/js/0f6f7a4b.5afae381.js
new file mode 100644
index 00000000000..2e0e597c95e
--- /dev/null
+++ b/assets/js/0f6f7a4b.5afae381.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[49841],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>d});var r=n(67294);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.75ed9d95.js b/assets/js/116e6d8f.75ed9d95.js
deleted file mode 100644
index 2302a775511..00000000000
--- a/assets/js/116e6d8f.75ed9d95.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[56534],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>d});var n=r(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/116e6d8f.a0cd0be3.js b/assets/js/116e6d8f.a0cd0be3.js
new file mode 100644
index 00000000000..c34b40668d1
--- /dev/null
+++ b/assets/js/116e6d8f.a0cd0be3.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[56534],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>d});var n=r(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/1659b332.b664ba4b.js b/assets/js/1659b332.b664ba4b.js
deleted file mode 100644
index 42549e12016..00000000000
--- a/assets/js/1659b332.b664ba4b.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[50200],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var r=n(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/1659b332.eb9ede4d.js b/assets/js/1659b332.eb9ede4d.js
new file mode 100644
index 00000000000..5758403b6fb
--- /dev/null
+++ b/assets/js/1659b332.eb9ede4d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[50200],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var r=n(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/1a04ab40.3a23292f.js b/assets/js/1a04ab40.3a23292f.js
new file mode 100644
index 00000000000..7bfffb1e34b
--- /dev/null
+++ b/assets/js/1a04ab40.3a23292f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[13313],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>h});var r=n(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/1a04ab40.fc7bb78e.js b/assets/js/1a04ab40.fc7bb78e.js
deleted file mode 100644
index a4cf7905937..00000000000
--- a/assets/js/1a04ab40.fc7bb78e.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[13313],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>h});var r=n(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/24348229.3b6d7d5f.js b/assets/js/24348229.3b6d7d5f.js
new file mode 100644
index 00000000000..a6cb83cf684
--- /dev/null
+++ b/assets/js/24348229.3b6d7d5f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[92752],{3905:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>d});var r=n(67294);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 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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/24348229.e3a9946c.js b/assets/js/24348229.e3a9946c.js
deleted file mode 100644
index 88ce6f435ad..00000000000
--- a/assets/js/24348229.e3a9946c.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[92752],{3905:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>d});var r=n(67294);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 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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/267487da.4eedf88d.js b/assets/js/267487da.4eedf88d.js
deleted file mode 100644
index dfe8034a0b0..00000000000
--- a/assets/js/267487da.4eedf88d.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[61647],{3905:(e,a,t)=>{t.d(a,{Zo:()=>p,kt:()=>h});var i=t(67294);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.d9ba767d.js b/assets/js/267487da.d9ba767d.js
new file mode 100644
index 00000000000..ad00e4f0e8f
--- /dev/null
+++ b/assets/js/267487da.d9ba767d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[61647],{3905:(e,a,t)=>{t.d(a,{Zo:()=>p,kt:()=>h});var i=t(67294);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/2ad358a6.484e727f.js b/assets/js/2ad358a6.484e727f.js
new file mode 100644
index 00000000000..a9e5f879f31
--- /dev/null
+++ b/assets/js/2ad358a6.484e727f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[44916],{3905:(e,n,t)=>{t.d(n,{Zo:()=>d,kt:()=>g});var a=t(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/2de77161.9b68c499.js b/assets/js/2de77161.9b68c499.js
deleted file mode 100644
index 381a2758b19..00000000000
--- a/assets/js/2de77161.9b68c499.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[91335],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>g});var a=n(67294);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 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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/2de77161.e7142414.js b/assets/js/2de77161.e7142414.js
new file mode 100644
index 00000000000..40d8b99c24e
--- /dev/null
+++ b/assets/js/2de77161.e7142414.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[91335],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>g});var a=n(67294);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 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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/2f9b393f.6afdd28d.js b/assets/js/2f9b393f.6afdd28d.js
new file mode 100644
index 00000000000..9e0193aca73
--- /dev/null
+++ b/assets/js/2f9b393f.6afdd28d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[82311],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>m});var a=n(67294);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 l(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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/2f9b393f.f9f863fe.js b/assets/js/2f9b393f.f9f863fe.js
deleted file mode 100644
index 741754cad33..00000000000
--- a/assets/js/2f9b393f.f9f863fe.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[82311],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>m});var a=n(67294);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 l(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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/380526c3.18900080.js b/assets/js/380526c3.18900080.js
deleted file mode 100644
index 4cd01e8454e..00000000000
--- a/assets/js/380526c3.18900080.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[85694],{3905:(e,n,t)=>{t.d(n,{Zo:()=>u,kt:()=>m});var r=t(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/380526c3.425376b3.js b/assets/js/380526c3.425376b3.js
new file mode 100644
index 00000000000..0e32d336764
--- /dev/null
+++ b/assets/js/380526c3.425376b3.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[85694],{3905:(e,n,t)=>{t.d(n,{Zo:()=>u,kt:()=>m});var r=t(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/3b810fa0.f376be40.js b/assets/js/3b810fa0.f376be40.js
new file mode 100644
index 00000000000..b800c9f1f8e
--- /dev/null
+++ b/assets/js/3b810fa0.f376be40.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[38895],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>h});var n=a(67294);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/3b810fa0.ff614e62.js b/assets/js/3b810fa0.ff614e62.js
deleted file mode 100644
index c2359a8d333..00000000000
--- a/assets/js/3b810fa0.ff614e62.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[38895],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>h});var n=a(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/3be0678d.85435386.js b/assets/js/3be0678d.85435386.js
new file mode 100644
index 00000000000..6b47ff36ad9
--- /dev/null
+++ b/assets/js/3be0678d.85435386.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[40538],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>g});var i=n(67294);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 a(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/3be0678d.9b2fcf34.js b/assets/js/3be0678d.9b2fcf34.js
deleted file mode 100644
index 191471681d0..00000000000
--- a/assets/js/3be0678d.9b2fcf34.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[40538],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>g});var i=n(67294);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 a(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/3c1d5675.8e6d602b.js b/assets/js/3c1d5675.8e6d602b.js
new file mode 100644
index 00000000000..c4a177ce091
--- /dev/null
+++ b/assets/js/3c1d5675.8e6d602b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[78593],{3905:(e,n,t)=>{t.d(n,{Zo:()=>h,kt:()=>d});var a=t(67294);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 s(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/3c1d5675.dce73bb5.js b/assets/js/3c1d5675.dce73bb5.js
deleted file mode 100644
index da8bdb91cba..00000000000
--- a/assets/js/3c1d5675.dce73bb5.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[78593],{3905:(e,n,t)=>{t.d(n,{Zo:()=>h,kt:()=>d});var a=t(67294);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 s(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/3c32e005.37d657bc.js b/assets/js/3c32e005.37d657bc.js
deleted file mode 100644
index 715c67ec493..00000000000
--- a/assets/js/3c32e005.37d657bc.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[17140],{3905:(e,t,a)=>{a.d(t,{Zo:()=>s,kt:()=>g});var n=a(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/3c32e005.b9609bf9.js b/assets/js/3c32e005.b9609bf9.js
new file mode 100644
index 00000000000..aeed0466925
--- /dev/null
+++ b/assets/js/3c32e005.b9609bf9.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[17140],{3905:(e,t,a)=>{a.d(t,{Zo:()=>s,kt:()=>g});var n=a(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/3e51ef3b.cdde5413.js b/assets/js/3e51ef3b.cdde5413.js
new file mode 100644
index 00000000000..a8c5c893b11
--- /dev/null
+++ b/assets/js/3e51ef3b.cdde5413.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[94665],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var r=n(67294);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/3e51ef3b.cfdb9202.js b/assets/js/3e51ef3b.cfdb9202.js
deleted file mode 100644
index 61334818afd..00000000000
--- a/assets/js/3e51ef3b.cfdb9202.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[94665],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>y});var r=n(67294);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/3ec2dd5b.12716895.js b/assets/js/3ec2dd5b.12716895.js
deleted file mode 100644
index be3c59cd903..00000000000
--- a/assets/js/3ec2dd5b.12716895.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[28865],{3905:(e,t,l)=>{l.d(t,{Zo:()=>p,kt:()=>h});var r=l(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/3ec2dd5b.40029169.js b/assets/js/3ec2dd5b.40029169.js
new file mode 100644
index 00000000000..29259de6b1f
--- /dev/null
+++ b/assets/js/3ec2dd5b.40029169.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[28865],{3905:(e,t,l)=>{l.d(t,{Zo:()=>p,kt:()=>h});var r=l(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/405a2402.eec28b62.js b/assets/js/405a2402.eec28b62.js
new file mode 100644
index 00000000000..73e0a912212
--- /dev/null
+++ b/assets/js/405a2402.eec28b62.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[34588],{3905:(e,n,t)=>{t.d(n,{Zo:()=>d,kt:()=>g});var r=t(67294);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 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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/43105b19.287c7256.js b/assets/js/43105b19.287c7256.js
deleted file mode 100644
index 52de9722c02..00000000000
--- a/assets/js/43105b19.287c7256.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[35194],{3905:(e,n,t)=>{t.d(n,{Zo:()=>h,kt:()=>m});var a=t(67294);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 s(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/43105b19.9e878b02.js b/assets/js/43105b19.9e878b02.js
new file mode 100644
index 00000000000..378c4ca37ce
--- /dev/null
+++ b/assets/js/43105b19.9e878b02.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[35194],{3905:(e,n,t)=>{t.d(n,{Zo:()=>h,kt:()=>m});var a=t(67294);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 s(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/44e9e6f4.6dc8993e.js b/assets/js/44e9e6f4.6dc8993e.js
deleted file mode 100644
index 0756165601e..00000000000
--- a/assets/js/44e9e6f4.6dc8993e.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[91549],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>d});var o=n(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/44e9e6f4.83e5dbb2.js b/assets/js/44e9e6f4.83e5dbb2.js
new file mode 100644
index 00000000000..87543d4da31
--- /dev/null
+++ b/assets/js/44e9e6f4.83e5dbb2.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[91549],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>d});var o=n(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/4521f334.68c5dbe5.js b/assets/js/4521f334.68c5dbe5.js
deleted file mode 100644
index 9e30935d74b..00000000000
--- a/assets/js/4521f334.68c5dbe5.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[87474],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var r=n(67294);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.e585317b.js b/assets/js/4521f334.e585317b.js
new file mode 100644
index 00000000000..33fa91a3645
--- /dev/null
+++ b/assets/js/4521f334.e585317b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[87474],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var r=n(67294);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.22564f3a.js b/assets/js/4fb2eb56.22564f3a.js
deleted file mode 100644
index 33d5df0ae67..00000000000
--- a/assets/js/4fb2eb56.22564f3a.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[32147],{3905:(e,n,t)=>{t.d(n,{Zo:()=>d,kt:()=>m});var a=t(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/4fb2eb56.a039294a.js b/assets/js/4fb2eb56.a039294a.js
new file mode 100644
index 00000000000..34f08ac2e27
--- /dev/null
+++ b/assets/js/4fb2eb56.a039294a.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[32147],{3905:(e,n,t)=>{t.d(n,{Zo:()=>d,kt:()=>m});var a=t(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/5410ef7f.a2908810.js b/assets/js/5410ef7f.a2908810.js
deleted file mode 100644
index 83120624744..00000000000
--- a/assets/js/5410ef7f.a2908810.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[29094],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>y});var r=n(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/5410ef7f.c87b6eb4.js b/assets/js/5410ef7f.c87b6eb4.js
new file mode 100644
index 00000000000..3149d67da17
--- /dev/null
+++ b/assets/js/5410ef7f.c87b6eb4.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[29094],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>y});var r=n(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/54cfa241.0fcfd32c.js b/assets/js/54cfa241.0fcfd32c.js
new file mode 100644
index 00000000000..311642937ab
--- /dev/null
+++ b/assets/js/54cfa241.0fcfd32c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[77305],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>u});var a=n(67294);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 a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/54cfa241.4f3153b8.js b/assets/js/54cfa241.4f3153b8.js
deleted file mode 100644
index 7bb3e240d8c..00000000000
--- a/assets/js/54cfa241.4f3153b8.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[77305],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>u});var a=n(67294);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 a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/55672386.0215ac08.js b/assets/js/55672386.0215ac08.js
deleted file mode 100644
index cad851f3380..00000000000
--- a/assets/js/55672386.0215ac08.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[97359],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var r=n(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/55672386.58a090de.js b/assets/js/55672386.58a090de.js
new file mode 100644
index 00000000000..a25b02ac843
--- /dev/null
+++ b/assets/js/55672386.58a090de.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[97359],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var r=n(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/55b3f2e2.36133956.js b/assets/js/55b3f2e2.36133956.js
new file mode 100644
index 00000000000..df0b7c48f9c
--- /dev/null
+++ b/assets/js/55b3f2e2.36133956.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[81013],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var r=n(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/55b3f2e2.4b60e1b1.js b/assets/js/55b3f2e2.4b60e1b1.js
deleted file mode 100644
index 9330cf2efb5..00000000000
--- a/assets/js/55b3f2e2.4b60e1b1.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[81013],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var r=n(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/55f15e0e.b7ee2b92.js b/assets/js/55f15e0e.b7ee2b92.js
new file mode 100644
index 00000000000..90b01b1f73d
--- /dev/null
+++ b/assets/js/55f15e0e.b7ee2b92.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[62691],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>k});var r=n(67294);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/55f15e0e.d9bfb3e0.js b/assets/js/55f15e0e.d9bfb3e0.js
deleted file mode 100644
index f23a29aa4d7..00000000000
--- a/assets/js/55f15e0e.d9bfb3e0.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[62691],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>k});var r=n(67294);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/5727a7c9.2526108d.js b/assets/js/5727a7c9.2526108d.js
new file mode 100644
index 00000000000..5942c78cb82
--- /dev/null
+++ b/assets/js/5727a7c9.2526108d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[20014],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>y});var r=n(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/5727a7c9.e99ab87a.js b/assets/js/5727a7c9.e99ab87a.js
deleted file mode 100644
index 2d24358441d..00000000000
--- a/assets/js/5727a7c9.e99ab87a.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[20014],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>y});var r=n(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/58ee83e2.329714d7.js b/assets/js/58ee83e2.329714d7.js
new file mode 100644
index 00000000000..579ebf388f8
--- /dev/null
+++ b/assets/js/58ee83e2.329714d7.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[23009],{3905:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>g});var a=t(67294);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/58ee83e2.aad71810.js b/assets/js/58ee83e2.aad71810.js
deleted file mode 100644
index 4e67654de3e..00000000000
--- a/assets/js/58ee83e2.aad71810.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[23009],{3905:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>g});var a=t(67294);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/59735065.411910d1.js b/assets/js/59735065.411910d1.js
new file mode 100644
index 00000000000..db2fb4bdd6d
--- /dev/null
+++ b/assets/js/59735065.411910d1.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[80126],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>g});var a=n(67294);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 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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/59735065.fe797f4a.js b/assets/js/59735065.fe797f4a.js
deleted file mode 100644
index bf7a03dc9cf..00000000000
--- a/assets/js/59735065.fe797f4a.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[80126],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>g});var a=n(67294);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 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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/5ff6eb0a.05d93a65.js b/assets/js/5ff6eb0a.05d93a65.js
new file mode 100644
index 00000000000..b75f9f366f3
--- /dev/null
+++ b/assets/js/5ff6eb0a.05d93a65.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[38096],{3905:(e,n,t)=>{t.d(n,{Zo:()=>u,kt:()=>m});var a=t(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/5ff6eb0a.c697d1ba.js b/assets/js/5ff6eb0a.c697d1ba.js
deleted file mode 100644
index b5f97ecf59a..00000000000
--- a/assets/js/5ff6eb0a.c697d1ba.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[38096],{3905:(e,n,t)=>{t.d(n,{Zo:()=>u,kt:()=>m});var a=t(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/60d30544.b2b55962.js b/assets/js/60d30544.b2b55962.js
new file mode 100644
index 00000000000..03c1d5e1a82
--- /dev/null
+++ b/assets/js/60d30544.b2b55962.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[51291],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>f});var r=n(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/60d30544.e4a2979c.js b/assets/js/60d30544.e4a2979c.js
deleted file mode 100644
index 8d0eb32a20d..00000000000
--- a/assets/js/60d30544.e4a2979c.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[51291],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>f});var r=n(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/616119c6.9229b21b.js b/assets/js/616119c6.9229b21b.js
deleted file mode 100644
index 6a3e8f3eced..00000000000
--- a/assets/js/616119c6.9229b21b.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[29470],{3905:(e,n,t)=>{t.d(n,{Zo:()=>h,kt:()=>m});var a=t(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/616119c6.eecb9e29.js b/assets/js/616119c6.eecb9e29.js
new file mode 100644
index 00000000000..060a94afe11
--- /dev/null
+++ b/assets/js/616119c6.eecb9e29.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[29470],{3905:(e,n,t)=>{t.d(n,{Zo:()=>h,kt:()=>m});var a=t(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/72f98f92.19d6814b.js b/assets/js/72f98f92.19d6814b.js
new file mode 100644
index 00000000000..6254f4e6d7c
--- /dev/null
+++ b/assets/js/72f98f92.19d6814b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[45628],{3905:(e,n,t)=>{t.d(n,{Zo:()=>d,kt:()=>m});var a=t(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/7e9bc4f1.afc7030f.js b/assets/js/7e9bc4f1.afc7030f.js
deleted file mode 100644
index 80dfeb7bc2e..00000000000
--- a/assets/js/7e9bc4f1.afc7030f.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[9390],{3905:(e,t,n)=>{n.d(t,{Zo:()=>h,kt:()=>d});var a=n(67294);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)}retur [...]
\ No newline at end of file
diff --git a/assets/js/7e9bc4f1.d8ed7322.js b/assets/js/7e9bc4f1.d8ed7322.js
new file mode 100644
index 00000000000..6d2b968d258
--- /dev/null
+++ b/assets/js/7e9bc4f1.d8ed7322.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[9390],{3905:(e,t,n)=>{n.d(t,{Zo:()=>h,kt:()=>d});var a=n(67294);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)}retur [...]
\ No newline at end of file
diff --git a/assets/js/817af225.3cb1f68f.js b/assets/js/817af225.3cb1f68f.js
new file mode 100644
index 00000000000..794603e8efc
--- /dev/null
+++ b/assets/js/817af225.3cb1f68f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[82362],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var a=n(67294);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 a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/817af225.b3521dda.js b/assets/js/817af225.b3521dda.js
deleted file mode 100644
index 0dc4505327a..00000000000
--- a/assets/js/817af225.b3521dda.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[82362],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var a=n(67294);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 a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/82b01cda.315b984b.js b/assets/js/82b01cda.315b984b.js
deleted file mode 100644
index 26212b0c01a..00000000000
--- a/assets/js/82b01cda.315b984b.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[1573],{3905:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>g});var a=t(67294);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)}retur [...]
\ No newline at end of file
diff --git a/assets/js/82b01cda.82181d0a.js b/assets/js/82b01cda.82181d0a.js
new file mode 100644
index 00000000000..3c1238ef45b
--- /dev/null
+++ b/assets/js/82b01cda.82181d0a.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[1573],{3905:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>g});var a=t(67294);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)}retur [...]
\ No newline at end of file
diff --git a/assets/js/831027cc.730b09f5.js b/assets/js/831027cc.730b09f5.js
deleted file mode 100644
index 51498c24f00..00000000000
--- a/assets/js/831027cc.730b09f5.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[55327],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var a=n(67294);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 a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/831027cc.d2c40271.js b/assets/js/831027cc.d2c40271.js
new file mode 100644
index 00000000000..01228129263
--- /dev/null
+++ b/assets/js/831027cc.d2c40271.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[55327],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var a=n(67294);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 a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/8452233b.95dffad7.js b/assets/js/8452233b.95dffad7.js
deleted file mode 100644
index ff71685de3c..00000000000
--- a/assets/js/8452233b.95dffad7.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[25700],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var a=n(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/8452233b.d8558920.js b/assets/js/8452233b.d8558920.js
new file mode 100644
index 00000000000..115f1b7f740
--- /dev/null
+++ b/assets/js/8452233b.d8558920.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[25700],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var a=n(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/84fc8ece.13bf01c7.js b/assets/js/84fc8ece.13bf01c7.js
new file mode 100644
index 00000000000..29e978adbb3
--- /dev/null
+++ b/assets/js/84fc8ece.13bf01c7.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[55704],{3905:(e,t,n)=>{n.d(t,{Zo:()=>h,kt:()=>g});var a=n(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/84fc8ece.6b7fc9ea.js b/assets/js/84fc8ece.6b7fc9ea.js
deleted file mode 100644
index e152a5fdd86..00000000000
--- a/assets/js/84fc8ece.6b7fc9ea.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[55704],{3905:(e,t,n)=>{n.d(t,{Zo:()=>h,kt:()=>g});var a=n(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/87137adb.63e7f169.js b/assets/js/87137adb.63e7f169.js
new file mode 100644
index 00000000000..89c3091968d
--- /dev/null
+++ b/assets/js/87137adb.63e7f169.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[85885],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>h});var a=n(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/87137adb.b5d7c9ed.js b/assets/js/87137adb.b5d7c9ed.js
deleted file mode 100644
index a7adeedf694..00000000000
--- a/assets/js/87137adb.b5d7c9ed.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[85885],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>h});var a=n(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/8877b104.639f58ab.js b/assets/js/8877b104.639f58ab.js
deleted file mode 100644
index de30258a6d8..00000000000
--- a/assets/js/8877b104.639f58ab.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[10502],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>u});var a=n(67294);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 a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/8877b104.96778c28.js b/assets/js/8877b104.96778c28.js
new file mode 100644
index 00000000000..e74155d3ae7
--- /dev/null
+++ b/assets/js/8877b104.96778c28.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[10502],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>u});var a=n(67294);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 a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/8afb6277.37271d31.js b/assets/js/8afb6277.37271d31.js
deleted file mode 100644
index 8665005d7ff..00000000000
--- a/assets/js/8afb6277.37271d31.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[43052],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>y});var r=n(67294);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/8afb6277.72cf3628.js b/assets/js/8afb6277.72cf3628.js
new file mode 100644
index 00000000000..5953423444f
--- /dev/null
+++ b/assets/js/8afb6277.72cf3628.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[43052],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>g});var r=n(67294);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/8ebe6518.99468172.js b/assets/js/8ebe6518.99468172.js
new file mode 100644
index 00000000000..7de3e7fd8c9
--- /dev/null
+++ b/assets/js/8ebe6518.99468172.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[1547],{3905:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>m});var a=t(67294);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)}retur [...]
\ No newline at end of file
diff --git a/assets/js/8fcb083f.a7184e62.js b/assets/js/8fcb083f.a7184e62.js
new file mode 100644
index 00000000000..4d298bbcf8a
--- /dev/null
+++ b/assets/js/8fcb083f.a7184e62.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[33051],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>m});var a=n(67294);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 l(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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/8fcb083f.ee327c4d.js b/assets/js/8fcb083f.ee327c4d.js
deleted file mode 100644
index a2ca4c47401..00000000000
--- a/assets/js/8fcb083f.ee327c4d.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[33051],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>m});var a=n(67294);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 l(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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/935f2afb.49b6bb49.js b/assets/js/935f2afb.49b6bb49.js
new file mode 100644
index 00000000000..5663ac526c6
--- /dev/null
+++ b/assets/js/935f2afb.49b6bb49.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[80053],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":"unreleased","isLast":false,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"Overview","href":"/docs/next/index"},{"type":"category","label":"Design","items":[{"type":"link","label":"Admin Database Design","href":"/docs/next/design/database-design"},{"type":"link","label":"Data Sync Des [...]
\ No newline at end of file
diff --git a/assets/js/935f2afb.c7cd1912.js b/assets/js/935f2afb.c7cd1912.js
deleted file mode 100644
index d091bbc6820..00000000000
--- a/assets/js/935f2afb.c7cd1912.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[80053],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":"unreleased","isLast":false,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"Overview","href":"/docs/next/index"},{"type":"category","label":"Design","items":[{"type":"link","label":"Admin Database Design","href":"/docs/next/design/database-design"},{"type":"link","label":"Data Sync Des [...]
\ No newline at end of file
diff --git a/assets/js/947a0520.07fd0bc2.js b/assets/js/947a0520.07fd0bc2.js
new file mode 100644
index 00000000000..65cfeb73449
--- /dev/null
+++ b/assets/js/947a0520.07fd0bc2.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[43139],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>h});var n=a(67294);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.8c22a203.js b/assets/js/947a0520.8c22a203.js
deleted file mode 100644
index 6f1ddd61ebc..00000000000
--- a/assets/js/947a0520.8c22a203.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[43139],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>h});var n=a(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/94c195cb.ac3afca3.js b/assets/js/94c195cb.ac3afca3.js
deleted file mode 100644
index 216f6f3c8d2..00000000000
--- a/assets/js/94c195cb.ac3afca3.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[7745],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var r=n(67294);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)}retur [...]
\ No newline at end of file
diff --git a/assets/js/94c195cb.f9811cbf.js b/assets/js/94c195cb.f9811cbf.js
new file mode 100644
index 00000000000..c0e4897907c
--- /dev/null
+++ b/assets/js/94c195cb.f9811cbf.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[7745],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var r=n(67294);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)}retur [...]
\ No newline at end of file
diff --git a/assets/js/95e485e3.4e88a42d.js b/assets/js/95e485e3.4e88a42d.js
deleted file mode 100644
index d459833ea69..00000000000
--- a/assets/js/95e485e3.4e88a42d.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[6155],{3905:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>m});var r=t(67294);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 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)}retur [...]
\ No newline at end of file
diff --git a/assets/js/95e485e3.c62178e8.js b/assets/js/95e485e3.c62178e8.js
new file mode 100644
index 00000000000..1c1ddaac923
--- /dev/null
+++ b/assets/js/95e485e3.c62178e8.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[6155],{3905:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>m});var r=t(67294);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 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)}retur [...]
\ No newline at end of file
diff --git a/assets/js/97f557ce.38d0cb53.js b/assets/js/97f557ce.38d0cb53.js
deleted file mode 100644
index d85429da322..00000000000
--- a/assets/js/97f557ce.38d0cb53.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[15450],{3905:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>g});var a=t(67294);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/97f557ce.4762e251.js b/assets/js/97f557ce.4762e251.js
new file mode 100644
index 00000000000..4e28e69c71c
--- /dev/null
+++ b/assets/js/97f557ce.4762e251.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[15450],{3905:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>g});var a=t(67294);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/9bd813a2.916e141e.js b/assets/js/9bd813a2.916e141e.js
new file mode 100644
index 00000000000..b69082d36c1
--- /dev/null
+++ b/assets/js/9bd813a2.916e141e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[55075],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>h});var i=n(67294);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.bc8d40fd.js b/assets/js/9bd813a2.bc8d40fd.js
deleted file mode 100644
index ebea2c87ce9..00000000000
--- a/assets/js/9bd813a2.bc8d40fd.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[55075],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>h});var i=n(67294);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.599503b7.js b/assets/js/9e8596f8.599503b7.js
deleted file mode 100644
index d3b6865eb28..00000000000
--- a/assets/js/9e8596f8.599503b7.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[73502],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>h});var a=n(67294);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 a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/9e8596f8.b2ef2c08.js b/assets/js/9e8596f8.b2ef2c08.js
new file mode 100644
index 00000000000..8c3db21f8b6
--- /dev/null
+++ b/assets/js/9e8596f8.b2ef2c08.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[73502],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>h});var a=n(67294);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 a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/a0096cbe.2dfe89ef.js b/assets/js/a0096cbe.2dfe89ef.js
new file mode 100644
index 00000000000..b1a4a918b14
--- /dev/null
+++ b/assets/js/a0096cbe.2dfe89ef.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[1601],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>d});var a=n(67294);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)}retur [...]
\ No newline at end of file
diff --git a/assets/js/a0096cbe.dcc50107.js b/assets/js/a0096cbe.dcc50107.js
deleted file mode 100644
index cf595e58f81..00000000000
--- a/assets/js/a0096cbe.dcc50107.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[1601],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>d});var a=n(67294);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)}retur [...]
\ No newline at end of file
diff --git a/assets/js/a3552f5a.c8414a39.js b/assets/js/a3552f5a.c8414a39.js
new file mode 100644
index 00000000000..8ae444edc6f
--- /dev/null
+++ b/assets/js/a3552f5a.c8414a39.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[92687],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>f});var n=r(67294);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 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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/a3552f5a.ca18dc3b.js b/assets/js/a3552f5a.ca18dc3b.js
deleted file mode 100644
index 4f26045c4fe..00000000000
--- a/assets/js/a3552f5a.ca18dc3b.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[92687],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>f});var n=r(67294);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 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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/a7023ddc.9c904ae7.js b/assets/js/a7023ddc.9c904ae7.js
deleted file mode 100644
index e96851004e4..00000000000
--- a/assets/js/a7023ddc.9c904ae7.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[11713],{53457:a=>{a.exports=JSON.parse('{"etcd":{"allTagsPath":"/blog/tags","slug":"etcd","name":"etcd","count":1,"permalink":"/blog/tags/etcd"},"data-sync":{"allTagsPath":"/blog/tags","slug":"data-sync","name":"data sync","count":5,"permalink":"/blog/tags/data-sync"},"apache-shen-yu":{"allTagsPath":"/blog/tags","slug":"apache-shen-yu","name":"apache shenyu","count":17,"permalink":"/blog/tags/apache [...]
\ No newline at end of file
diff --git a/assets/js/a7023ddc.d76c13ad.js b/assets/js/a7023ddc.d76c13ad.js
new file mode 100644
index 00000000000..02174feab00
--- /dev/null
+++ b/assets/js/a7023ddc.d76c13ad.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[11713],{53457: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":17,"permalink":"/blog/tags/apache-shen-yu"},"rate-limiter":{"allTagsPath":"/blog/tags","slug":"rate-limiter","name":"rate limiter","count":1,"permalink":"/blog/t [...]
\ No newline at end of file
diff --git a/assets/js/aa12c159.3bf976d8.js b/assets/js/aa12c159.3bf976d8.js
deleted file mode 100644
index f67a0443578..00000000000
--- a/assets/js/aa12c159.3bf976d8.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[12929],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var a=n(67294);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 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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/aa12c159.85494034.js b/assets/js/aa12c159.85494034.js
new file mode 100644
index 00000000000..a21a84a4e90
--- /dev/null
+++ b/assets/js/aa12c159.85494034.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[12929],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var a=n(67294);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 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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/b157d6b8.32186e09.js b/assets/js/b157d6b8.32186e09.js
deleted file mode 100644
index 4b41b43ce25..00000000000
--- a/assets/js/b157d6b8.32186e09.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[32e3],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>d});var n=r(67294);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)}retur [...]
\ No newline at end of file
diff --git a/assets/js/b157d6b8.91752ead.js b/assets/js/b157d6b8.91752ead.js
new file mode 100644
index 00000000000..9e201c12701
--- /dev/null
+++ b/assets/js/b157d6b8.91752ead.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[32e3],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>d});var n=r(67294);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)}retur [...]
\ No newline at end of file
diff --git a/assets/js/b5d8c0a0.0131e00c.js b/assets/js/b5d8c0a0.0131e00c.js
new file mode 100644
index 00000000000..7991294624d
--- /dev/null
+++ b/assets/js/b5d8c0a0.0131e00c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[51591],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var r=n(67294);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/b5d8c0a0.ef727ef4.js b/assets/js/b5d8c0a0.ef727ef4.js
deleted file mode 100644
index 4b5f77fcaec..00000000000
--- a/assets/js/b5d8c0a0.ef727ef4.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[51591],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var r=n(67294);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/b82d0e2d.235bb937.js b/assets/js/b82d0e2d.235bb937.js
new file mode 100644
index 00000000000..e202dd25855
--- /dev/null
+++ b/assets/js/b82d0e2d.235bb937.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[73756],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var r=n(67294);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/b82d0e2d.98a458f4.js b/assets/js/b82d0e2d.98a458f4.js
deleted file mode 100644
index 85bf3ba6781..00000000000
--- a/assets/js/b82d0e2d.98a458f4.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[73756],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var r=n(67294);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/ba4a7a1c.4803409a.js b/assets/js/ba4a7a1c.4803409a.js
deleted file mode 100644
index 43aba87e8ca..00000000000
--- a/assets/js/ba4a7a1c.4803409a.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[67356],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>h});var a=n(67294);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 a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/ba4a7a1c.97ff184d.js b/assets/js/ba4a7a1c.97ff184d.js
new file mode 100644
index 00000000000..87e64595bcf
--- /dev/null
+++ b/assets/js/ba4a7a1c.97ff184d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[67356],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>h});var a=n(67294);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 a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/bb2b5f22.0cf6d8bf.js b/assets/js/bb2b5f22.0cf6d8bf.js
new file mode 100644
index 00000000000..2c2662c748c
--- /dev/null
+++ b/assets/js/bb2b5f22.0cf6d8bf.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[71876],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>u});var n=a(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/bb2b5f22.2f6be834.js b/assets/js/bb2b5f22.2f6be834.js
deleted file mode 100644
index bf104682f7a..00000000000
--- a/assets/js/bb2b5f22.2f6be834.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[71876],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>u});var n=a(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/bb7fdef6.1bfa36fc.js b/assets/js/bb7fdef6.1bfa36fc.js
deleted file mode 100644
index ada80aa3d73..00000000000
--- a/assets/js/bb7fdef6.1bfa36fc.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[61853],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>y});var n=r(67294);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.6d21b226.js b/assets/js/bb7fdef6.6d21b226.js
new file mode 100644
index 00000000000..ca26ce32f2e
--- /dev/null
+++ b/assets/js/bb7fdef6.6d21b226.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[61853],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>y});var n=r(67294);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.0359940d.js b/assets/js/bce5470e.0359940d.js
deleted file mode 100644
index 8d1b9c6b970..00000000000
--- a/assets/js/bce5470e.0359940d.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[22065],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>g});var i=n(67294);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 a(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/bce5470e.c7b2ce16.js b/assets/js/bce5470e.c7b2ce16.js
new file mode 100644
index 00000000000..dcc6deeb00a
--- /dev/null
+++ b/assets/js/bce5470e.c7b2ce16.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[22065],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>g});var i=n(67294);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 a(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/bd113394.9590a249.js b/assets/js/bd113394.9590a249.js
deleted file mode 100644
index 9de263629f6..00000000000
--- a/assets/js/bd113394.9590a249.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[88243],{3905:(t,e,a)=>{a.d(e,{Zo:()=>m,kt:()=>g});var n=a(67294);function r(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function l(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/bd113394.c17abe7b.js b/assets/js/bd113394.c17abe7b.js
new file mode 100644
index 00000000000..5b29e1a5d42
--- /dev/null
+++ b/assets/js/bd113394.c17abe7b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[88243],{3905:(t,e,a)=>{a.d(e,{Zo:()=>m,kt:()=>g});var n=a(67294);function r(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function l(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/bef79935.3da15e9f.js b/assets/js/bef79935.3da15e9f.js
deleted file mode 100644
index a5d59db84f7..00000000000
--- a/assets/js/bef79935.3da15e9f.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[25341],{3905:(e,n,t)=>{t.d(n,{Zo:()=>u,kt:()=>h});var a=t(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/bef79935.5d61f11e.js b/assets/js/bef79935.5d61f11e.js
new file mode 100644
index 00000000000..ddcf1ed5b3a
--- /dev/null
+++ b/assets/js/bef79935.5d61f11e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[25341],{3905:(e,n,t)=>{t.d(n,{Zo:()=>u,kt:()=>y});var a=t(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/c16da20a.2d5bbeba.js b/assets/js/c16da20a.2d5bbeba.js
new file mode 100644
index 00000000000..e9fa0bc6840
--- /dev/null
+++ b/assets/js/c16da20a.2d5bbeba.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[90974],{3905:(e,n,t)=>{t.d(n,{Zo:()=>d,kt:()=>g});var a=t(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/c4cf7888.09fe5fed.js b/assets/js/c4cf7888.09fe5fed.js
deleted file mode 100644
index e9a93fe746f..00000000000
--- a/assets/js/c4cf7888.09fe5fed.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[45304],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>d});var n=a(67294);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/c4cf7888.66f2ba6b.js b/assets/js/c4cf7888.66f2ba6b.js
new file mode 100644
index 00000000000..cbbcf8719d8
--- /dev/null
+++ b/assets/js/c4cf7888.66f2ba6b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[45304],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>d});var n=a(67294);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/c59f34d8.0134ffdc.js b/assets/js/c59f34d8.0134ffdc.js
new file mode 100644
index 00000000000..8cf771a6188
--- /dev/null
+++ b/assets/js/c59f34d8.0134ffdc.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[51879],{3905:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>g});var a=t(67294);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/c59f34d8.9bc2a76a.js b/assets/js/c59f34d8.9bc2a76a.js
deleted file mode 100644
index 5f20f238718..00000000000
--- a/assets/js/c59f34d8.9bc2a76a.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[51879],{3905:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>g});var a=t(67294);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/c5b72fd0.5d75fbb3.js b/assets/js/c5b72fd0.5d75fbb3.js
deleted file mode 100644
index e7a9617c2d3..00000000000
--- a/assets/js/c5b72fd0.5d75fbb3.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[61640],{3905:(e,n,t)=>{t.d(n,{Zo:()=>u,kt:()=>m});var r=t(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/c5b72fd0.970e5f20.js b/assets/js/c5b72fd0.970e5f20.js
new file mode 100644
index 00000000000..99f1ff5cdaf
--- /dev/null
+++ b/assets/js/c5b72fd0.970e5f20.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[61640],{3905:(e,n,t)=>{t.d(n,{Zo:()=>u,kt:()=>m});var r=t(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/c67c2a3d.87c2c914.js b/assets/js/c67c2a3d.87c2c914.js
deleted file mode 100644
index 34623ad52bb..00000000000
--- a/assets/js/c67c2a3d.87c2c914.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[87800],{3905:(e,n,t)=>{t.d(n,{Zo:()=>u,kt:()=>w});var r=t(67294);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 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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/c67c2a3d.c66673ce.js b/assets/js/c67c2a3d.c66673ce.js
new file mode 100644
index 00000000000..28235c33af9
--- /dev/null
+++ b/assets/js/c67c2a3d.c66673ce.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[87800],{3905:(e,n,t)=>{t.d(n,{Zo:()=>u,kt:()=>w});var r=t(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/cd0e252c.4499a2fd.js b/assets/js/cd0e252c.4499a2fd.js
new file mode 100644
index 00000000000..ea9f282a721
--- /dev/null
+++ b/assets/js/cd0e252c.4499a2fd.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[67010],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>h});var r=n(67294);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/cd0e252c.9e5f66c1.js b/assets/js/cd0e252c.9e5f66c1.js
deleted file mode 100644
index cb251bdbb0e..00000000000
--- a/assets/js/cd0e252c.9e5f66c1.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[67010],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>h});var r=n(67294);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/cdce4d88.885d4772.js b/assets/js/cdce4d88.885d4772.js
new file mode 100644
index 00000000000..cc620ace031
--- /dev/null
+++ b/assets/js/cdce4d88.885d4772.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[42733],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>f});var r=n(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/cdce4d88.a0ba2625.js b/assets/js/cdce4d88.a0ba2625.js
deleted file mode 100644
index 72c36d86b5e..00000000000
--- a/assets/js/cdce4d88.a0ba2625.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[42733],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>f});var r=n(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/ce6a09fc.7945845a.js b/assets/js/ce6a09fc.7945845a.js
deleted file mode 100644
index 40dfd186fd1..00000000000
--- a/assets/js/ce6a09fc.7945845a.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[80369],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var r=n(67294);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/ce6a09fc.e2d2a58a.js b/assets/js/ce6a09fc.e2d2a58a.js
new file mode 100644
index 00000000000..fe3bcd5e134
--- /dev/null
+++ b/assets/js/ce6a09fc.e2d2a58a.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[80369],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var r=n(67294);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/cee33d69.3398b002.js b/assets/js/cee33d69.3398b002.js
deleted file mode 100644
index 8a1bfcdd5eb..00000000000
--- a/assets/js/cee33d69.3398b002.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[57551],{3905:(e,t,a)=>{a.d(t,{Zo:()=>s,kt:()=>g});var n=a(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/cee33d69.691fe1ef.js b/assets/js/cee33d69.691fe1ef.js
new file mode 100644
index 00000000000..a5bc19c6cab
--- /dev/null
+++ b/assets/js/cee33d69.691fe1ef.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[57551],{3905:(e,t,a)=>{a.d(t,{Zo:()=>s,kt:()=>g});var n=a(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/d124637b.076dda9d.js b/assets/js/d124637b.076dda9d.js
deleted file mode 100644
index 95a5b1ec9c4..00000000000
--- a/assets/js/d124637b.076dda9d.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[7816],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>u});var n=a(67294);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)}retur [...]
\ No newline at end of file
diff --git a/assets/js/d124637b.d52addeb.js b/assets/js/d124637b.d52addeb.js
new file mode 100644
index 00000000000..3ad13e7885d
--- /dev/null
+++ b/assets/js/d124637b.d52addeb.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[7816],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>u});var n=a(67294);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)}retur [...]
\ No newline at end of file
diff --git a/assets/js/d34575f9.4b3b3892.js b/assets/js/d34575f9.4b3b3892.js
new file mode 100644
index 00000000000..62288ce0700
--- /dev/null
+++ b/assets/js/d34575f9.4b3b3892.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[1520],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>f});var n=r(67294);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)}retur [...]
\ No newline at end of file
diff --git a/assets/js/d34575f9.a9d17b5c.js b/assets/js/d34575f9.a9d17b5c.js
deleted file mode 100644
index 753a80f34ad..00000000000
--- a/assets/js/d34575f9.a9d17b5c.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[1520],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>f});var n=r(67294);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)}retur [...]
\ No newline at end of file
diff --git a/assets/js/d4ae858d.02a715d0.js b/assets/js/d4ae858d.02a715d0.js
deleted file mode 100644
index 4dc4bcce448..00000000000
--- a/assets/js/d4ae858d.02a715d0.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[51231],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var r=n(67294);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/d4ae858d.c7bbbeec.js b/assets/js/d4ae858d.c7bbbeec.js
new file mode 100644
index 00000000000..3b3cba27748
--- /dev/null
+++ b/assets/js/d4ae858d.c7bbbeec.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[51231],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var r=n(67294);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/d9d26c48.6ff56053.js b/assets/js/d9d26c48.6ff56053.js
deleted file mode 100644
index f31c1e2222c..00000000000
--- a/assets/js/d9d26c48.6ff56053.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[59681],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var r=n(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/d9d26c48.acd685ce.js b/assets/js/d9d26c48.acd685ce.js
new file mode 100644
index 00000000000..0d2dc2d8c4c
--- /dev/null
+++ b/assets/js/d9d26c48.acd685ce.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[59681],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var r=n(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/e14e2680.5cc89fe5.js b/assets/js/e14e2680.5cc89fe5.js
deleted file mode 100644
index dbda3062ba3..00000000000
--- a/assets/js/e14e2680.5cc89fe5.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[45418],{3905:(e,t,n)=>{n.d(t,{Zo:()=>h,kt:()=>g});var a=n(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/e14e2680.a8ea0eeb.js b/assets/js/e14e2680.a8ea0eeb.js
new file mode 100644
index 00000000000..475888e26c7
--- /dev/null
+++ b/assets/js/e14e2680.a8ea0eeb.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[45418],{3905:(e,t,n)=>{n.d(t,{Zo:()=>h,kt:()=>g});var a=n(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/e1b162fa.327ecbf7.js b/assets/js/e1b162fa.327ecbf7.js
new file mode 100644
index 00000000000..b5520849bc9
--- /dev/null
+++ b/assets/js/e1b162fa.327ecbf7.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[88036],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/e1b162fa.7a6775f3.js b/assets/js/e1b162fa.7a6775f3.js
deleted file mode 100644
index ae80692ad82..00000000000
--- a/assets/js/e1b162fa.7a6775f3.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[88036],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/e55ca4fc.d53d88be.js b/assets/js/e55ca4fc.d53d88be.js
new file mode 100644
index 00000000000..31a180f04d0
--- /dev/null
+++ b/assets/js/e55ca4fc.d53d88be.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[22946],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>h});var i=n(67294);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/e55ca4fc.f9c9e26d.js b/assets/js/e55ca4fc.f9c9e26d.js
deleted file mode 100644
index 5c4dee040d5..00000000000
--- a/assets/js/e55ca4fc.f9c9e26d.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[22946],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>h});var i=n(67294);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/e6da6e1b.2606edf6.js b/assets/js/e6da6e1b.2606edf6.js
deleted file mode 100644
index 9786935f5a5..00000000000
--- a/assets/js/e6da6e1b.2606edf6.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[2967],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>k});var a=n(67294);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 l(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/e6da6e1b.71243013.js b/assets/js/e6da6e1b.71243013.js
new file mode 100644
index 00000000000..d6075e21038
--- /dev/null
+++ b/assets/js/e6da6e1b.71243013.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[2967],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>k});var a=n(67294);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 l(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/e800dce1.0ab47719.js b/assets/js/e800dce1.0ab47719.js
deleted file mode 100644
index 6f71596f786..00000000000
--- a/assets/js/e800dce1.0ab47719.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[31672],{3905:(e,n,t)=>{t.d(n,{Zo:()=>d,kt:()=>m});var a=t(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/e800dce1.c92d4e1c.js b/assets/js/e800dce1.c92d4e1c.js
new file mode 100644
index 00000000000..44d66a5a152
--- /dev/null
+++ b/assets/js/e800dce1.c92d4e1c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[31672],{3905:(e,n,t)=>{t.d(n,{Zo:()=>d,kt:()=>m});var a=t(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/ea353db9.83610572.js b/assets/js/ea353db9.83610572.js
deleted file mode 100644
index 16858b51821..00000000000
--- a/assets/js/ea353db9.83610572.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[8886],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var a=n(67294);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 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)}retur [...]
\ No newline at end of file
diff --git a/assets/js/ea353db9.f6a3947b.js b/assets/js/ea353db9.f6a3947b.js
new file mode 100644
index 00000000000..858301c977a
--- /dev/null
+++ b/assets/js/ea353db9.f6a3947b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[8886],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var a=n(67294);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 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)}retur [...]
\ No newline at end of file
diff --git a/assets/js/eade0d33.3834f028.js b/assets/js/eade0d33.3834f028.js
new file mode 100644
index 00000000000..859c9d1a31c
--- /dev/null
+++ b/assets/js/eade0d33.3834f028.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[70594],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>g});var r=n(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/eade0d33.3dbda66c.js b/assets/js/eade0d33.3dbda66c.js
deleted file mode 100644
index 12004c90f0b..00000000000
--- a/assets/js/eade0d33.3dbda66c.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[70594],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>d});var r=n(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/efd0111a.7a81b082.js b/assets/js/efd0111a.7a81b082.js
new file mode 100644
index 00000000000..58221c4c594
--- /dev/null
+++ b/assets/js/efd0111a.7a81b082.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[1233],{3905:(e,n,t)=>{t.d(n,{Zo:()=>h,kt:()=>m});var a=t(67294);function l(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)}retur [...]
\ No newline at end of file
diff --git a/assets/js/efd0111a.99b435de.js b/assets/js/efd0111a.99b435de.js
deleted file mode 100644
index 70de983a22b..00000000000
--- a/assets/js/efd0111a.99b435de.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[1233],{3905:(e,n,t)=>{t.d(n,{Zo:()=>h,kt:()=>m});var a=t(67294);function l(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)}retur [...]
\ No newline at end of file
diff --git a/assets/js/f292e823.2a609420.js b/assets/js/f292e823.2a609420.js
deleted file mode 100644
index 5dac415d526..00000000000
--- a/assets/js/f292e823.2a609420.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[19547],{3905:(e,t,a)=>{a.d(t,{Zo:()=>s,kt:()=>d});var n=a(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/f292e823.e2d4102f.js b/assets/js/f292e823.e2d4102f.js
new file mode 100644
index 00000000000..c726843ce93
--- /dev/null
+++ b/assets/js/f292e823.e2d4102f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[19547],{3905:(e,t,a)=>{a.d(t,{Zo:()=>s,kt:()=>d});var n=a(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/f2ce4146.955849b6.js b/assets/js/f2ce4146.955849b6.js
new file mode 100644
index 00000000000..c260828712a
--- /dev/null
+++ b/assets/js/f2ce4146.955849b6.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[52041],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var r=n(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/f2ce4146.c9bdb580.js b/assets/js/f2ce4146.c9bdb580.js
deleted file mode 100644
index 10adebf9007..00000000000
--- a/assets/js/f2ce4146.c9bdb580.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[52041],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var r=n(67294);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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/main.1fdf3d3a.js b/assets/js/main.1fdf3d3a.js
deleted file mode 100644
index c670b280c26..00000000000
--- a/assets/js/main.1fdf3d3a.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/*! For license information please see main.1fdf3d3a.js.LICENSE.txt */
-(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[40179],{99782:(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.305409c4.js b/assets/js/main.305409c4.js
new file mode 100644
index 00000000000..64e4d052c57
--- /dev/null
+++ b/assets/js/main.305409c4.js
@@ -0,0 +1,2 @@
+/*! For license information please see main.305409c4.js.LICENSE.txt */
+(self.webpackChunkshenyu_website=self.webpackChunkshenyu_website||[]).push([[40179],{99782:(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.1fdf3d3a.js.LICENSE.txt b/assets/js/main.305409c4.js.LICENSE.txt
similarity index 100%
rename from assets/js/main.1fdf3d3a.js.LICENSE.txt
rename to assets/js/main.305409c4.js.LICENSE.txt
diff --git a/assets/js/runtime~main.29364ae6.js b/assets/js/runtime~main.29364ae6.js
deleted file mode 100644
index 7416b0d2c9e..00000000000
--- a/assets/js/runtime~main.29364ae6.js
+++ /dev/null
@@ -1 +0,0 @@
-(()=>{"use strict";var e,a,f,c,b,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,c,b)=>{if(!f){var d=1/0;for(i=0;i<e.length;i++){f=e[i][0],c=e[i][1],b=e[i][2];for(var t=!0,o=0;o<f.length;o++)(!1&b||d>=b)&&Object.keys(r.O).every((e=>r.O[e](f[o])))?f.splice(o--,1):(t=!1,b<d&&(d=b));if(t){e.splice(i--,1);var n=c();void 0!==n&&(a=n)}}return a}b=b||0;for(var i=e.length;i>0&&e[i-1] [...]
\ No newline at end of file
diff --git a/assets/js/runtime~main.bc6125ff.js b/assets/js/runtime~main.bc6125ff.js
new file mode 100644
index 00000000000..5f113b8addd
--- /dev/null
+++ b/assets/js/runtime~main.bc6125ff.js
@@ -0,0 +1 @@
+(()=>{"use strict";var e,a,b,f,c,d={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var b=t[e]={exports:{}};return d[e].call(b.exports,b,b.exports,r),b.exports}r.m=d,e=[],r.O=(a,b,f,c)=>{if(!b){var d=1/0;for(i=0;i<e.length;i++){b=e[i][0],f=e[i][1],c=e[i][2];for(var t=!0,o=0;o<b.length;o++)(!1&c||d>=c)&&Object.keys(r.O).every((e=>r.O[e](b[o])))?b.splice(o--,1):(t=!1,c<d&&(d=c));if(t){e.splice(i--,1);var n=f();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/blog/DataSync-SourceCode-Analysis-Etcd-Data-Sync/index.html b/blog/DataSync-SourceCode-Analysis-Etcd-Data-Sync/index.html
index 442f1403bde..9f6d521069c 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.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.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 8f7a4af0755..748d6bcf800 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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 [...]
@@ -87,7 +87,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"> // 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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 061d254e75c..a91222acf5d 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.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.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 c8023c8dd63..632233b958a 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.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.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 2b23d2134aa..d82f43dd1ef 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.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.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 7a192885532..00c3777d73f 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.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.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 746c06cce0c..2e13e1779c5 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.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.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 874d9b321fc..5726b9576af 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.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.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 50a5f739b8b..d05707a4458 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.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.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 854f9728b10..c5fde47ad44 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.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.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 75aa527b021..91b7769ae71 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.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.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 9145563406e..713a1c73f9f 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.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.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 b3022912971..dc3bf0d7746 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.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.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 dc6be7d95a8..987a12fd86f 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 1d4cab7f96d..7a3bead83f8 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.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.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 9098c5c8778..04de94e8814 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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,8 +26,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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.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.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 8be019e2ebf..3df50b26146 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.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.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/atom.xml b/blog/atom.xml
index 1cec779abb6..a541765049e 100644
--- a/blog/atom.xml
+++ b/blog/atom.xml
@@ -2,122 +2,122 @@
<feed xmlns="http://www.w3.org/2005/Atom">
<id>https://shenyu.apache.org/blog</id>
<title>Apache ShenYu Blog</title>
- <updated>2022-12-19T16:39:00.930Z</updated>
+ <updated>2022-12-19T16:46:57.851Z</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[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>2022-12-19T16:46:57.851Z</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[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>2022-12-19T16:46:57.851Z</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[RateLimiter SPI code analysis]]></title>
+ <id>RateLimiter SPI code analysis</id>
+ <link href="https://shenyu.apache.org/blog/SPI-SourceCode-Analysis-RateLimiter-SPI"/>
+ <updated>2022-12-19T16:46:57.851Z</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[Apache ShenYu Start Demo]]></title>
+ <id>Apache ShenYu Start Demo</id>
+ <link href="https://shenyu.apache.org/blog/Start-SourceCode-Analysis-Start-Demo"/>
+ <updated>2022-12-19T16:46:57.851Z</updated>
+ <summary type="html"><![CDATA[Environmental preparation]]></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>2022-12-19T16:39:00.930Z</updated>
+ <updated>2022-12-19T16:46:57.847Z</updated>
<summary type="html"><![CDATA[Apache ShenYu is an asynchronous, high-performance, cross-language, responsive API gateway.]]></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>2022-12-19T16:39:00.930Z</updated>
+ <updated>2022-12-19T16:46:57.847Z</updated>
<summary type="html"><![CDATA[Apache ShenYu is an asynchronous, high-performance, cross-language, responsive API gateway.]]></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>2022-12-19T16:39:00.930Z</updated>
+ <updated>2022-12-19T16:46:57.847Z</updated>
<summary type="html"><![CDATA[Apache ShenYu is an asynchronous, high-performance, cross-language, responsive API gateway.]]></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>2022-12-19T16:39:00.930Z</updated>
+ <updated>2022-12-19T16:46:57.847Z</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[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>2022-12-19T16:39:00.930Z</updated>
+ <updated>2022-12-19T16:46:57.847Z</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>2022-12-19T16:39:00.930Z</updated>
+ <updated>2022-12-19T16:46:57.847Z</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[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>2022-12-19T16:39:00.930Z</updated>
+ <updated>2022-12-19T16:46:57.847Z</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 Divide Plugin]]></title>
<id>Code Analysis For Divide Plugin</id>
<link href="https://shenyu.apache.org/blog/Plugin-SourceCode-Analysis-Divide-Plugin"/>
- <updated>2022-12-19T16:39:00.930Z</updated>
+ <updated>2022-12-19T16:46:57.847Z</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 Dubbo Plugin]]></title>
<id>Code Analysis For Dubbo Plugin</id>
<link href="https://shenyu.apache.org/blog/Plugin-SourceCode-Analysis-Dubbo-Plugin"/>
- <updated>2022-12-19T16:39:00.930Z</updated>
+ <updated>2022-12-19T16:46:57.847Z</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 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>2022-12-19T16:39:00.930Z</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>2022-12-19T16:39:00.930Z</updated>
+ <updated>2022-12-19T16:46:57.847Z</updated>
<summary type="html"><![CDATA[Apache ShenYu is an asynchronous, high-performance, cross-language, responsive API gateway.]]></summary>
</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>2022-12-19T16:39:00.930Z</updated>
+ <updated>2022-12-19T16:46:57.847Z</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>2022-12-19T16:39:00.930Z</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[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>2022-12-19T16:39:00.930Z</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[RateLimiter SPI code analysis]]></title>
- <id>RateLimiter SPI code analysis</id>
- <link href="https://shenyu.apache.org/blog/SPI-SourceCode-Analysis-RateLimiter-SPI"/>
- <updated>2022-12-19T16:39:00.930Z</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[Apache ShenYu Start Demo]]></title>
- <id>Apache ShenYu Start Demo</id>
- <link href="https://shenyu.apache.org/blog/Start-SourceCode-Analysis-Start-Demo"/>
- <updated>2022-12-19T16:39:00.930Z</updated>
- <summary type="html"><![CDATA[Environmental preparation]]></summary>
+ <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>2022-12-19T16:46:57.847Z</updated>
+ <summary type="html"><![CDATA[Before starting, you can refer to this article to start the gateway]]></summary>
</entry>
<entry>
<title type="html"><![CDATA[SPI Source Code Analysis]]></title>
diff --git a/blog/index.html b/blog/index.html
index 24c827538f3..06f5cc21654 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 75f7b6cbcee..f82790cfd16 100644
--- a/blog/page/2/index.html
+++ b/blog/page/2/index.html
@@ -9,24 +9,48 @@
<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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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"> * 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><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">// 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 [...]
+<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> [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private String getPathByMethod(@NonNull final Method method) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Iterate through interface annotations to get path information</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> for (Class<? extends Annotation> mapping : mappingAnnotation) {</span></span><s [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public class ContextRegisterListener implements ApplicationListener<ContextRefreshedEvent>, BeanFactoryAware {</span></span><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"> /**</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 void setBeanFactory(final BeanFactory beanFactory) throws BeansException {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> this.beanFactory = beanFactory;</span></span><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 application events</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 onApplicationEvent(@NonNull final ContextRefreshedEvent contextRefreshedEvent) {</span></span><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 URI data</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private URIRegisterDTO buildURIRegisterDTO(final int port) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return URIRegisterDTO.builder()</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> .context [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // build MetaData</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private MetaDataRegisterDTO buildMetaDataDTO() {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return MetaDataRegisterDTO.builder()</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> .contextPath(co [...]
+</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>Build default selector conditional properties</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="codeBlockLines_1zSZ"><span class="token-line" style="color:#393A34" [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public class DivideRuleHandle implements RuleHandle {</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"> * load balance: default RANDOM</span></span><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 loadBalance = LoadBalanceEnum.RANDOM.getName();</span></span><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"> * retry strategy: default CURRENT</span></span><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 retryStrategy = RetryEnum.CURRENT.getName();</span></span><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"> * retry: default 3</span></span><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 int retry = 3;</span></span><span class="token-line" style="color:#393A34"><span class="token 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"> * retry: default 3000</span></span><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 timeout = Constants.TIME_OUT;</span></span><span class="token-line" style="color:#393A [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * retry: default 10240 byte</span></span><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 headerMaxSize = Constants.HEADER_MAX_SIZE;</span></span><span class="token-line [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * retry: default 102400 byte</span></span><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 requestMaxSize = Constants.REQUEST_MAX_SIZE;</span></span><span class="token-li [...]
+</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 String registerDefault(final RuleDTO ruleDTO) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> RuleDO exist = ruleMapper.findBySelectorIdAndName(ruleDTO.getSelectorId(), ruleDTO.getName());</span></span><span class="token-line" style="color:#393A3 [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> RuleDO ruleDO = RuleDO.buildRuleDO(ruleDTO);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> List<RuleConditionDTO> ruleConditions = ruleDTO.getRuleConditions();</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> if (StringUtils.isEmpty(ruleDTO.getId())) {</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><h6><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="1413-register-metadata"></a>1.4.1.3 Register Metadata<a class="hash-link" href="#1413-register-metadata" title="Direct link to heading">#</a></h6><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI java"><pre tabindex="0" class="prism-code language-j [...]
+</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 registerMetadata(final MetaDataRegisterDTO dto) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> if (dto.isRegisterMetaData()) { </span></span><span class="token-line" style="color:#393A34"><span class="token plain"> MetaDataSer [...]
+</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 saveOrUpdateMetaData(final MetaDataDO exist, final MetaDataRegisterDTO metaDataDTO) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> DataEventTypeEnum eventType;</span></span><span class="token-line" style="color:#393A34"><span class="token p [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private int index;</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 List<ShenyuPlugin> plugins;</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"> * Instantiating the default plugin chain</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> DefaultShenyuPluginChain(final List<ShenyuPlugin> plugins) [...]
+</span></span><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 each plugin</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</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="t [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public abstract class AbstractHttpClientPlugin<R> implements ShenyuPlugin {</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"> protected static final Logger LOG = LoggerFactory.getLogger(AbstractHttpClientPlugin.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"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public final Mono<Void> execute(final ServerWebExchange exchange, final ShenyuPluginChain chain) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // shenyu Context</span></span><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 Mono<R> resend(final Mono<R> clientResponse,</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 class="token plain"> final Duration duration,</span></span><span class="token-line" style="color: [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private Mono<R> resend(final Mono<R> response,</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 class="token plain"> final Duration duration,</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">}</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"> </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 [...]
@@ -66,7 +90,9 @@
</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"> @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">// 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 [...]
</span></span><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" [...]
@@ -95,7 +121,70 @@ 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"> //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"> // 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 [...]
+</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="22-httpclientregisterrepository"></a>2.2 HttpClientRegisterRepository<a class="hash-link" href="#22-httpclientregisterrepository" title="Direct link to heading">#</a></h4><p>The <code>ShenyuClientRegisterRepository</code> generated in the configuration file above is 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"> * load ShenyuClientRegisterRepository</span></span><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 final class ShenyuClientRegisterRepositoryFactory {</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 init(final ShenyuRegisterCenterConfig config) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> this.username = config.getProps().getProperty(Constants.USER_NAME);</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><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"> // Instantiation is done through the constructor</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public AbstractContextRefreshedEventListener(final PropertiesConfig clientConfig,</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> final ShenyuClientRegisterRepository shenyuCl [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // This method is executed when a context refresh event(ContextRefreshedEvent), occurs</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 onApplicationEvent(@NonNull final ContextRefreshedEvent event) {</span></span><span class="token-line" style="co [...]
+</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"> protected void handle(final String beanName, final T bean) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> Class<?> clazz = getCorrectedClass(bean);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> final A beanShenyuClient = AnnotatedElementUtils.findMergedAnnotation(clazz, getAnnotationType());</span [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // default implementation. build URI data and register it</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> protected void handleClass(final Class<?> clazz,</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> final T bean,</span></span><span class="token-line" style="color:#393A34"><span c [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // default implementation. build metadata and register it</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> protected void handleMethod(final T bean,</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> final Class<?> clazz,</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><p>In the constructor, the main purpose is to read the property information and then perform the checksum.</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-color:#f6f8fa"><code class="codeBlockLines_1zSZ" [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public class ShenyuClientRegisterEventPublisher {</span></span><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 static final ShenyuClientRegisterEventPublisher INSTANCE = new ShenyuClientRegisterEventPublisher();</span></span><span class="token-line" style="color:#393A34"><span [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private DisruptorProviderManage<DataTypeParent> providerManage;</span></span><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 static ShenyuClientRegisterEventPublisher getInstance() {</span></span><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"> * ShenyuSpringMvcClient</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</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 [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // path</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @AliasFor(attribute = "path")</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> String value() default "";</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span></span><span class="token-line" style=" [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // 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><p>It is used as follows.</p><ul><li>register the entire interface</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="codeBlockLines_1zSZ"><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"> * 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">public interface WorkHandler<T> {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> void onEvent(T event) throws Exception;</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>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"> * </span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * QueueConsumer</span></span><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 QueueConsumer<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 onEvent(final DataEvent<T> t) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> if (t != null) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Use different thread pools based on Dat [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public final class RegisterClientConsumerExecutor<T extends DataTypeParent> extends QueueConsumerExecutor<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"> //...... </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"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public void run() {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // get data</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> final T data = getData();</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"> * load ShenyuClientRegisterRepository</span></span><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 final class ShenyuClientRegisterRepositoryFactory {</span></span><span class="token-line" sty [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private static final Logger LOGGER = LoggerFactory.getLogger(HttpClientRegisterRepository.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"> private static URIRegisterDTO uriRegisterDTO;</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 username;</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 password;</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 List<String> serverList;</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 accessToken;</span></span><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 HttpClientRegisterRepository() {</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"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public void init(final ShenyuRegisterCenterConfig config) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // admin username</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> this.username = config.getProps().g [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Persist uri.</span></span><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 registerDTO the register dto</span></span><span class="token-line" style="color:#393A34"><span cla [...]
+</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 doPersistInterface(final MetaDataRegisterDTO metadata) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> doRegister(metadata, Constants.META_PATH, Constants.META_TYPE);</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 close() {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> if (uriRegisterDTO != null) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> uriRegisterDTO.setEventType(EventType.DELETED);</span></s [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private void setAccessToken() {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> for (String server : serverList) {</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"> Optional<?> login = Register [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private <T> void doRegister(final T t, final String path, final String type) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> int i = 0;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // iterate through the list of admin services (admin may be clustered)</span></span><span class="token-line" style="c [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public final class RegisterUtils {</span></span><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><span class="token-line" style="color:#393A34"><span class="token plain"> // Sending data via OkHttp</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public static void doRegister(final String json, final String url, final String type) throws IOException {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> if (!StringUtils.hasLength(accessToken)) {</span></span><span class="token-line" st [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public class ShenyuClientURIExecutorSubscriber implements ExecutorTypeSubscriber<URIRegisterDTO> {</span></span><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 [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private ShenyuServerRegisterPublisher publisher;</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 init(final ShenyuServerRegisterPublisher publisher, final ShenyuRegisterCenterConfig config) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> this.publisher = publisher;</span></span><span class="token-line" style="color:#393A34"><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>The exact method used is specified by the configuration file and then loaded via <code>SPI</code>.</p><p>In the <code>application.yml</code> file in <code>shenyu-admin</code> configure the registration method, <code>registerType</code> specify the registration type, when registering with <code>http</code>, <code>serverLists</code> do not need [...]
+</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>Two <code>bean</code>s are generated in the configuration class.</p><ul><li><p><code>shenyuRegisterCenterConfig</code>: to read the attribute configuration.</p></li><li><p><code>shenyuServerRegisterRepository</code>: for server-side registration.</p></li></ul><p>In the process of creating <code>shenyuServerRegisterRepository</code>, a series o [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public class RegisterClientServerDisruptorPublisher implements ShenyuServerRegisterPublisher {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private static final RegisterClientServerDisruptorPublisher INSTANCE = new private static final RegisterClientServerDisruptorPublisher INSTANCE = new RegisterServerDisruptorPublisher();</span></span><span class="toke [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public static RegisterClientServerDisruptorPublisher getInstance() {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return INSTANCE;</span></span><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" [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // write data to queue on batch</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 publish(final Collection<? extends DataTypeParent> dataList) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> Disr [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public interface WorkHandler<T> {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> void onEvent(T var1) throws Exception;</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>Th [...]
+</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 onEvent(final DataEvent<T> t) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> if (t != null) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Use different thread pools based on Dat [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public final class RegisterServerConsumerExecutor extends QueueConsumerExecutor<List<DataTypeParent>> {</span></span><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 run() {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //get the data from the disruptor queue and check data</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> Collection<DataTypeParent> resul [...]
+</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><ul><li>ExecutorSubscriber#executor()</li></ul><p>The actuator subscribers are divided into two categories, one that handles metadata and one that handles <code>URIs</code>. There are two on the client side and two on the server side, so there are four in total.</p><p><img src="/assets/images/executor-subscriber-86d5645d204ad1d05fe12dd30992c8d1.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 DataType getType() {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return DataType.META_DATA; </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"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public void executor(final Collection<MetaDataRegisterDTO> metaDataRegisterDTOList) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Traversing the metadata list</span></span><span class="token-line" style="color:#393A34"><span class="token plai [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public class URIRegisterExecutorSubscriber implements ExecutorTypeSubscriber<URIRegisterDTO> {</span></span><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"> @Override</span></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>ShenyuClientRegisterService#register()</li></ul><p><code>ShenyuClientRegisterService</code> is the registration method interface, which has several implementation classes.</p><p><img src="/assets/images/client-register-service-949e3110cb57db2f250dafdc41446eb4.png"></p><ul><li><code>AbstractContextPathRegisterService</code>: abstract 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" style="display:inline-block">
+</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"> /**</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"> // 值持有器,简单VO,用来存储泛型值和值加载顺序</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public static class Holder<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"> // 这里的值引用是volatile修饰,便于某线程更变另一线程马上读到最新的值</span></span><sp [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">// 实例化getExtensionLoader,静态工厂方法,需要入参为@SPI标识的接口类型和类加载器实例</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public static <T> ExtensionLoader<T> getExtensionLoader(final Class<T> clazz, final ClassLoader cl) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // 前缀校验,接口类型必须非空并且必须存在@SPI注解,否则抛出异常中断</span></span><s [...]
@@ -108,7 +197,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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/rss.xml b/blog/rss.xml
index 21acea14d3b..b7093d6d773 100644
--- a/blog/rss.xml
+++ b/blog/rss.xml
@@ -4,120 +4,120 @@
<title>Apache ShenYu Blog</title>
<link>https://shenyu.apache.org/blog</link>
<description>Apache ShenYu Blog</description>
- <lastBuildDate>Mon, 19 Dec 2022 16:39:00 GMT</lastBuildDate>
+ <lastBuildDate>Mon, 19 Dec 2022 16:46:57 GMT</lastBuildDate>
<docs>https://validator.w3.org/feed/docs/rss2.html</docs>
<generator>https://github.com/jpmonette/feed</generator>
+ <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, 19 Dec 2022 16:46:57 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[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, 19 Dec 2022 16:46:57 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[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, 19 Dec 2022 16:46:57 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[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, 19 Dec 2022 16:46:57 GMT</pubDate>
+ <description><![CDATA[Environmental preparation]]></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, 19 Dec 2022 16:39:00 GMT</pubDate>
+ <pubDate>Mon, 19 Dec 2022 16:46:57 GMT</pubDate>
<description><![CDATA[Apache ShenYu is an asynchronous, high-performance, cross-language, responsive API gateway.]]></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, 19 Dec 2022 16:39:00 GMT</pubDate>
+ <pubDate>Mon, 19 Dec 2022 16:46:57 GMT</pubDate>
<description><![CDATA[Apache ShenYu is an asynchronous, high-performance, cross-language, responsive API gateway.]]></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, 19 Dec 2022 16:39:00 GMT</pubDate>
+ <pubDate>Mon, 19 Dec 2022 16:46:57 GMT</pubDate>
<description><![CDATA[Apache ShenYu is an asynchronous, high-performance, cross-language, responsive API gateway.]]></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, 19 Dec 2022 16:39:00 GMT</pubDate>
+ <pubDate>Mon, 19 Dec 2022 16:46:57 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[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, 19 Dec 2022 16:39:00 GMT</pubDate>
+ <pubDate>Mon, 19 Dec 2022 16:46:57 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, 19 Dec 2022 16:39:00 GMT</pubDate>
+ <pubDate>Mon, 19 Dec 2022 16:46:57 GMT</pubDate>
<description><![CDATA[This article will provide an in-depth analysis of Apache ShenYu's integration tests.]]></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, 19 Dec 2022 16:39:00 GMT</pubDate>
+ <pubDate>Mon, 19 Dec 2022 16:46:57 GMT</pubDate>
<description><![CDATA[Before starting, you can refer to this article to start the gateway]]></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, 19 Dec 2022 16:39:00 GMT</pubDate>
+ <pubDate>Mon, 19 Dec 2022 16:46:57 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 Dubbo Plugin]]></title>
<link>https://shenyu.apache.org/blog/Plugin-SourceCode-Analysis-Dubbo-Plugin</link>
<guid>Code Analysis For Dubbo Plugin</guid>
- <pubDate>Mon, 19 Dec 2022 16:39:00 GMT</pubDate>
+ <pubDate>Mon, 19 Dec 2022 16:46:57 GMT</pubDate>
<description><![CDATA[Apache ShenYu is an asynchronous, high-performance, cross-language, responsive API gateway.]]></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, 19 Dec 2022 16:39:00 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, 19 Dec 2022 16:39:00 GMT</pubDate>
+ <pubDate>Mon, 19 Dec 2022 16:46:57 GMT</pubDate>
<description><![CDATA[Apache ShenYu is an asynchronous, high-performance, cross-language, responsive API gateway.]]></description>
</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, 19 Dec 2022 16:39:00 GMT</pubDate>
+ <pubDate>Mon, 19 Dec 2022 16:46:57 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>Mon, 19 Dec 2022 16:39:00 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[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, 19 Dec 2022 16:39:00 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[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, 19 Dec 2022 16:39:00 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[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, 19 Dec 2022 16:39:00 GMT</pubDate>
- <description><![CDATA[Environmental preparation]]></description>
+ <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, 19 Dec 2022 16:46:57 GMT</pubDate>
+ <description><![CDATA[Before starting, you can refer to this article to start the 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 7337d54f01e..aaa271dde72 100644
--- a/blog/tags/apache-shen-yu/index.html
+++ b/blog/tags/apache-shen-yu/index.html
@@ -9,12 +9,27 @@
<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">17 posts tagged with "apache shenyu" | Apache ShenYu</title><meta data-react-helmet="true" property="og:title" content="17 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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"> * 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><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"> } 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 +55,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,7 +127,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"> } 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 [...]
@@ -165,7 +180,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 [...]
@@ -192,11 +248,11 @@ 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">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"></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> [...]
@@ -232,128 +288,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">}</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"> } 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"> // 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 [...]
-</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="22-httpclientregisterrepository"></a>2.2 HttpClientRegisterRepository<a class="hash-link" href="#22-httpclientregisterrepository" title="Direct link to heading">#</a></h4><p>The <code>ShenyuClientRegisterRepository</code> generated in the configuration file above is 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"> * load ShenyuClientRegisterRepository</span></span><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 final class ShenyuClientRegisterRepositoryFactory {</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 init(final ShenyuRegisterCenterConfig config) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> this.username = config.getProps().getProperty(Constants.USER_NAME);</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><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"> // Instantiation is done through the constructor</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public AbstractContextRefreshedEventListener(final PropertiesConfig clientConfig,</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> final ShenyuClientRegisterRepository shenyuCl [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // This method is executed when a context refresh event(ContextRefreshedEvent), occurs</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 onApplicationEvent(@NonNull final ContextRefreshedEvent event) {</span></span><span class="token-line" style="co [...]
-</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"> protected void handle(final String beanName, final T bean) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> Class<?> clazz = getCorrectedClass(bean);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> final A beanShenyuClient = AnnotatedElementUtils.findMergedAnnotation(clazz, getAnnotationType());</span [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // default implementation. build URI data and register it</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> protected void handleClass(final Class<?> clazz,</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> final T bean,</span></span><span class="token-line" style="color:#393A34"><span c [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // default implementation. build metadata and register it</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> protected void handleMethod(final T bean,</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> final Class<?> clazz,</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><p>In the constructor, the main purpose is to read the property information and then perform the checksum.</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-color:#f6f8fa"><code class="codeBlockLines_1zSZ" [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public class ShenyuClientRegisterEventPublisher {</span></span><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 static final ShenyuClientRegisterEventPublisher INSTANCE = new ShenyuClientRegisterEventPublisher();</span></span><span class="token-line" style="color:#393A34"><span [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private DisruptorProviderManage<DataTypeParent> providerManage;</span></span><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 static ShenyuClientRegisterEventPublisher getInstance() {</span></span><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"> * ShenyuSpringMvcClient</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</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 [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // path</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @AliasFor(attribute = "path")</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> String value() default "";</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span></span><span class="token-line" style=" [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // 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><p>It is used as follows.</p><ul><li>register the entire interface</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="codeBlockLines_1zSZ"><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"> * 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">public interface WorkHandler<T> {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> void onEvent(T event) throws Exception;</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>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"> * </span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * QueueConsumer</span></span><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 QueueConsumer<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 onEvent(final DataEvent<T> t) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> if (t != null) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Use different thread pools based on Dat [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public final class RegisterClientConsumerExecutor<T extends DataTypeParent> extends QueueConsumerExecutor<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"> //...... </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"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public void run() {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // get data</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> final T data = getData();</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"> * load ShenyuClientRegisterRepository</span></span><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 final class ShenyuClientRegisterRepositoryFactory {</span></span><span class="token-line" sty [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private static final Logger LOGGER = LoggerFactory.getLogger(HttpClientRegisterRepository.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"> private static URIRegisterDTO uriRegisterDTO;</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 username;</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 password;</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 List<String> serverList;</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 accessToken;</span></span><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 HttpClientRegisterRepository() {</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"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public void init(final ShenyuRegisterCenterConfig config) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // admin username</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> this.username = config.getProps().g [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Persist uri.</span></span><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 registerDTO the register dto</span></span><span class="token-line" style="color:#393A34"><span cla [...]
-</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 doPersistInterface(final MetaDataRegisterDTO metadata) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> doRegister(metadata, Constants.META_PATH, Constants.META_TYPE);</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 close() {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> if (uriRegisterDTO != null) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> uriRegisterDTO.setEventType(EventType.DELETED);</span></s [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private void setAccessToken() {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> for (String server : serverList) {</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"> Optional<?> login = Register [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private <T> void doRegister(final T t, final String path, final String type) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> int i = 0;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // iterate through the list of admin services (admin may be clustered)</span></span><span class="token-line" style="c [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public final class RegisterUtils {</span></span><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><span class="token-line" style="color:#393A34"><span class="token plain"> // Sending data via OkHttp</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public static void doRegister(final String json, final String url, final String type) throws IOException {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> if (!StringUtils.hasLength(accessToken)) {</span></span><span class="token-line" st [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public class ShenyuClientURIExecutorSubscriber implements ExecutorTypeSubscriber<URIRegisterDTO> {</span></span><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 [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private ShenyuServerRegisterPublisher publisher;</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 init(final ShenyuServerRegisterPublisher publisher, final ShenyuRegisterCenterConfig config) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> this.publisher = publisher;</span></span><span class="token-line" style="color:#393A34"><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>The exact method used is specified by the configuration file and then loaded via <code>SPI</code>.</p><p>In the <code>application.yml</code> file in <code>shenyu-admin</code> configure the registration method, <code>registerType</code> specify the registration type, when registering with <code>http</code>, <code>serverLists</code> do not need [...]
-</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>Two <code>bean</code>s are generated in the configuration class.</p><ul><li><p><code>shenyuRegisterCenterConfig</code>: to read the attribute configuration.</p></li><li><p><code>shenyuServerRegisterRepository</code>: for server-side registration.</p></li></ul><p>In the process of creating <code>shenyuServerRegisterRepository</code>, a series o [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public class RegisterClientServerDisruptorPublisher implements ShenyuServerRegisterPublisher {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private static final RegisterClientServerDisruptorPublisher INSTANCE = new private static final RegisterClientServerDisruptorPublisher INSTANCE = new RegisterServerDisruptorPublisher();</span></span><span class="toke [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public static RegisterClientServerDisruptorPublisher getInstance() {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return INSTANCE;</span></span><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" [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // write data to queue on batch</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 publish(final Collection<? extends DataTypeParent> dataList) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> Disr [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public interface WorkHandler<T> {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> void onEvent(T var1) throws Exception;</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>Th [...]
-</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 onEvent(final DataEvent<T> t) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> if (t != null) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Use different thread pools based on Dat [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public final class RegisterServerConsumerExecutor extends QueueConsumerExecutor<List<DataTypeParent>> {</span></span><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 run() {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //get the data from the disruptor queue and check data</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> Collection<DataTypeParent> resul [...]
-</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><ul><li>ExecutorSubscriber#executor()</li></ul><p>The actuator subscribers are divided into two categories, one that handles metadata and one that handles <code>URIs</code>. There are two on the client side and two on the server side, so there are four in total.</p><p><img src="/assets/images/executor-subscriber-86d5645d204ad1d05fe12dd30992c8d1.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 DataType getType() {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return DataType.META_DATA; </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"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public void executor(final Collection<MetaDataRegisterDTO> metaDataRegisterDTOList) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Traversing the metadata list</span></span><span class="token-line" style="color:#393A34"><span class="token plai [...]
-</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public class URIRegisterExecutorSubscriber implements ExecutorTypeSubscriber<URIRegisterDTO> {</span></span><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"> @Override</span></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>ShenyuClientRegisterService#register()</li></ul><p><code>ShenyuClientRegisterService</code> is the registration method interface, which has several implementation classes.</p><p><img src="/assets/images/client-register-service-949e3110cb57db2f250dafdc41446eb4.png"></p><ul><li><code>AbstractContextPathRegisterService</code>: abstract 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" style="display:inline-block">
-</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"> /**</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">// 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 [...]
+</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 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 [...]
@@ -393,7 +328,9 @@ 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"> 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"> @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">// 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 [...]
</span></span><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" [...]
@@ -422,7 +359,70 @@ 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"> //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"> // 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 [...]
+</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="22-httpclientregisterrepository"></a>2.2 HttpClientRegisterRepository<a class="hash-link" href="#22-httpclientregisterrepository" title="Direct link to heading">#</a></h4><p>The <code>ShenyuClientRegisterRepository</code> generated in the configuration file above is 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"> * load ShenyuClientRegisterRepository</span></span><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 final class ShenyuClientRegisterRepositoryFactory {</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 init(final ShenyuRegisterCenterConfig config) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> this.username = config.getProps().getProperty(Constants.USER_NAME);</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><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"> // Instantiation is done through the constructor</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public AbstractContextRefreshedEventListener(final PropertiesConfig clientConfig,</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> final ShenyuClientRegisterRepository shenyuCl [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // This method is executed when a context refresh event(ContextRefreshedEvent), occurs</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 onApplicationEvent(@NonNull final ContextRefreshedEvent event) {</span></span><span class="token-line" style="co [...]
+</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"> protected void handle(final String beanName, final T bean) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> Class<?> clazz = getCorrectedClass(bean);</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> final A beanShenyuClient = AnnotatedElementUtils.findMergedAnnotation(clazz, getAnnotationType());</span [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // default implementation. build URI data and register it</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> protected void handleClass(final Class<?> clazz,</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> final T bean,</span></span><span class="token-line" style="color:#393A34"><span c [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // default implementation. build metadata and register it</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> protected void handleMethod(final T bean,</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> final Class<?> clazz,</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><p>In the constructor, the main purpose is to read the property information and then perform the checksum.</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-color:#f6f8fa"><code class="codeBlockLines_1zSZ" [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public class ShenyuClientRegisterEventPublisher {</span></span><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 static final ShenyuClientRegisterEventPublisher INSTANCE = new ShenyuClientRegisterEventPublisher();</span></span><span class="token-line" style="color:#393A34"><span [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private DisruptorProviderManage<DataTypeParent> providerManage;</span></span><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 static ShenyuClientRegisterEventPublisher getInstance() {</span></span><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"> * ShenyuSpringMvcClient</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</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 [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // path</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> @AliasFor(attribute = "path")</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> String value() default "";</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span></span><span class="token-line" style=" [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // 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><p>It is used as follows.</p><ul><li>register the entire interface</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="codeBlockLines_1zSZ"><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"> * 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">public interface WorkHandler<T> {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> void onEvent(T event) throws Exception;</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>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"> * </span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * QueueConsumer</span></span><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 QueueConsumer<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 onEvent(final DataEvent<T> t) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> if (t != null) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Use different thread pools based on Dat [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public final class RegisterClientConsumerExecutor<T extends DataTypeParent> extends QueueConsumerExecutor<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"> //...... </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"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public void run() {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // get data</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> final T data = getData();</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"> * load ShenyuClientRegisterRepository</span></span><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 final class ShenyuClientRegisterRepositoryFactory {</span></span><span class="token-line" sty [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private static final Logger LOGGER = LoggerFactory.getLogger(HttpClientRegisterRepository.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"> private static URIRegisterDTO uriRegisterDTO;</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 username;</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 password;</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 List<String> serverList;</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 accessToken;</span></span><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 HttpClientRegisterRepository() {</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"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public void init(final ShenyuRegisterCenterConfig config) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // admin username</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> this.username = config.getProps().g [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Persist uri.</span></span><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 registerDTO the register dto</span></span><span class="token-line" style="color:#393A34"><span cla [...]
+</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 doPersistInterface(final MetaDataRegisterDTO metadata) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> doRegister(metadata, Constants.META_PATH, Constants.META_TYPE);</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 close() {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> if (uriRegisterDTO != null) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> uriRegisterDTO.setEventType(EventType.DELETED);</span></s [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private void setAccessToken() {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> for (String server : serverList) {</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"> Optional<?> login = Register [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private <T> void doRegister(final T t, final String path, final String type) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> int i = 0;</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // iterate through the list of admin services (admin may be clustered)</span></span><span class="token-line" style="c [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public final class RegisterUtils {</span></span><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><span class="token-line" style="color:#393A34"><span class="token plain"> // Sending data via OkHttp</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public static void doRegister(final String json, final String url, final String type) throws IOException {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> if (!StringUtils.hasLength(accessToken)) {</span></span><span class="token-line" st [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public class ShenyuClientURIExecutorSubscriber implements ExecutorTypeSubscriber<URIRegisterDTO> {</span></span><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 [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private ShenyuServerRegisterPublisher publisher;</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 init(final ShenyuServerRegisterPublisher publisher, final ShenyuRegisterCenterConfig config) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> this.publisher = publisher;</span></span><span class="token-line" style="color:#393A34"><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>The exact method used is specified by the configuration file and then loaded via <code>SPI</code>.</p><p>In the <code>application.yml</code> file in <code>shenyu-admin</code> configure the registration method, <code>registerType</code> specify the registration type, when registering with <code>http</code>, <code>serverLists</code> do not need [...]
+</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>Two <code>bean</code>s are generated in the configuration class.</p><ul><li><p><code>shenyuRegisterCenterConfig</code>: to read the attribute configuration.</p></li><li><p><code>shenyuServerRegisterRepository</code>: for server-side registration.</p></li></ul><p>In the process of creating <code>shenyuServerRegisterRepository</code>, a series o [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public class RegisterClientServerDisruptorPublisher implements ShenyuServerRegisterPublisher {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> private static final RegisterClientServerDisruptorPublisher INSTANCE = new private static final RegisterClientServerDisruptorPublisher INSTANCE = new RegisterServerDisruptorPublisher();</span></span><span class="toke [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public static RegisterClientServerDisruptorPublisher getInstance() {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return INSTANCE;</span></span><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" [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // write data to queue on batch</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 publish(final Collection<? extends DataTypeParent> dataList) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> Disr [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public interface WorkHandler<T> {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> void onEvent(T var1) throws Exception;</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>Th [...]
+</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 onEvent(final DataEvent<T> t) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> if (t != null) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Use different thread pools based on Dat [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public final class RegisterServerConsumerExecutor extends QueueConsumerExecutor<List<DataTypeParent>> {</span></span><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 run() {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> //get the data from the disruptor queue and check data</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> Collection<DataTypeParent> resul [...]
+</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><ul><li>ExecutorSubscriber#executor()</li></ul><p>The actuator subscribers are divided into two categories, one that handles metadata and one that handles <code>URIs</code>. There are two on the client side and two on the server side, so there are four in total.</p><p><img src="/assets/images/executor-subscriber-86d5645d204ad1d05fe12dd30992c8d1.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 DataType getType() {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> return DataType.META_DATA; </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"> @Override</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public void executor(final Collection<MetaDataRegisterDTO> metaDataRegisterDTOList) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // Traversing the metadata list</span></span><span class="token-line" style="color:#393A34"><span class="token plai [...]
+</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public class URIRegisterExecutorSubscriber implements ExecutorTypeSubscriber<URIRegisterDTO> {</span></span><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"> @Override</span></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>ShenyuClientRegisterService#register()</li></ul><p><code>ShenyuClientRegisterService</code> is the registration method interface, which has several implementation classes.</p><p><img src="/assets/images/client-register-service-949e3110cb57db2f250dafdc41446eb4.png"></p><ul><li><code>AbstractContextPathRegisterService</code>: abstract 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" style="display:inline-block">
+</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"> /**</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"> // 值持有器,简单VO,用来存储泛型值和值加载顺序</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> public static class Holder<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"> // 这里的值引用是volatile修饰,便于某线程更变另一线程马上读到最新的值</span></span><sp [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain">// 实例化getExtensionLoader,静态工厂方法,需要入参为@SPI标识的接口类型和类加载器实例</span></span><span class="token-line" style="color:#393A34"><span class="token plain">public static <T> ExtensionLoader<T> getExtensionLoader(final Class<T> clazz, final ClassLoader cl) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // 前缀校验,接口类型必须非空并且必须存在@SPI注解,否则抛出异常中断</span></span><s [...]
@@ -435,7 +435,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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 3ecf706d156..3b88f454c22 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.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.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 237d7390567..388104e488d 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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,7 +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"> 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 [...]
@@ -165,34 +165,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"> 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"> } 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"> 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 [...]
@@ -233,8 +206,35 @@ 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"> // 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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.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> [...]
+</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 [...]
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 fc4af7a6ab7..5bd9bd4012d 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 1d8e6c9c88b..f274fab6933 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 c7a6cd4c97e..61910f5b7f7 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 e9489d62cc0..6cb56dc6876 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/tags/index.html b/blog/tags/index.html
index 04a1225b67c..5dde7d259c0 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.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.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 9404ea7e6e3..b0afaa27337 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 e16f2c1a02c..6343c392a10 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 a91f685f1f9..8243db63819 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 f7fc3bbc38d..c001e62eae3 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 bc3e82138aa..2a484afd58b 100644
--- a/blog/tags/plugin/index.html
+++ b/blog/tags/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">2 posts tagged with "plugin" | Apache ShenYu</title><meta data-react-helmet="true" property="og:title" content="2 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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,7 +50,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">}</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 [...]
</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 [...]
@@ -91,7 +91,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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 d55693781d4..b02661e3294 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 a82c1dd8a78..30bf3bc511f 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 d66fbf20bc6..9189b0d6525 100644
--- a/blog/tags/spi/index.html
+++ b/blog/tags/spi/index.html
@@ -9,19 +9,19 @@
<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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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"> @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">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 [...]
@@ -29,7 +29,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">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><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" [...]
@@ -71,7 +71,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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 31e3fa69ae5..fe33b7ed73e 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 45545346768..e845404240c 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 30d1676e39b..c18665a5192 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.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.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/community/committer/index.html b/community/committer/index.html
index d7a36ec4fd6..42b9cacf629 100644
--- a/community/committer/index.html
+++ b/community/committer/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">Committer | 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" conte [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.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.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/community/community/index.html b/community/community/index.html
index c87aeacb978..b7fb742ae38 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.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.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 db60e9f845b..5a0b356fc05 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.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.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 11301fa3244..fa27d4b2472 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.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.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/community/faq/index.html b/community/faq/index.html
index 6f040e25ad2..e0cb79e4809 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.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.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/community/icla/index.html b/community/icla/index.html
index e8c6212f76f..6969438322c 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.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.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 6f4e9055021..fc893b8e9bd 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.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.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 45d430f9646..083ce30fedf 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.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.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 090eff1d4f4..bf6a2bb85dd 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.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.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 e30b4d5f27e..accec7eb63a 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.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.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 5530f1cae9e..2c688bbf9df 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.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.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 237c955b29c..c8c0a2c1207 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.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.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 3797ba344ef..22aee4a2b67 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.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.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/community/vote-pmc/index.html b/community/vote-pmc/index.html
index fbcd210d6a2..13935c9360d 100644
--- a/community/vote-pmc/index.html
+++ b/community/vote-pmc/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">Voting in a new PMC member | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//community/vote-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:docus [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.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.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 7abfeb34da5..fd91d7ea592 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 2ac293a62ee..531a32de644 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 1bb2fa9232d..8b3a4af9399 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 f94a183eea8..3471b02af39 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 d8b002758d9..1a616a36125 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 0b4b50d4640..8f1625d3805 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 7f5ad3b9463..da40c5bf805 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 84a20bc4d69..2cc5f3b6104 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 49b942fb978..0d46f6e8e2a 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 59b876a14f7..caa7e3a958d 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 9828ae0b326..09ca8a86f33 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 c35c4287085..1126f507cea 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 864f809ea7c..8d47c2f5cbf 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 1eaafc8cfcc..6ee2b6985b8 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 7e160782cb5..988e68f907b 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 a6cff63c547..d66ca7e94c4 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 81d79feb894..d30a4c7c8c7 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 0e6f9b21da6..811ed78febe 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 a7dc15fa8db..e1ee55b7bdc 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 45bf437e57c..80930b10730 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 e87780a0093..2381faf55e7 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 469475b8010..c3f9153c82b 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 4f1b15b7367..81d4f8ae6ec 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 94d9d7c0a4d..9820f01979b 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 0a9008a8383..fe4ada7f405 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 5724d4d52ae..af0c3a8ada8 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 9c8ba94bb00..f632ceb7b31 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 17a3f610be4..4698cad1fd7 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 f7ba2935990..667178fed10 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 b65ad1e8448..c9c239b6ba8 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 6b0b4ba24aa..80b2c020fb6 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 b6b8ac4b200..f2642b62111 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 863584f4bc3..aabfa0d0d5e 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 c238baf34bf..0dbce8c0f72 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 7c1c4b2e7d6..c71ca2ac668 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 77886857b22..65ac3898905 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 553390c1698..9b147266f91 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 57de80ef17b..f22ee415a87 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 aca93aa5736..b4dac4d76fd 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 55ef0f6a87d..128b3097ad4 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 1f831856aff..14b867288e5 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 c93c39f1ac5..9b6436c3329 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 a8de129366f..b74df2e8968 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 16f07d36e8b..14e18591e1b 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 d31ff66179c..8ae88ed4bf1 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 a124ff7ced0..4b89d946995 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 df800a3892b..afb8d73eaf6 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 e4b7bbc20fc..72b1b09fe7c 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 b638c43fbcd..c4572f28b76 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 8f65553c2a7..faec33c57a2 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 502f469e86b..7b939603683 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 a39f16de9d8..222764fa1cb 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 8597fa62c6d..81e2fb93283 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 4fe507c930b..04ec9eb0554 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 56a6d7b6be6..caaa6e3e5a3 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 d172be740e3..ee4413cf8eb 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 8ec35a8d34e..8990bab6d69 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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-permissin"></a>Data Permissin<a class="hash-link" href="#data-permissin" title="Direct link to heading">#</a></h2><ul><li><p>Data Permission use database to store the relationship [...]
<img alt="data perission 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 co [...]
-<script src="/assets/js/runtime~main.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 18278b8ad6f..4b5020bc237 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 d40c5cf0b4a..222c09e7561 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 b78d997d6c4..1a54a060af0 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 274fa59824d..39d8c18aea1 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 8bd65aeb053..df49dca0a6c 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 bd9d8a4d439..9e913a7afc1 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 a2d511c5a2b..1a9078ed35d 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 91da7ea585d..f66a71bed07 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 49e1fd4321f..609237a4405 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 bc27b177ed3..d8e9ed2db33 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 c06cfe0b24b..7c8e47b2d92 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 6466070d851..e5e1cd39c95 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 79699131274..c9360b274ad 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 cbbbee8a43a..f847496608d 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 5e751872ee3..7ddd4238ccc 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 a03ea9414dc..fc8ffd683d1 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 b1314230b56..ea88cfa7e0b 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 50ca731791f..1ee185cbc80 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 ed430f123c8..386d31b8f77 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 827b3026cc1..5c16f6d2e8f 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 f54db7a9b34..6a29b3e1d63 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 1f6054881cd..c810874b518 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 8f565c3aa77..0550f98f927 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 fb3b0546c04..647d22dc3d9 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 a5262fda532..8b1ce8cee3e 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 58e51f401d4..9550cb5bba4 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 b29ef7bd47e..d83e8a6fb99 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 2af6511f9b3..eb43cb03b96 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 4cc688a7873..38809c1059e 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 7d85fc2199f..d37b54e3430 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 8e67541816b..1cd3e4e01c8 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 3b7e09cac59..1bab739f110 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 ce634602738..f400c719f22 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 4d74d39032f..b88fb47eb33 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 b6a127cec78..5ba5d65f8bc 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 4b34de6acd4..7057161fcbb 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 f8a2c4443ac..6543a20bc4a 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 9c298ff2198..74ad693f4c9 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 0dc832aa437..72bd520daf6 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 b839c975ed4..f1ed4dbd855 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 5660cfc78c8..6472fc7e01c 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 53c8f81922c..6a5a71745bf 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 a57b4901656..d243760ba1c 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 0c91ecd9afe..7e369464995 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 d75b1dbbf05..4deb58d46bd 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 231cf099788..408546ec410 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 b429c1528f3..36a3bb4fa78 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 d3a6c8a8c57..14795e2d721 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 02114f1240c..a6403e4dd78 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 d9b4b9c3a6a..22207bd2755 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 fb3f6cea032..2960df53a79 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 1291a856339..38dd313970b 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 fa283926beb..fa1006978eb 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 0ec7fec64d5..78fce4bc312 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 95f0810ae77..5b93f835521 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/user-guide/dubbo-proxy/index.html b/docs/2.4.0/user-guide/dubbo-proxy/index.html
index d8e82f7bedc..fc5bc5ac3cc 100644
--- a/docs/2.4.0/user-guide/dubbo-proxy/index.html
+++ b/docs/2.4.0/user-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">Dubbo Proxy | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/user-guide/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:docusau [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/user-guide/grpc-proxy/index.html b/docs/2.4.0/user-guide/grpc-proxy/index.html
index 81801ac1244..bf7f83413ed 100644
--- a/docs/2.4.0/user-guide/grpc-proxy/index.html
+++ b/docs/2.4.0/user-guide/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/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:docusauru [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/user-guide/http-proxy/index.html b/docs/2.4.0/user-guide/http-proxy/index.html
index 37ed5661815..fc2a4ebcabc 100644
--- a/docs/2.4.0/user-guide/http-proxy/index.html
+++ b/docs/2.4.0/user-guide/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/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:docusauru [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/user-guide/motan-proxy/index.html b/docs/2.4.0/user-guide/motan-proxy/index.html
index 881d35f24aa..2d5eb029767 100644
--- a/docs/2.4.0/user-guide/motan-proxy/index.html
+++ b/docs/2.4.0/user-guide/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/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:docusau [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 3f81fb47edb..4c5efeb9bbc 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 21d6b338583..8dc3645042d 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 5f511ace413..388905870e4 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 d7a085be5f1..64b034178b0 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/user-guide/sofa-rpc-proxy/index.html b/docs/2.4.0/user-guide/sofa-rpc-proxy/index.html
index b38a26fe366..2d807a080d9 100644
--- a/docs/2.4.0/user-guide/sofa-rpc-proxy/index.html
+++ b/docs/2.4.0/user-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 Proxy | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.0/user-guide/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:docus [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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/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="m34.5 [...]
-<script src="/assets/js/runtime~main.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/user-guide/spring-cloud-proxy/index.html b/docs/2.4.0/user-guide/spring-cloud-proxy/index.html
index 59d43b123c3..9de9fed83f5 100644
--- a/docs/2.4.0/user-guide/spring-cloud-proxy/index.html
+++ b/docs/2.4.0/user-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">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/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" name="doc [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.0/user-guide/tars-proxy/index.html b/docs/2.4.0/user-guide/tars-proxy/index.html
index 4555d5db517..3526ffe5d77 100644
--- a/docs/2.4.0/user-guide/tars-proxy/index.html
+++ b/docs/2.4.0/user-guide/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/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:docusauru [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 87b4edac089..5eb8a46ee2c 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 9c67965563d..0c11cc3085d 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 925afc24526..f16a389688b 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 2dee9d6a32d..fff32c24cf1 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 9aafab9cacb..036b450f1c0 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 647f3d6ef5b..e12544c2fd1 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 3d4c4f7444d..5c9d8fce0ae 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 57e6f46ba4b..0bfaace1049 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 1128986554b..92685a47abf 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 26c45f6d241..596a9ae0e79 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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.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 50ac3d7a6c0..59cf1d7b9b0 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" [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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 perission 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 co [...]
-<script src="/assets/js/runtime~main.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/design/flow-control/index.html b/docs/2.4.1/design/flow-control/index.html
index a626befdeef..488608ca618 100644
--- a/docs/2.4.1/design/flow-control/index.html
+++ b/docs/2.4.1/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.1/design/flow-control"><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:docusauru [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/design/register-center-design/index.html b/docs/2.4.1/design/register-center-design/index.html
index e1c7dec1d85..5ac5794a75b 100644
--- a/docs/2.4.1/design/register-center-design/index.html
+++ b/docs/2.4.1/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.1/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.1"><meta data-react-helmet="true" na [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/design/spi-design/index.html b/docs/2.4.1/design/spi-design/index.html
index 92a9d8f3dd5..3a01624812f 100644
--- a/docs/2.4.1/design/spi-design/index.html
+++ b/docs/2.4.1/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.1/design/spi-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" name="docsearch:docusaurus_ta [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/developer/custom-filter/index.html b/docs/2.4.1/developer/custom-filter/index.html
index 14c78f82ae3..5095d6b9e04 100644
--- a/docs/2.4.1/developer/custom-filter/index.html
+++ b/docs/2.4.1/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.1/developer/custom-filter"><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:docu [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/developer/custom-parsing-ip-and-host/index.html b/docs/2.4.1/developer/custom-parsing-ip-and-host/index.html
index 8184339f55e..a9f2c5bc4a5 100644
--- a/docs/2.4.1/developer/custom-parsing-ip-and-host/index.html
+++ b/docs/2.4.1/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.1/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.1"><meta data-reac [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/developer/custom-plugin/index.html b/docs/2.4.1/developer/custom-plugin/index.html
index 5c31a4a81dc..8bbf6905ef5 100644
--- a/docs/2.4.1/developer/custom-plugin/index.html
+++ b/docs/2.4.1/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.1/developer/custom-plugin"><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:docu [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/developer/custom-result/index.html b/docs/2.4.1/developer/custom-result/index.html
index a8ec41cbaad..da07d3f4e3c 100644
--- a/docs/2.4.1/developer/custom-result/index.html
+++ b/docs/2.4.1/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.1/developer/custom-result"><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:do [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/developer/custom-sign-algorithm/index.html b/docs/2.4.1/developer/custom-sign-algorithm/index.html
index 8e7281b7048..044c4708607 100644
--- a/docs/2.4.1/developer/custom-sign-algorithm/index.html
+++ b/docs/2.4.1/developer/custom-sign-algorithm/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 Sign Algorithm | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.1/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.1"><meta data-react-helmet="true" name [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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 [...]
</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> /**</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> * acquired sign.</span></span><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 signKey sign key</span></span><span class="token-line" style="color:#393A34"><span class="token [...]
-<script src="/assets/js/runtime~main.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/developer/developer-shenyu-client/index.html b/docs/2.4.1/developer/developer-shenyu-client/index.html
index 2faff621a4e..25b1c8b628d 100644
--- a/docs/2.4.1/developer/developer-shenyu-client/index.html
+++ b/docs/2.4.1/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.1/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.1"><meta data-react-helmet="tru [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/developer/file-and-image/index.html b/docs/2.4.1/developer/file-and-image/index.html
index 92dd0e836ff..4f1a8ea0847 100644
--- a/docs/2.4.1/developer/file-and-image/index.html
+++ b/docs/2.4.1/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.1/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.1"><meta data-react-helmet="true" name="do [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/developer/local-model/index.html b/docs/2.4.1/developer/local-model/index.html
index afa24d4f67b..f828fc04137 100644
--- a/docs/2.4.1/developer/local-model/index.html
+++ b/docs/2.4.1/developer/local-model/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">Local Model | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.1/developer/local-model"><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:docusaur [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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><h5><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="result"></a>Result<a class="hash-link" href="#result" title="Direct link to heading">#</a></h5><p>Is selector id</p><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI"><pre tabindex="0" class="prism-code language-undefined codeBlock_rtdJ thin-scroll [...]
</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="delete-selector"></a>Delete Selector<a class="hash-link" href="#delete-selector" title="Direct link to heading">#</a></h3><p>Delete selectors based on selector id and plugin name</p><h5><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="request- [...]
</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><h5><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="result-1"></a>Result<a class="hash-link" href="#result-1" title="Direct link to heading">#</a></h5><p>Is rule id</p><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI"><pre tabindex="0" class="prism-code language-undefined codeBlock_rtdJ thin-scroll [...]
-<script src="/assets/js/runtime~main.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/developer/shenyu-optimize/index.html b/docs/2.4.1/developer/shenyu-optimize/index.html
index be1c3b5e703..9d7ea12958f 100644
--- a/docs/2.4.1/developer/shenyu-optimize/index.html
+++ b/docs/2.4.1/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.1/developer/shenyu-optimize"><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.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/developer/spi/custom-load-balance/index.html b/docs/2.4.1/developer/spi/custom-load-balance/index.html
index c0f4d1301b1..c38ad641391 100644
--- a/docs/2.4.1/developer/spi/custom-load-balance/index.html
+++ b/docs/2.4.1/developer/spi/custom-load-balance/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 Load Balancer | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.1/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.1"><meta data-react-helmet="true" nam [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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 Upstream doSelect(final List<Upstream> upstreamList, final String ip) {</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> // custom load balancer</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</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"> * Custom 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"> CUSTOM(4, "custom", true),</span></span></code></pre><button type="button" aria-label="Copy code [...]
-<script src="/assets/js/runtime~main.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/developer/spi/custom-match-mode/index.html b/docs/2.4.1/developer/spi/custom-match-mode/index.html
index a762d34fc5e..e1a607b6d54 100644
--- a/docs/2.4.1/developer/spi/custom-match-mode/index.html
+++ b/docs/2.4.1/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.1/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.1"><meta data-react-helmet="true" name="do [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/developer/spi/custom-metrics-monitor/index.html b/docs/2.4.1/developer/spi/custom-metrics-monitor/index.html
index 46e6eef63fb..53380f2793b 100644
--- a/docs/2.4.1/developer/spi/custom-metrics-monitor/index.html
+++ b/docs/2.4.1/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.1/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.1"><meta data-react-helmet="true [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/developer/spi/custom-parameter-data/index.html b/docs/2.4.1/developer/spi/custom-parameter-data/index.html
index 584ad64109d..b2d2f8ce467 100644
--- a/docs/2.4.1/developer/spi/custom-parameter-data/index.html
+++ b/docs/2.4.1/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.1/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.1"><meta data-react-helmet="true" [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/developer/spi/custom-predicate-judge/index.html b/docs/2.4.1/developer/spi/custom-predicate-judge/index.html
index 0312e665caf..74ddd9febfe 100644
--- a/docs/2.4.1/developer/spi/custom-predicate-judge/index.html
+++ b/docs/2.4.1/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.1/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.1"><meta data-react-helmet="true [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/developer/spi/custom-rate-limiter/index.html b/docs/2.4.1/developer/spi/custom-rate-limiter/index.html
index 52d5e5bef11..49c1e5759a9 100644
--- a/docs/2.4.1/developer/spi/custom-rate-limiter/index.html
+++ b/docs/2.4.1/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.1/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.1"><meta data-react-helmet="true" name [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/developer/thread-model/index.html b/docs/2.4.1/developer/thread-model/index.html
index 3338cbecc7b..6357abbe326 100644
--- a/docs/2.4.1/developer/thread-model/index.html
+++ b/docs/2.4.1/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.1/developer/thread-model"><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:docusa [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/index/index.html b/docs/2.4.1/index/index.html
index 5978e14897f..f03dc793afc 100644
--- a/docs/2.4.1/index/index.html
+++ b/docs/2.4.1/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.1/index"><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:docusaurus_tag" content="do [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/plugin-center/authority-and-certification/cryptor-request-plugin/index.html b/docs/2.4.1/plugin-center/authority-and-certification/cryptor-request-plugin/index.html
index 7f1caa8e4f1..9d7c9a02007 100644
--- a/docs/2.4.1/plugin-center/authority-and-certification/cryptor-request-plugin/index.html
+++ b/docs/2.4.1/plugin-center/authority-and-certification/cryptor-request-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">CryptorRequest plugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.1/plugin-center/authority-and-certification/cryptor-request-plugin"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.1"><m [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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 [...]
Need to implement the <code>org.apache.shenyu.plugin.cryptor.strategy.CryptorStrategy</code> interface. </p><p>At the same time find the <code>org.apache.shenyu.plugin.cryptor.strategy.CryptorStrategy</code> file under <code>resources/META-INF/shenyu/</code>,
Write the name of the algorithm, and the package name of the class that implements the <code>CryptorStrategy</code> interface.</p></li><li><p>fieldNames: Matching parameter name. Support parsing multi-level json format matching, using <code>.</code> segmentation, such as data.id.</p></li></ul><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI json5"><pre tabindex="0" class="prism-code language-json5 codeBlock_rtdJ thin-scrollbar" style="color:#393A34;background-color: [...]
-<script src="/assets/js/runtime~main.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/plugin-center/authority-and-certification/cryptor-response-plugin/index.html b/docs/2.4.1/plugin-center/authority-and-certification/cryptor-response-plugin/index.html
index af6a89fd4c4..5a5ad6bed75 100644
--- a/docs/2.4.1/plugin-center/authority-and-certification/cryptor-response-plugin/index.html
+++ b/docs/2.4.1/plugin-center/authority-and-certification/cryptor-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">CryptorResponse plugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.1/plugin-center/authority-and-certification/cryptor-response-plugin"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="2.4.1"> [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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 [...]
Need to implement the <code>org.apache.shenyu.plugin.cryptor.strategy.CryptorStrategy</code> interface.</p><p>At the same time find the <code>org.apache.shenyu.plugin.cryptor.strategy.CryptorStrategy</code> file under <code>resources/META-INF/shenyu/</code>,
Write the name of the algorithm, and the package name of the class that implements the <code>CryptorStrategy</code> interface.</p></li></ul><ul><li>fieldNames: Matching parameter name. Support parsing multi-level json format matching, using <code>.</code> segmentation, such as data.id.</li></ul><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI json5"><pre tabindex="0" class="prism-code language-json5 codeBlock_rtdJ thin-scrollbar" style="color:#393A34;background-colo [...]
-<script src="/assets/js/runtime~main.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/plugin-center/authority-and-certification/jwt-plugin/index.html b/docs/2.4.1/plugin-center/authority-and-certification/jwt-plugin/index.html
index 02e3cf1d6c8..a8bc154eb71 100644
--- a/docs/2.4.1/plugin-center/authority-and-certification/jwt-plugin/index.html
+++ b/docs/2.4.1/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.1/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.1"><meta data-react-helmet=" [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/plugin-center/authority-and-certification/oauth2-plugin/index.html b/docs/2.4.1/plugin-center/authority-and-certification/oauth2-plugin/index.html
index 7a710a24bbd..3cd203dc406 100644
--- a/docs/2.4.1/plugin-center/authority-and-certification/oauth2-plugin/index.html
+++ b/docs/2.4.1/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.1/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.1"><meta data-react-he [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/plugin-center/authority-and-certification/sign-plugin/index.html b/docs/2.4.1/plugin-center/authority-and-certification/sign-plugin/index.html
index 437590b083b..c03d60758b7 100644
--- a/docs/2.4.1/plugin-center/authority-and-certification/sign-plugin/index.html
+++ b/docs/2.4.1/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.1/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.1"><meta data-react-helmet [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/plugin-center/authority-and-certification/waf-plugin/index.html b/docs/2.4.1/plugin-center/authority-and-certification/waf-plugin/index.html
index aa1181422ee..e7b746e846b 100644
--- a/docs/2.4.1/plugin-center/authority-and-certification/waf-plugin/index.html
+++ b/docs/2.4.1/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.1/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.1"><meta data-react-helmet=" [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/plugin-center/common/general-context-plugin/index.html b/docs/2.4.1/plugin-center/common/general-context-plugin/index.html
index fffd2e88e58..7f791c10bbb 100644
--- a/docs/2.4.1/plugin-center/common/general-context-plugin/index.html
+++ b/docs/2.4.1/plugin-center/common/general-context-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">GeneralContext Plugin | Apache ShenYu</title><meta data-react-helmet="true" property="og:url" content="https://shenyu.apache.org//docs/2.4.1/plugin-center/common/general-context-plugin"><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 [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/plugin-center/fault-tolerance/hystrix-plugin/index.html b/docs/2.4.1/plugin-center/fault-tolerance/hystrix-plugin/index.html
index b988437e924..51f06f7eef7 100644
--- a/docs/2.4.1/plugin-center/fault-tolerance/hystrix-plugin/index.html
+++ b/docs/2.4.1/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.1/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.1"><meta data-react-helmet="true [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/plugin-center/fault-tolerance/rate-limiter-plugin/index.html b/docs/2.4.1/plugin-center/fault-tolerance/rate-limiter-plugin/index.html
index 56d93bbefd6..72b0c90ee8a 100644
--- a/docs/2.4.1/plugin-center/fault-tolerance/rate-limiter-plugin/index.html
+++ b/docs/2.4.1/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.1/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.1"><meta data-react-hel [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/plugin-center/fault-tolerance/resilience4j-plugin/index.html b/docs/2.4.1/plugin-center/fault-tolerance/resilience4j-plugin/index.html
index 7e90c94fc3d..5596afffb2a 100644
--- a/docs/2.4.1/plugin-center/fault-tolerance/resilience4j-plugin/index.html
+++ b/docs/2.4.1/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.1/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.1"><meta data-react-he [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/plugin-center/fault-tolerance/sentinel-plugin/index.html b/docs/2.4.1/plugin-center/fault-tolerance/sentinel-plugin/index.html
index ab907e3e083..afb42c11a39 100644
--- a/docs/2.4.1/plugin-center/fault-tolerance/sentinel-plugin/index.html
+++ b/docs/2.4.1/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.1/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.1"><meta data-react-helmet="tr [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/plugin-center/http-handle/context-path-plugin/index.html b/docs/2.4.1/plugin-center/http-handle/context-path-plugin/index.html
index 34a490692ab..5c037b26362 100644
--- a/docs/2.4.1/plugin-center/http-handle/context-path-plugin/index.html
+++ b/docs/2.4.1/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.1/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.1"><meta data-react-helmet= [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/plugin-center/http-handle/modify-response-plugin/index.html b/docs/2.4.1/plugin-center/http-handle/modify-response-plugin/index.html
index 690570de114..2edbc45d33d 100644
--- a/docs/2.4.1/plugin-center/http-handle/modify-response-plugin/index.html
+++ b/docs/2.4.1/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.1/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.1"><meta data-react-h [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/plugin-center/http-handle/param-mapping-plugin/index.html b/docs/2.4.1/plugin-center/http-handle/param-mapping-plugin/index.html
index 9e742ffbabd..96556da9cc4 100644
--- a/docs/2.4.1/plugin-center/http-handle/param-mapping-plugin/index.html
+++ b/docs/2.4.1/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.1/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.1"><meta data-react-helm [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/plugin-center/http-handle/redirect-plugin/index.html b/docs/2.4.1/plugin-center/http-handle/redirect-plugin/index.html
index bdba5a1086a..1ee5e14d540 100644
--- a/docs/2.4.1/plugin-center/http-handle/redirect-plugin/index.html
+++ b/docs/2.4.1/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.1/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.1"><meta data-react-helmet="true" [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/plugin-center/http-handle/request-plugin/index.html b/docs/2.4.1/plugin-center/http-handle/request-plugin/index.html
index 634aa785d81..8650c18f104 100644
--- a/docs/2.4.1/plugin-center/http-handle/request-plugin/index.html
+++ b/docs/2.4.1/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.1/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.1"><meta data-react-helmet="true" nam [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/plugin-center/http-handle/rewrite-plugin/index.html b/docs/2.4.1/plugin-center/http-handle/rewrite-plugin/index.html
index 81682a3d002..08c0d6bed90 100644
--- a/docs/2.4.1/plugin-center/http-handle/rewrite-plugin/index.html
+++ b/docs/2.4.1/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.1/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.1"><meta data-react-helmet="true" na [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/plugin-center/observability/logging-plugin/index.html b/docs/2.4.1/plugin-center/observability/logging-plugin/index.html
index 9e7ea0ddf58..b9fc7eb6f47 100644
--- a/docs/2.4.1/plugin-center/observability/logging-plugin/index.html
+++ b/docs/2.4.1/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.1/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.1"><meta data-react-helmet="true" [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/plugin-center/observability/monitor-plugin/index.html b/docs/2.4.1/plugin-center/observability/monitor-plugin/index.html
index 79cc758998f..d00c263c707 100644
--- a/docs/2.4.1/plugin-center/observability/monitor-plugin/index.html
+++ b/docs/2.4.1/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.1/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.1"><meta data-react-helmet="true" [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/plugin-center/proxy/divide-plugin/index.html b/docs/2.4.1/plugin-center/proxy/divide-plugin/index.html
index 859e0477bb1..e4eb7d3eecb 100644
--- a/docs/2.4.1/plugin-center/proxy/divide-plugin/index.html
+++ b/docs/2.4.1/plugin-center/proxy/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.1/plugin-center/proxy/divide-plugin"><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="docs [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/plugin-center/proxy/dubbo-plugin/index.html b/docs/2.4.1/plugin-center/proxy/dubbo-plugin/index.html
index d37cbd4d6ed..296fc982894 100644
--- a/docs/2.4.1/plugin-center/proxy/dubbo-plugin/index.html
+++ b/docs/2.4.1/plugin-center/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.1/plugin-center/proxy/dubbo-plugin"><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="docsea [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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 @@
</p></li><li><p><code>gray</code>:enable gray routing.</p></li></ul></li></ul><p>Gray routing</p><p>if you want to user gray route in dubbo-plugin, you can click the <code>gray</code> button.</p><ul><li>Gray level publishing can customize and control the traffic proportion of new version applications when publishing new version applications, gradually complete the full launch of new version applications, maximize the business risk caused by new version publishing, reduce the impact surfa [...]
It should be noted that,if your business instance not use the client jar of 'shenyu-client-apache-dubbo' or 'shenyu-client-alibaba-dubbo', You should add gray node information manually on this selector page.</p><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="rule-handler"></a>Rule Handler<a class="hash-link" href="#rule-handler" title="Direct link to heading">#</a></h4><img src="/img/shenyu/plugin/dubbo/rule_en.png" width="80%" height="8 [...]
e.g. we have an interface <code>update(Integer id, String name, Integer age)</code></p><ul><li><p>Type list</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">```yaml</span></span><span class="token-line" style="color:#393A34">< [...]
-<script src="/assets/js/runtime~main.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/plugin-center/proxy/grpc-plugin/index.html b/docs/2.4.1/plugin-center/proxy/grpc-plugin/index.html
index 72d8e21e808..c8c2a272189 100644
--- a/docs/2.4.1/plugin-center/proxy/grpc-plugin/index.html
+++ b/docs/2.4.1/plugin-center/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.1/plugin-center/proxy/grpc-plugin"><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="docsearc [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/plugin-center/proxy/motan-plugin/index.html b/docs/2.4.1/plugin-center/proxy/motan-plugin/index.html
index ec558f26fdd..1731503450f 100644
--- a/docs/2.4.1/plugin-center/proxy/motan-plugin/index.html
+++ b/docs/2.4.1/plugin-center/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.1/plugin-center/proxy/motan-plugin"><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="docsea [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/plugin-center/proxy/sofa-plugin/index.html b/docs/2.4.1/plugin-center/proxy/sofa-plugin/index.html
index e7e211174f1..55066225f78 100644
--- a/docs/2.4.1/plugin-center/proxy/sofa-plugin/index.html
+++ b/docs/2.4.1/plugin-center/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.1/plugin-center/proxy/sofa-plugin"><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="docsearc [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/plugin-center/proxy/spring-cloud-plugin/index.html b/docs/2.4.1/plugin-center/proxy/spring-cloud-plugin/index.html
index a549ccd25b5..296b06f2893 100644
--- a/docs/2.4.1/plugin-center/proxy/spring-cloud-plugin/index.html
+++ b/docs/2.4.1/plugin-center/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.1/plugin-center/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.1"><meta data-react-helmet="true [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/plugin-center/proxy/tars-plugin/index.html b/docs/2.4.1/plugin-center/proxy/tars-plugin/index.html
index c409dacd9bd..1a45353f3ed 100644
--- a/docs/2.4.1/plugin-center/proxy/tars-plugin/index.html
+++ b/docs/2.4.1/plugin-center/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.1/plugin-center/proxy/tars-plugin"><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="docsearc [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.bc6125ff.js" as="script">
+<link rel="preload" href="/assets/js/main.305409c4.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.29364ae6.js"></script>
-<script src="/assets/js/main.1fdf3d3a.js"></script>
+<script src="/assets/js/runtime~main.bc6125ff.js"></script>
+<script src="/assets/js/main.305409c4.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/2.4.1/quick-start/quick-start-dubbo/index.html b/docs/2.4.1/quick-start/quick-start-dubbo/index.html
index 0f0b1b4e481..d00b386d8f1 100644
--- a/docs/2.4.1/quick-start/quick-start-dubbo/index.html
+++ b/docs/2.4.1/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.1/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.1"><meta data-react-helmet="true" name= [...]
-<link rel="preload" href="/assets/js/runtime~main.29364ae6.js" as="script">
-<link rel="preload" href="/assets/js/main.1fdf3d3a.js" as="script">
... 31089 lines suppressed ...