From 2b82768727546716df602e76a9844af5743ab060 Mon Sep 17 00:00:00 2001
From: andrew shan <45474304+andrewshan@users.noreply.github.com>
Date: Mon, 23 May 2022 19:49:21 +0800
Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E7=81=B0=E5=BA=A6?=
=?UTF-8?q?=E5=8F=91=E5=B8=83=E7=9A=84demo=20(#193)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* feat: add example for gray releasing
---
.../pom.xml | 23 ++++++
.../router-grayrelease-backend/pom.xml | 79 +++++++++++++++++++
.../src/main/docker/Dockerfile | 15 ++++
.../grayrelease/back/BackController.java | 43 ++++++++++
.../back/GrayReleaseBackendApplication.java | 29 +++++++
.../src/main/resources/bootstrap.yml | 17 ++++
.../src/main/resources/polaris.yml | 6 ++
.../router-grayrelease-frontend/pom.xml | 79 +++++++++++++++++++
.../src/main/docker/Dockerfile | 15 ++++
.../grayrelease/front/FrontController.java | 49 ++++++++++++
.../front/GrayReleaseFrontApplication.java | 33 ++++++++
.../grayrelease/front/RouterService.java | 35 ++++++++
.../src/main/resources/bootstrap.yml | 17 ++++
.../src/main/resources/polaris.yml | 6 ++
.../router-grayrelease-gateway/pom.xml | 62 +++++++++++++++
.../src/main/docker/Dockerfile | 15 ++++
.../gateway/GatewayController.java | 47 +++++++++++
.../GrayReleaseGatewayApplication.java | 33 ++++++++
.../grayrelease/gateway/RouterService.java | 35 ++++++++
.../src/main/resources/bootstrap.yml | 17 ++++
.../src/main/resources/polaris.yml | 6 ++
.../router-grayrelease-middle/pom.xml | 79 +++++++++++++++++++
.../src/main/docker/Dockerfile | 15 ++++
.../middle/GrayReleaseMiddleApplication.java | 33 ++++++++
.../grayrelease/middle/MiddleController.java | 49 ++++++++++++
.../grayrelease/middle/RouterService.java | 35 ++++++++
.../src/main/resources/bootstrap.yml | 17 ++++
.../src/main/resources/polaris.yml | 6 ++
spring-cloud-tencent-examples/pom.xml | 1 +
29 files changed, 896 insertions(+)
create mode 100644 spring-cloud-tencent-examples/polaris-router-grayrelease-example/pom.xml
create mode 100644 spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-backend/pom.xml
create mode 100644 spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-backend/src/main/docker/Dockerfile
create mode 100644 spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-backend/src/main/java/com/tencent/cloud/polaris/router/grayrelease/back/BackController.java
create mode 100644 spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-backend/src/main/java/com/tencent/cloud/polaris/router/grayrelease/back/GrayReleaseBackendApplication.java
create mode 100644 spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-backend/src/main/resources/bootstrap.yml
create mode 100644 spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-backend/src/main/resources/polaris.yml
create mode 100644 spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-frontend/pom.xml
create mode 100644 spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-frontend/src/main/docker/Dockerfile
create mode 100644 spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-frontend/src/main/java/com/tencent/cloud/polaris/router/grayrelease/front/FrontController.java
create mode 100644 spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-frontend/src/main/java/com/tencent/cloud/polaris/router/grayrelease/front/GrayReleaseFrontApplication.java
create mode 100644 spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-frontend/src/main/java/com/tencent/cloud/polaris/router/grayrelease/front/RouterService.java
create mode 100644 spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-frontend/src/main/resources/bootstrap.yml
create mode 100644 spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-frontend/src/main/resources/polaris.yml
create mode 100644 spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-gateway/pom.xml
create mode 100644 spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-gateway/src/main/docker/Dockerfile
create mode 100644 spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-gateway/src/main/java/com/tencent/cloud/polaris/router/grayrelease/gateway/GatewayController.java
create mode 100644 spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-gateway/src/main/java/com/tencent/cloud/polaris/router/grayrelease/gateway/GrayReleaseGatewayApplication.java
create mode 100644 spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-gateway/src/main/java/com/tencent/cloud/polaris/router/grayrelease/gateway/RouterService.java
create mode 100644 spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-gateway/src/main/resources/bootstrap.yml
create mode 100644 spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-gateway/src/main/resources/polaris.yml
create mode 100644 spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-middle/pom.xml
create mode 100644 spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-middle/src/main/docker/Dockerfile
create mode 100644 spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-middle/src/main/java/com/tencent/cloud/polaris/router/grayrelease/middle/GrayReleaseMiddleApplication.java
create mode 100644 spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-middle/src/main/java/com/tencent/cloud/polaris/router/grayrelease/middle/MiddleController.java
create mode 100644 spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-middle/src/main/java/com/tencent/cloud/polaris/router/grayrelease/middle/RouterService.java
create mode 100644 spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-middle/src/main/resources/bootstrap.yml
create mode 100644 spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-middle/src/main/resources/polaris.yml
diff --git a/spring-cloud-tencent-examples/polaris-router-grayrelease-example/pom.xml b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/pom.xml
new file mode 100644
index 000000000..5ef821730
--- /dev/null
+++ b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/pom.xml
@@ -0,0 +1,23 @@
+
+
+
+ spring-cloud-tencent-examples
+ com.tencent.cloud
+ ${revision}
+ ../pom.xml
+
+ 4.0.0
+
+ polaris-router-grayrelease-example
+ pom
+ Spring Cloud Tencent Polaris Router GrayRelease Example
+ Example of Spring Cloud Tencent Polaris Router GrayRelease
+
+ router-grayrelease-gateway
+ router-grayrelease-frontend
+ router-grayrelease-middle
+ router-grayrelease-backend
+
+
\ No newline at end of file
diff --git a/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-backend/pom.xml b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-backend/pom.xml
new file mode 100644
index 000000000..5be887583
--- /dev/null
+++ b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-backend/pom.xml
@@ -0,0 +1,79 @@
+
+
+
+ polaris-router-grayrelease-example
+ com.tencent.cloud
+ ${revision}
+ ../pom.xml
+
+ 4.0.0
+
+ router-grayrelease-backend
+
+
+
+ spring-cloud-starter-tencent-polaris-discovery
+ com.tencent.cloud
+
+
+
+ com.tencent.cloud
+ spring-cloud-starter-tencent-polaris-router
+
+
+
+ spring-cloud-starter-tencent-polaris-circuitbreaker
+ com.tencent.cloud
+
+
+
+ com.tencent.cloud
+ spring-cloud-starter-tencent-metadata-transfer
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+ org.springframework.cloud
+ spring-cloud-starter-openfeign
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ repackage
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-source-plugin
+ 3.2.0
+
+
+ attach-sources
+
+ jar
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-backend/src/main/docker/Dockerfile b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-backend/src/main/docker/Dockerfile
new file mode 100644
index 000000000..482d43ee9
--- /dev/null
+++ b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-backend/src/main/docker/Dockerfile
@@ -0,0 +1,15 @@
+############################################################
+# Dockerfile to build polaris-java quickstart example provider
+
+# 1. You need to build the binary from the source code,
+# use `mvn clean install` to build the binary.
+# 2. You need to copy the quickstart-example-provider-*.jar to this directory
+# 3. Replace the ${VERSION} to the real version of the project
+
+############################################################
+
+FROM java:8
+
+ADD router-grayrelease-backend-1.5.0-Hoxton.SR9-SNAPSHOT.jar /root/app.jar
+
+ENTRYPOINT ["java","-jar","/root/app.jar"]
\ No newline at end of file
diff --git a/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-backend/src/main/java/com/tencent/cloud/polaris/router/grayrelease/back/BackController.java b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-backend/src/main/java/com/tencent/cloud/polaris/router/grayrelease/back/BackController.java
new file mode 100644
index 000000000..7d71eab98
--- /dev/null
+++ b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-backend/src/main/java/com/tencent/cloud/polaris/router/grayrelease/back/BackController.java
@@ -0,0 +1,43 @@
+/*
+ * Tencent is pleased to support the open source community by making Spring Cloud Tencent available.
+ *
+ * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
+ *
+ * Licensed under the BSD 3-Clause License (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://opensource.org/licenses/BSD-3-Clause
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed
+ * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+ * CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+
+package com.tencent.cloud.polaris.router.grayrelease.back;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/router/gray")
+public class BackController {
+
+ @Autowired
+ private Environment environment;
+
+ /**
+ * Get information of callee.
+ * @return information of callee
+ */
+ @GetMapping("/rest")
+ public String rest() {
+ String env = System.getenv("SCT_METADATA_CONTENT_env");
+ String appName = environment.getProperty("spring.application.name");
+ return appName + "[" + env + "]";
+ }
+}
diff --git a/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-backend/src/main/java/com/tencent/cloud/polaris/router/grayrelease/back/GrayReleaseBackendApplication.java b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-backend/src/main/java/com/tencent/cloud/polaris/router/grayrelease/back/GrayReleaseBackendApplication.java
new file mode 100644
index 000000000..a70a2ab39
--- /dev/null
+++ b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-backend/src/main/java/com/tencent/cloud/polaris/router/grayrelease/back/GrayReleaseBackendApplication.java
@@ -0,0 +1,29 @@
+/*
+ * Tencent is pleased to support the open source community by making Spring Cloud Tencent available.
+ *
+ * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
+ *
+ * Licensed under the BSD 3-Clause License (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://opensource.org/licenses/BSD-3-Clause
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed
+ * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+ * CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+
+package com.tencent.cloud.polaris.router.grayrelease.back;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class GrayReleaseBackendApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(GrayReleaseBackendApplication.class, args);
+ }
+}
diff --git a/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-backend/src/main/resources/bootstrap.yml b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-backend/src/main/resources/bootstrap.yml
new file mode 100644
index 000000000..fe8933908
--- /dev/null
+++ b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-backend/src/main/resources/bootstrap.yml
@@ -0,0 +1,17 @@
+server:
+ session-timeout: 1800
+ port: 59002
+spring:
+ application:
+ name: gray-release-back
+ cloud:
+ polaris:
+ address: ${polaris_address}
+ namespace: default
+ enabled: true
+ discovery:
+ service-list-refresh-interval: 1000
+logging:
+ level:
+ org.springframework.cloud.gateway: info
+ com.tencent.cloud.polaris: debug
diff --git a/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-backend/src/main/resources/polaris.yml b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-backend/src/main/resources/polaris.yml
new file mode 100644
index 000000000..7b7363b0a
--- /dev/null
+++ b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-backend/src/main/resources/polaris.yml
@@ -0,0 +1,6 @@
+global:
+ statReporter:
+ enable: true
+ plugin:
+ prometheus:
+ pushgatewayAddress: ${prometheus_address}
\ No newline at end of file
diff --git a/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-frontend/pom.xml b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-frontend/pom.xml
new file mode 100644
index 000000000..bae39c67b
--- /dev/null
+++ b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-frontend/pom.xml
@@ -0,0 +1,79 @@
+
+
+
+ polaris-router-grayrelease-example
+ com.tencent.cloud
+ ${revision}
+ ../pom.xml
+
+ 4.0.0
+
+ router-grayrelease-frontend
+
+
+
+ spring-cloud-starter-tencent-polaris-discovery
+ com.tencent.cloud
+
+
+
+ com.tencent.cloud
+ spring-cloud-starter-tencent-polaris-router
+
+
+
+ spring-cloud-starter-tencent-polaris-circuitbreaker
+ com.tencent.cloud
+
+
+
+ com.tencent.cloud
+ spring-cloud-starter-tencent-metadata-transfer
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+ org.springframework.cloud
+ spring-cloud-starter-openfeign
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ repackage
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-source-plugin
+ 3.2.0
+
+
+ attach-sources
+
+ jar
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-frontend/src/main/docker/Dockerfile b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-frontend/src/main/docker/Dockerfile
new file mode 100644
index 000000000..7aec6aad2
--- /dev/null
+++ b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-frontend/src/main/docker/Dockerfile
@@ -0,0 +1,15 @@
+############################################################
+# Dockerfile to build polaris-java quickstart example provider
+
+# 1. You need to build the binary from the source code,
+# use `mvn clean install` to build the binary.
+# 2. You need to copy the quickstart-example-provider-*.jar to this directory
+# 3. Replace the ${VERSION} to the real version of the project
+
+############################################################
+
+FROM java:8
+
+ADD router-grayrelease-frontend-1.5.0-Hoxton.SR9-SNAPSHOT.jar /root/app.jar
+
+ENTRYPOINT ["java","-jar","/root/app.jar"]
\ No newline at end of file
diff --git a/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-frontend/src/main/java/com/tencent/cloud/polaris/router/grayrelease/front/FrontController.java b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-frontend/src/main/java/com/tencent/cloud/polaris/router/grayrelease/front/FrontController.java
new file mode 100644
index 000000000..4274744a6
--- /dev/null
+++ b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-frontend/src/main/java/com/tencent/cloud/polaris/router/grayrelease/front/FrontController.java
@@ -0,0 +1,49 @@
+/*
+ * Tencent is pleased to support the open source community by making Spring Cloud Tencent available.
+ *
+ * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
+ *
+ * Licensed under the BSD 3-Clause License (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://opensource.org/licenses/BSD-3-Clause
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed
+ * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+ * CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ *
+ */
+
+package com.tencent.cloud.polaris.router.grayrelease.front;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/router/gray")
+public class FrontController {
+
+ @Autowired
+ private Environment environment;
+
+ @Autowired
+ private RouterService routerService;
+
+ /**
+ * Get information of callee.
+ * @return information of callee
+ */
+ @GetMapping("/rest")
+ public String rest() {
+ String env = System.getenv("SCT_METADATA_CONTENT_env");
+ String appName = environment.getProperty("spring.application.name");
+ String curName = appName + "[" + env + "]";
+ String resp = routerService.rest();
+ return curName + " -> " + resp;
+ }
+}
diff --git a/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-frontend/src/main/java/com/tencent/cloud/polaris/router/grayrelease/front/GrayReleaseFrontApplication.java b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-frontend/src/main/java/com/tencent/cloud/polaris/router/grayrelease/front/GrayReleaseFrontApplication.java
new file mode 100644
index 000000000..6d8653eeb
--- /dev/null
+++ b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-frontend/src/main/java/com/tencent/cloud/polaris/router/grayrelease/front/GrayReleaseFrontApplication.java
@@ -0,0 +1,33 @@
+/*
+ * Tencent is pleased to support the open source community by making Spring Cloud Tencent available.
+ *
+ * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
+ *
+ * Licensed under the BSD 3-Clause License (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://opensource.org/licenses/BSD-3-Clause
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed
+ * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+ * CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+
+package com.tencent.cloud.polaris.router.grayrelease.front;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+
+@SpringBootApplication
+@EnableDiscoveryClient
+@EnableFeignClients
+public class GrayReleaseFrontApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(GrayReleaseFrontApplication.class, args);
+ }
+}
diff --git a/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-frontend/src/main/java/com/tencent/cloud/polaris/router/grayrelease/front/RouterService.java b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-frontend/src/main/java/com/tencent/cloud/polaris/router/grayrelease/front/RouterService.java
new file mode 100644
index 000000000..00c7d5b9a
--- /dev/null
+++ b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-frontend/src/main/java/com/tencent/cloud/polaris/router/grayrelease/front/RouterService.java
@@ -0,0 +1,35 @@
+/*
+ * Tencent is pleased to support the open source community by making Spring Cloud Tencent available.
+ *
+ * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
+ *
+ * Licensed under the BSD 3-Clause License (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://opensource.org/licenses/BSD-3-Clause
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed
+ * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+ * CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ *
+ */
+
+package com.tencent.cloud.polaris.router.grayrelease.front;
+
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+
+/**
+ * Router callee feign client.
+ *
+ * @author lepdou 2022-04-06
+ */
+@FeignClient("gray-release-middle")
+public interface RouterService {
+
+ @GetMapping("/router/gray/rest")
+ String rest();
+
+}
diff --git a/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-frontend/src/main/resources/bootstrap.yml b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-frontend/src/main/resources/bootstrap.yml
new file mode 100644
index 000000000..a8aa693b9
--- /dev/null
+++ b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-frontend/src/main/resources/bootstrap.yml
@@ -0,0 +1,17 @@
+server:
+ session-timeout: 1800
+ port: 59000
+spring:
+ application:
+ name: gray-release-front
+ cloud:
+ polaris:
+ address: ${polaris_address}
+ namespace: default
+ enabled: true
+ discovery:
+ service-list-refresh-interval: 1000
+logging:
+ level:
+ org.springframework.cloud.gateway: info
+ com.tencent.cloud.polaris: debug
diff --git a/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-frontend/src/main/resources/polaris.yml b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-frontend/src/main/resources/polaris.yml
new file mode 100644
index 000000000..7b7363b0a
--- /dev/null
+++ b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-frontend/src/main/resources/polaris.yml
@@ -0,0 +1,6 @@
+global:
+ statReporter:
+ enable: true
+ plugin:
+ prometheus:
+ pushgatewayAddress: ${prometheus_address}
\ No newline at end of file
diff --git a/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-gateway/pom.xml b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-gateway/pom.xml
new file mode 100644
index 000000000..f8dc0ea3d
--- /dev/null
+++ b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-gateway/pom.xml
@@ -0,0 +1,62 @@
+
+
+
+ polaris-router-grayrelease-example
+ com.tencent.cloud
+ ${revision}
+ ../pom.xml
+
+ 4.0.0
+
+ router-grayrelease-gateway
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ spring-cloud-starter-tencent-polaris-discovery
+ com.tencent.cloud
+
+
+
+ com.tencent.cloud
+ spring-cloud-starter-tencent-polaris-router
+
+
+
+ spring-cloud-starter-tencent-polaris-circuitbreaker
+ com.tencent.cloud
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-openfeign
+
+
+
+ com.tencent.cloud
+ spring-cloud-starter-tencent-metadata-transfer
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ repackage
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-gateway/src/main/docker/Dockerfile b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-gateway/src/main/docker/Dockerfile
new file mode 100644
index 000000000..315baa834
--- /dev/null
+++ b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-gateway/src/main/docker/Dockerfile
@@ -0,0 +1,15 @@
+############################################################
+# Dockerfile to build polaris-java quickstart example provider
+
+# 1. You need to build the binary from the source code,
+# use `mvn clean install` to build the binary.
+# 2. You need to copy the quickstart-example-provider-*.jar to this directory
+# 3. Replace the ${VERSION} to the real version of the project
+
+############################################################
+
+FROM java:8
+
+ADD router-grayrelease-gateway-1.5.0-Hoxton.SR9-SNAPSHOT.jar /root/app.jar
+
+ENTRYPOINT ["java","-jar","/root/app.jar"]
\ No newline at end of file
diff --git a/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-gateway/src/main/java/com/tencent/cloud/polaris/router/grayrelease/gateway/GatewayController.java b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-gateway/src/main/java/com/tencent/cloud/polaris/router/grayrelease/gateway/GatewayController.java
new file mode 100644
index 000000000..1486d334c
--- /dev/null
+++ b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-gateway/src/main/java/com/tencent/cloud/polaris/router/grayrelease/gateway/GatewayController.java
@@ -0,0 +1,47 @@
+/*
+ * Tencent is pleased to support the open source community by making Spring Cloud Tencent available.
+ *
+ * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
+ *
+ * Licensed under the BSD 3-Clause License (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://opensource.org/licenses/BSD-3-Clause
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed
+ * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+ * CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ *
+ */
+
+package com.tencent.cloud.polaris.router.grayrelease.gateway;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/router/gray")
+public class GatewayController {
+
+ @Autowired
+ private Environment environment;
+
+ @Autowired
+ private RouterService routerService;
+
+ /**
+ * Get information of callee.
+ * @return information of callee
+ */
+ @GetMapping("/entry")
+ public String rest() {
+ String appName = environment.getProperty("spring.application.name");
+ String resp = routerService.rest();
+ return appName + " -> " + resp;
+ }
+}
diff --git a/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-gateway/src/main/java/com/tencent/cloud/polaris/router/grayrelease/gateway/GrayReleaseGatewayApplication.java b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-gateway/src/main/java/com/tencent/cloud/polaris/router/grayrelease/gateway/GrayReleaseGatewayApplication.java
new file mode 100644
index 000000000..a7b5a115e
--- /dev/null
+++ b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-gateway/src/main/java/com/tencent/cloud/polaris/router/grayrelease/gateway/GrayReleaseGatewayApplication.java
@@ -0,0 +1,33 @@
+/*
+ * Tencent is pleased to support the open source community by making Spring Cloud Tencent available.
+ *
+ * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
+ *
+ * Licensed under the BSD 3-Clause License (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://opensource.org/licenses/BSD-3-Clause
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed
+ * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+ * CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+
+package com.tencent.cloud.polaris.router.grayrelease.gateway;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+
+@SpringBootApplication
+@EnableDiscoveryClient
+@EnableFeignClients
+public class GrayReleaseGatewayApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(GrayReleaseGatewayApplication.class, args);
+ }
+}
diff --git a/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-gateway/src/main/java/com/tencent/cloud/polaris/router/grayrelease/gateway/RouterService.java b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-gateway/src/main/java/com/tencent/cloud/polaris/router/grayrelease/gateway/RouterService.java
new file mode 100644
index 000000000..95f066f8a
--- /dev/null
+++ b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-gateway/src/main/java/com/tencent/cloud/polaris/router/grayrelease/gateway/RouterService.java
@@ -0,0 +1,35 @@
+/*
+ * Tencent is pleased to support the open source community by making Spring Cloud Tencent available.
+ *
+ * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
+ *
+ * Licensed under the BSD 3-Clause License (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://opensource.org/licenses/BSD-3-Clause
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed
+ * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+ * CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ *
+ */
+
+package com.tencent.cloud.polaris.router.grayrelease.gateway;
+
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+
+/**
+ * Router callee feign client.
+ *
+ * @author lepdou 2022-04-06
+ */
+@FeignClient("gray-release-front")
+public interface RouterService {
+
+ @GetMapping("/router/gray/rest")
+ String rest();
+
+}
diff --git a/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-gateway/src/main/resources/bootstrap.yml b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-gateway/src/main/resources/bootstrap.yml
new file mode 100644
index 000000000..53f31c795
--- /dev/null
+++ b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-gateway/src/main/resources/bootstrap.yml
@@ -0,0 +1,17 @@
+server:
+ session-timeout: 1800
+ port: 59100
+spring:
+ application:
+ name: gray-release-gateway
+ cloud:
+ polaris:
+ address: ${polaris_address}
+ namespace: default
+ enabled: true
+ discovery:
+ service-list-refresh-interval: 1000
+logging:
+ level:
+ org.springframework.cloud.gateway: info
+ com.tencent.cloud.polaris: debug
diff --git a/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-gateway/src/main/resources/polaris.yml b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-gateway/src/main/resources/polaris.yml
new file mode 100644
index 000000000..7b7363b0a
--- /dev/null
+++ b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-gateway/src/main/resources/polaris.yml
@@ -0,0 +1,6 @@
+global:
+ statReporter:
+ enable: true
+ plugin:
+ prometheus:
+ pushgatewayAddress: ${prometheus_address}
\ No newline at end of file
diff --git a/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-middle/pom.xml b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-middle/pom.xml
new file mode 100644
index 000000000..90fbd3e11
--- /dev/null
+++ b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-middle/pom.xml
@@ -0,0 +1,79 @@
+
+
+
+ polaris-router-grayrelease-example
+ com.tencent.cloud
+ ${revision}
+ ../pom.xml
+
+ 4.0.0
+
+ router-grayrelease-middle
+
+
+
+ spring-cloud-starter-tencent-polaris-discovery
+ com.tencent.cloud
+
+
+
+ com.tencent.cloud
+ spring-cloud-starter-tencent-polaris-router
+
+
+
+ spring-cloud-starter-tencent-polaris-circuitbreaker
+ com.tencent.cloud
+
+
+
+ com.tencent.cloud
+ spring-cloud-starter-tencent-metadata-transfer
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+ org.springframework.cloud
+ spring-cloud-starter-openfeign
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ repackage
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-source-plugin
+ 3.2.0
+
+
+ attach-sources
+
+ jar
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-middle/src/main/docker/Dockerfile b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-middle/src/main/docker/Dockerfile
new file mode 100644
index 000000000..33d9b4606
--- /dev/null
+++ b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-middle/src/main/docker/Dockerfile
@@ -0,0 +1,15 @@
+############################################################
+# Dockerfile to build polaris-java quickstart example provider
+
+# 1. You need to build the binary from the source code,
+# use `mvn clean install` to build the binary.
+# 2. You need to copy the quickstart-example-provider-*.jar to this directory
+# 3. Replace the ${VERSION} to the real version of the project
+
+############################################################
+
+FROM java:8
+
+ADD router-grayrelease-middle-1.5.0-Hoxton.SR9-SNAPSHOT.jar /root/app.jar
+
+ENTRYPOINT ["java","-jar","/root/app.jar"]
\ No newline at end of file
diff --git a/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-middle/src/main/java/com/tencent/cloud/polaris/router/grayrelease/middle/GrayReleaseMiddleApplication.java b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-middle/src/main/java/com/tencent/cloud/polaris/router/grayrelease/middle/GrayReleaseMiddleApplication.java
new file mode 100644
index 000000000..4857030e2
--- /dev/null
+++ b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-middle/src/main/java/com/tencent/cloud/polaris/router/grayrelease/middle/GrayReleaseMiddleApplication.java
@@ -0,0 +1,33 @@
+/*
+ * Tencent is pleased to support the open source community by making Spring Cloud Tencent available.
+ *
+ * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
+ *
+ * Licensed under the BSD 3-Clause License (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://opensource.org/licenses/BSD-3-Clause
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed
+ * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+ * CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+
+package com.tencent.cloud.polaris.router.grayrelease.middle;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+
+@SpringBootApplication
+@EnableDiscoveryClient
+@EnableFeignClients
+public class GrayReleaseMiddleApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(GrayReleaseMiddleApplication.class, args);
+ }
+}
diff --git a/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-middle/src/main/java/com/tencent/cloud/polaris/router/grayrelease/middle/MiddleController.java b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-middle/src/main/java/com/tencent/cloud/polaris/router/grayrelease/middle/MiddleController.java
new file mode 100644
index 000000000..85fe8ddf8
--- /dev/null
+++ b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-middle/src/main/java/com/tencent/cloud/polaris/router/grayrelease/middle/MiddleController.java
@@ -0,0 +1,49 @@
+/*
+ * Tencent is pleased to support the open source community by making Spring Cloud Tencent available.
+ *
+ * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
+ *
+ * Licensed under the BSD 3-Clause License (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://opensource.org/licenses/BSD-3-Clause
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed
+ * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+ * CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+
+
+package com.tencent.cloud.polaris.router.grayrelease.middle;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/router/gray")
+public class MiddleController {
+
+ @Autowired
+ private Environment environment;
+
+ @Autowired
+ private RouterService routerService;
+
+ /**
+ * Get information of callee.
+ * @return information of callee
+ */
+ @GetMapping("/rest")
+ public String rest() {
+ String env = System.getenv("SCT_METADATA_CONTENT_env");
+ String appName = environment.getProperty("spring.application.name");
+ String curName = appName + "[" + env + "]";
+ String resp = routerService.rest();
+ return curName + " -> " + resp;
+ }
+}
diff --git a/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-middle/src/main/java/com/tencent/cloud/polaris/router/grayrelease/middle/RouterService.java b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-middle/src/main/java/com/tencent/cloud/polaris/router/grayrelease/middle/RouterService.java
new file mode 100644
index 000000000..32225209c
--- /dev/null
+++ b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-middle/src/main/java/com/tencent/cloud/polaris/router/grayrelease/middle/RouterService.java
@@ -0,0 +1,35 @@
+/*
+ * Tencent is pleased to support the open source community by making Spring Cloud Tencent available.
+ *
+ * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
+ *
+ * Licensed under the BSD 3-Clause License (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://opensource.org/licenses/BSD-3-Clause
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed
+ * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+ * CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ *
+ */
+
+package com.tencent.cloud.polaris.router.grayrelease.middle;
+
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+
+/**
+ * Router callee feign client.
+ *
+ * @author lepdou 2022-04-06
+ */
+@FeignClient("gray-release-back")
+public interface RouterService {
+
+ @GetMapping("/router/gray/rest")
+ String rest();
+
+}
diff --git a/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-middle/src/main/resources/bootstrap.yml b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-middle/src/main/resources/bootstrap.yml
new file mode 100644
index 000000000..a54049bc9
--- /dev/null
+++ b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-middle/src/main/resources/bootstrap.yml
@@ -0,0 +1,17 @@
+server:
+ session-timeout: 1800
+ port: 59001
+spring:
+ application:
+ name: gray-release-middle
+ cloud:
+ polaris:
+ address: ${polaris_address}
+ namespace: default
+ enabled: true
+ discovery:
+ service-list-refresh-interval: 1000
+logging:
+ level:
+ org.springframework.cloud.gateway: info
+ com.tencent.cloud.polaris: debug
diff --git a/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-middle/src/main/resources/polaris.yml b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-middle/src/main/resources/polaris.yml
new file mode 100644
index 000000000..7b7363b0a
--- /dev/null
+++ b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-middle/src/main/resources/polaris.yml
@@ -0,0 +1,6 @@
+global:
+ statReporter:
+ enable: true
+ plugin:
+ prometheus:
+ pushgatewayAddress: ${prometheus_address}
\ No newline at end of file
diff --git a/spring-cloud-tencent-examples/pom.xml b/spring-cloud-tencent-examples/pom.xml
index 2897d6211..a4c6c9bda 100644
--- a/spring-cloud-tencent-examples/pom.xml
+++ b/spring-cloud-tencent-examples/pom.xml
@@ -23,6 +23,7 @@
polaris-config-example
polaris-router-example
metadata-transfer-example
+ polaris-router-grayrelease-example