From dae4726f001020a75362e0958fce4726f24ad40c Mon Sep 17 00:00:00 2001 From: misselvexu Date: Wed, 13 Jul 2022 17:15:06 +0800 Subject: [PATCH] Add disposable samples . --- .../metadata/MetadataContextHolder.java | 6 ++ .../callee/MetadataCallee2Service.java | 41 ++++++++++++ .../MetadataCallee2ServiceFallback.java | 39 +++++++++++ .../callee/MetadataCalleeController.java | 18 +++++ .../service/callee/MetadataCalleeService.java | 11 ++++ .../src/main/resources/bootstrap.yml | 20 +++++- .../metadata-callee-service2/pom.xml | 51 +++++++++++++++ .../callee/MetadataCalleeController.java | 65 +++++++++++++++++++ .../callee/MetadataCalleeService2.java | 35 ++++++++++ .../src/main/resources/bootstrap.yml | 20 ++++++ .../src/main/resources/bootstrap.yml | 7 +- .../metadata-transfer-example/pom.xml | 1 + 12 files changed, 312 insertions(+), 2 deletions(-) create mode 100644 spring-cloud-tencent-examples/metadata-transfer-example/metadata-callee-service/src/main/java/com/tencent/cloud/metadata/service/callee/MetadataCallee2Service.java create mode 100644 spring-cloud-tencent-examples/metadata-transfer-example/metadata-callee-service/src/main/java/com/tencent/cloud/metadata/service/callee/MetadataCallee2ServiceFallback.java create mode 100644 spring-cloud-tencent-examples/metadata-transfer-example/metadata-callee-service2/pom.xml create mode 100644 spring-cloud-tencent-examples/metadata-transfer-example/metadata-callee-service2/src/main/java/com/tencent/cloud/metadata/service/callee/MetadataCalleeController.java create mode 100644 spring-cloud-tencent-examples/metadata-transfer-example/metadata-callee-service2/src/main/java/com/tencent/cloud/metadata/service/callee/MetadataCalleeService2.java create mode 100644 spring-cloud-tencent-examples/metadata-transfer-example/metadata-callee-service2/src/main/resources/bootstrap.yml diff --git a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/metadata/MetadataContextHolder.java b/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/metadata/MetadataContextHolder.java index e4ac40359..17bce8e04 100644 --- a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/metadata/MetadataContextHolder.java +++ b/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/metadata/MetadataContextHolder.java @@ -18,6 +18,7 @@ package com.tencent.cloud.common.metadata; +import java.net.URLEncoder; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; @@ -34,7 +35,9 @@ import org.springframework.util.StringUtils; import static com.tencent.cloud.common.constant.ContextConstant.UTF_8; import static com.tencent.cloud.common.constant.MetadataConstant.INTERNAL_METADATA_DISPOSABLE; import static com.tencent.cloud.common.util.JacksonUtils.deserialize2Map; +import static com.tencent.cloud.common.util.JacksonUtils.serialize2Json; import static java.net.URLDecoder.decode; +import static java.net.URLEncoder.encode; /** * Metadata Context Holder. @@ -121,11 +124,14 @@ public final class MetadataContextHolder { it.remove(); } } + // reset + dynamicTransitiveMetadata.put(INTERNAL_METADATA_DISPOSABLE, encode(serialize2Json(keyStatus), UTF_8)); } } catch (Exception e) { LOGGER.error("Runtime system does not support utf-8 coding.", e); } + } Map staticTransitiveMetadata = diff --git a/spring-cloud-tencent-examples/metadata-transfer-example/metadata-callee-service/src/main/java/com/tencent/cloud/metadata/service/callee/MetadataCallee2Service.java b/spring-cloud-tencent-examples/metadata-transfer-example/metadata-callee-service/src/main/java/com/tencent/cloud/metadata/service/callee/MetadataCallee2Service.java new file mode 100644 index 000000000..221e619f8 --- /dev/null +++ b/spring-cloud-tencent-examples/metadata-transfer-example/metadata-callee-service/src/main/java/com/tencent/cloud/metadata/service/callee/MetadataCallee2Service.java @@ -0,0 +1,41 @@ +/* + * 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.metadata.service.callee; + +import java.util.Map; + +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; + +/** + * Metadata callee feign client. + * + * @author Palmer Xu + */ +@FeignClient(value = "MetadataCalleeService2", + fallback = MetadataCallee2ServiceFallback.class) +public interface MetadataCallee2Service { + + /** + * Get information of callee. + * @return information of callee + */ + @GetMapping("/metadata/service/callee2/info") + Map info(); + +} diff --git a/spring-cloud-tencent-examples/metadata-transfer-example/metadata-callee-service/src/main/java/com/tencent/cloud/metadata/service/callee/MetadataCallee2ServiceFallback.java b/spring-cloud-tencent-examples/metadata-transfer-example/metadata-callee-service/src/main/java/com/tencent/cloud/metadata/service/callee/MetadataCallee2ServiceFallback.java new file mode 100644 index 000000000..b18ce6de3 --- /dev/null +++ b/spring-cloud-tencent-examples/metadata-transfer-example/metadata-callee-service/src/main/java/com/tencent/cloud/metadata/service/callee/MetadataCallee2ServiceFallback.java @@ -0,0 +1,39 @@ +/* + * 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.metadata.service.callee; + +import java.util.Map; + +import com.google.common.collect.Maps; + +import org.springframework.stereotype.Component; + +/** + * Metadata callee feign client fallback. + * + * @author Palmer Xu + */ +@Component +public class MetadataCallee2ServiceFallback implements MetadataCallee2Service { + + @Override + public Map info() { + return Maps.newHashMap(); + } + +} diff --git a/spring-cloud-tencent-examples/metadata-transfer-example/metadata-callee-service/src/main/java/com/tencent/cloud/metadata/service/callee/MetadataCalleeController.java b/spring-cloud-tencent-examples/metadata-transfer-example/metadata-callee-service/src/main/java/com/tencent/cloud/metadata/service/callee/MetadataCalleeController.java index 4966e9bdc..51ba2e9d7 100644 --- a/spring-cloud-tencent-examples/metadata-transfer-example/metadata-callee-service/src/main/java/com/tencent/cloud/metadata/service/callee/MetadataCalleeController.java +++ b/spring-cloud-tencent-examples/metadata-transfer-example/metadata-callee-service/src/main/java/com/tencent/cloud/metadata/service/callee/MetadataCalleeController.java @@ -28,6 +28,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.client.RestTemplate; /** * Metadata callee controller. @@ -43,6 +44,15 @@ public class MetadataCalleeController { @Value("${server.port:0}") private int port; + private final MetadataCallee2Service metadataCallee2Service; + + private final RestTemplate restTemplate; + + public MetadataCalleeController(MetadataCallee2Service metadataCallee2Service, RestTemplate restTemplate) { + this.metadataCallee2Service = metadataCallee2Service; + this.restTemplate = restTemplate; + } + /** * Get information of callee. * @return information of callee @@ -51,6 +61,14 @@ public class MetadataCalleeController { public Map info() { LOG.info("Metadata Service Callee [{}] is called.", port); + // Call remote service with RestTemplate + Map calleeMetadata = restTemplate.getForObject( + "http://MetadataCalleeService2/metadata/service/callee2/info", + Map.class); + calleeMetadata.forEach((key, value) -> { + LOG.info("Callee2 Metadata (Key-Value): {} : {}", key, value); + }); + // Get Custom Metadata From Context MetadataContext context = MetadataContextHolder.get(); Map customMetadataMap = context.getFragmentContext(MetadataContext.FRAGMENT_TRANSITIVE); diff --git a/spring-cloud-tencent-examples/metadata-transfer-example/metadata-callee-service/src/main/java/com/tencent/cloud/metadata/service/callee/MetadataCalleeService.java b/spring-cloud-tencent-examples/metadata-transfer-example/metadata-callee-service/src/main/java/com/tencent/cloud/metadata/service/callee/MetadataCalleeService.java index 06771a5e8..6858ada26 100644 --- a/spring-cloud-tencent-examples/metadata-transfer-example/metadata-callee-service/src/main/java/com/tencent/cloud/metadata/service/callee/MetadataCalleeService.java +++ b/spring-cloud-tencent-examples/metadata-transfer-example/metadata-callee-service/src/main/java/com/tencent/cloud/metadata/service/callee/MetadataCalleeService.java @@ -19,6 +19,10 @@ package com.tencent.cloud.metadata.service.callee; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.loadbalancer.LoadBalanced; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.context.annotation.Bean; +import org.springframework.web.client.RestTemplate; /** * Metadata callee application. @@ -26,10 +30,17 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; * @author Palmer Xu */ @SpringBootApplication +@EnableFeignClients public class MetadataCalleeService { public static void main(String[] args) { SpringApplication.run(MetadataCalleeService.class, args); } + @Bean + @LoadBalanced + public RestTemplate restTemplate() { + return new RestTemplate(); + } + } diff --git a/spring-cloud-tencent-examples/metadata-transfer-example/metadata-callee-service/src/main/resources/bootstrap.yml b/spring-cloud-tencent-examples/metadata-transfer-example/metadata-callee-service/src/main/resources/bootstrap.yml index 85c842c7c..f0cada36a 100644 --- a/spring-cloud-tencent-examples/metadata-transfer-example/metadata-callee-service/src/main/resources/bootstrap.yml +++ b/spring-cloud-tencent-examples/metadata-transfer-example/metadata-callee-service/src/main/resources/bootstrap.yml @@ -5,9 +5,27 @@ spring: name: MetadataCalleeService cloud: polaris: - address: grpc://183.47.111.80:8091 + address: grpc://127.0.0.1:8091 namespace: default enabled: true discovery: enabled: true register: true + tencent: + metadata: + # Defined your metadata keys & values + content: + # Example: intransitive + CUSTOM-METADATA-KEY-LOCAL-2: CUSTOM-VALUE-LOCAL-2 + # Example: transitive + CUSTOM-METADATA-KEY-TRANSITIVE-2: CUSTOM-VALUE-TRANSITIVE-2 + # Assigned which metadata key-value will be passed along the link + transitive: + - CUSTOM-METADATA-KEY-TRANSITIVE-2 + +management: + endpoints: + web: + exposure: + include: + - polaris-metadata \ No newline at end of file diff --git a/spring-cloud-tencent-examples/metadata-transfer-example/metadata-callee-service2/pom.xml b/spring-cloud-tencent-examples/metadata-transfer-example/metadata-callee-service2/pom.xml new file mode 100644 index 000000000..2af871c5b --- /dev/null +++ b/spring-cloud-tencent-examples/metadata-transfer-example/metadata-callee-service2/pom.xml @@ -0,0 +1,51 @@ + + + + metadata-transfer-example + com.tencent.cloud + ${revision} + ../pom.xml + + 4.0.0 + + metadata-callee-service2 + Spring Cloud Tencent Metadata Transfer Callee Service 2 + + + + com.tencent.cloud + spring-cloud-starter-tencent-polaris-discovery + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + + org.apache.maven.plugins + maven-source-plugin + 3.2.0 + + + attach-sources + + jar + + + + + + + diff --git a/spring-cloud-tencent-examples/metadata-transfer-example/metadata-callee-service2/src/main/java/com/tencent/cloud/metadata/service/callee/MetadataCalleeController.java b/spring-cloud-tencent-examples/metadata-transfer-example/metadata-callee-service2/src/main/java/com/tencent/cloud/metadata/service/callee/MetadataCalleeController.java new file mode 100644 index 000000000..106cb0638 --- /dev/null +++ b/spring-cloud-tencent-examples/metadata-transfer-example/metadata-callee-service2/src/main/java/com/tencent/cloud/metadata/service/callee/MetadataCalleeController.java @@ -0,0 +1,65 @@ +/* + * 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.metadata.service.callee; + +import java.util.Map; + +import com.tencent.cloud.common.metadata.MetadataContext; +import com.tencent.cloud.common.metadata.MetadataContextHolder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * Metadata callee controller. + * + * @author Palmer Xu + */ +@RestController +@RequestMapping("/metadata/service/callee2") +public class MetadataCalleeController { + + private static final Logger LOG = LoggerFactory.getLogger(MetadataCalleeController.class); + + @Value("${server.port:0}") + private int port; + + /** + * Get information of callee. + * @return information of callee + */ + @GetMapping("/info") + public Map info() { + LOG.info("Metadata Service Callee-2 [{}] is called.", port); + + // Get Custom Metadata From Context + MetadataContext context = MetadataContextHolder.get(); + Map customMetadataMap = context.getFragmentContext(MetadataContext.FRAGMENT_TRANSITIVE); + + customMetadataMap.forEach((key, value) -> { + LOG.info("Custom Metadata (Key-Value): {} : {}", key, value); + }); + + return customMetadataMap; + } + +} diff --git a/spring-cloud-tencent-examples/metadata-transfer-example/metadata-callee-service2/src/main/java/com/tencent/cloud/metadata/service/callee/MetadataCalleeService2.java b/spring-cloud-tencent-examples/metadata-transfer-example/metadata-callee-service2/src/main/java/com/tencent/cloud/metadata/service/callee/MetadataCalleeService2.java new file mode 100644 index 000000000..69c0b2168 --- /dev/null +++ b/spring-cloud-tencent-examples/metadata-transfer-example/metadata-callee-service2/src/main/java/com/tencent/cloud/metadata/service/callee/MetadataCalleeService2.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.metadata.service.callee; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * Metadata callee application. + * + * @author Palmer Xu + */ +@SpringBootApplication +public class MetadataCalleeService2 { + + public static void main(String[] args) { + SpringApplication.run(MetadataCalleeService2.class, args); + } + +} diff --git a/spring-cloud-tencent-examples/metadata-transfer-example/metadata-callee-service2/src/main/resources/bootstrap.yml b/spring-cloud-tencent-examples/metadata-transfer-example/metadata-callee-service2/src/main/resources/bootstrap.yml new file mode 100644 index 000000000..1506d6457 --- /dev/null +++ b/spring-cloud-tencent-examples/metadata-transfer-example/metadata-callee-service2/src/main/resources/bootstrap.yml @@ -0,0 +1,20 @@ +server: + port: 48088 +spring: + application: + name: MetadataCalleeService2 + cloud: + polaris: + address: grpc://127.0.0.1:8091 + namespace: default + enabled: true + discovery: + enabled: true + register: true + +management: + endpoints: + web: + exposure: + include: + - polaris-metadata \ No newline at end of file diff --git a/spring-cloud-tencent-examples/metadata-transfer-example/metadata-caller-service/src/main/resources/bootstrap.yml b/spring-cloud-tencent-examples/metadata-transfer-example/metadata-caller-service/src/main/resources/bootstrap.yml index a390f51a6..62927b121 100644 --- a/spring-cloud-tencent-examples/metadata-transfer-example/metadata-caller-service/src/main/resources/bootstrap.yml +++ b/spring-cloud-tencent-examples/metadata-transfer-example/metadata-caller-service/src/main/resources/bootstrap.yml @@ -5,7 +5,7 @@ spring: name: MetadataCallerService cloud: polaris: - address: grpc://183.47.111.80:8091 + address: grpc://127.0.0.1:8091 namespace: default enabled: true discovery: @@ -19,11 +19,16 @@ spring: content: # Example: intransitive CUSTOM-METADATA-KEY-LOCAL: CUSTOM-VALUE-LOCAL + # + CUSTOM-METADATA-KEY-DISPOSABLE: CUSTOM-VALUE-DISPOSABLE # Example: transitive CUSTOM-METADATA-KEY-TRANSITIVE: CUSTOM-VALUE-TRANSITIVE # Assigned which metadata key-value will be passed along the link transitive: - CUSTOM-METADATA-KEY-TRANSITIVE + - CUSTOM-METADATA-KEY-DISPOSABLE + disposable: + - CUSTOM-METADATA-KEY-DISPOSABLE management: endpoints: web: diff --git a/spring-cloud-tencent-examples/metadata-transfer-example/pom.xml b/spring-cloud-tencent-examples/metadata-transfer-example/pom.xml index bd2b961ec..d692fdce4 100644 --- a/spring-cloud-tencent-examples/metadata-transfer-example/pom.xml +++ b/spring-cloud-tencent-examples/metadata-transfer-example/pom.xml @@ -16,6 +16,7 @@ metadata-callee-service + metadata-callee-service2 metadata-caller-service