操作场景
本文介绍在本地开发 Spring Cloud 微服务示例应用并注册到 TSF 服务注册发现中心,或者将已经接入 Eureka 服务注册与发现的应用迁移到 TSF 服务注册发现中心的操作方法。
前提条件
本地开发应用
创建 tsf-demo 工程,文件结构如下:
|- consumer-demo|- provider-demo|- pom.xml
步骤1:创建服务提供者
在本地创建服务提供者应用工程,此服务提供者提供一个简单的 echo 服务,并将自身注册到服务注册中心。
1. 创建 Provider 工程
创建一个 Spring Cloud 工程,命名为
provider-demo
。2. 修改 pom 依赖
在
pom.xml
中引入需要依赖的内容:<parent><groupId>com.tencent.tsf</groupId><artifactId>tsf-demo</artifactId><version><!-- 关联 parent version 属性--></version></parent><artifactId>provider-demo</artifactId><packaging>jar</packaging><name>provider-demo</name><dependencies><dependency><groupId>com.tencent.tsf</groupId><artifactId>spring-cloud-tsf-starter</artifactId></dependency></dependencies>
注意
3. 开启服务注册发现
添加服务提供端的代码。
// 省略部分 importimport org.springframework.cloud.openfeign.EnableFeignClients;import org.springframework.tsf.annotation.EnableTsf;@SpringBootApplication@EnableFeignClients // 使用Feign微服务调用时请启用@EnableTsfpublic class ProviderApplication {public static void main(String[] args) {SpringApplication.run(ProviderApplication.class, args);}}
4. 提供 echo 服务
创建一个
EchoController
,提供简单的echo
服务。@RestControllerpublic class EchoController {@RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)public String echo(@PathVariable String string) {return string;}}
5. 修改配置
在
resource
目录下的application.yml
文件中配置应用名与监听端口号。server:port: 18081spring:application:name: provider-demo
注意
运行在 TSF 平台上的应用无须配置服务注册中心地址,SDK 会通过环境变量自动获取注册中心地址。
步骤2:创建服务消费者
本小节中,我们将创建一个服务消费者,消费者通过
RestTemplate
、AsyncRestTemplate
、FeignClient
这三个客户端去调用服务提供者。1. 创建 Consumer 工程
创建一个 Spring Cloud 工程,命名为
consumer-demo
。2. 改 pom 依赖
在
pom.xml
中引入需要依赖的内容:<parent><groupId>com.tencent.tsf</groupId><artifactId>tsf-demo</artifactId><version><!-- 关联 parent version 属性--></version></parent><artifactId>consumer-demo</artifactId><packaging>jar</packaging><name>consumer-demo</name><dependencies><dependency><groupId>com.tencent.tsf</groupId><artifactId>spring-cloud-tsf-starter</artifactId></dependency></dependencies>
3. 开启服务注册发现
与服务提供者
provider-demo
相比,除了开启服务与注册外,还需要添加两项配置才能使用RestTemplate
、AsyncRestTemplate
、FeignClient
这三个客户端:添加
@LoadBalanced
注解将RestTemplate
与AsyncRestTemplate
与服务发现结合。使用
@EnableFeignClients
注解激活FeignClients
。// 省略部分 importimport org.springframework.cloud.netflix.feign.EnableFeignClients;import org.springframework.tsf.annotation.EnableTsf;import org.springframework.web.client.AsyncRestTemplate;import org.springframework.web.client.RestTemplate;@SpringBootApplication@EnableFeignClients // 使用 Feign 微服务调用时请启用@EnableTsfpublic class ConsumerApplication {@LoadBalanced@Beanpublic RestTemplate restTemplate() {return new RestTemplate();}@LoadBalanced@Beanpublic AsyncRestTemplate asyncRestTemplate() {return new AsyncRestTemplate();}public static void main(String[] args) throws InterruptedException {SpringApplication.run(ConsumerApplication.class, args);}}
4. 设置调用信息
在使用
EchoService
的FeignClient
之前,还需要完善它的配置。配置服务名以及方法对应的 HTTP 请求,服务名为provider-demo
工程中配置的服务名provider-demo
,代码如下:@FeignClient(name = "provider-demo")public interface EchoService {@RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)String echo(@PathVariable("str") String str);}
5. 创建 Controller
创建一个
Controller
供调用测试。/echo-rest/*
验证通过 RestTemplate 去调用服务提供者。/echo-async-rest/*
验证通过 AsyncRestTemplate 去调用服务提供者。/echo-feign/*
验证通过 FeignClient 去调用服务提供者。@RestControllerpublic class Controller {@Autowiredprivate RestTemplate restTemplate;@Autowiredprivate AsyncRestTemplate asyncRestTemplate;@Autowiredprivate EchoService echoService;@RequestMapping(value = "/echo-rest/{str}", method = RequestMethod.GET)public String rest(@PathVariable String str) {return restTemplate.getForObject("http://provider-demo/echo/" + str, String.class);}@RequestMapping(value = "/echo-async-rest/{str}", method = RequestMethod.GET)public String asyncRest(@PathVariable String str) throws Exception{ListenableFuture<ResponseEntity<String>> future = asyncRestTemplate.getForEntity("http://provider-demo/echo/"+str, String.class);return future.get().getBody();}@RequestMapping(value = "/echo-feign/{str}", method = RequestMethod.GET)public String feign(@PathVariable String str) {return echoService.echo(str);}}
6. 修改配置
server:port: 18083spring:application:name: consumer-demo
注意
运行在 TSF 平台上的应用无须配置服务注册中心地址,SDK 会通过环境变量自动获取注册中心地址。
步骤3:部署应用
从 Eureka 迁移应用
已经接入 Eureka 服务注册与发现中心的应用,只需要修改
pom.xml
依赖,就可以将服务接入 TSF 服务注册发现中心。1. 在工程根目录的 pom.xml 中增加
spring-cloud-tsf-dependencies
的 parent。2. 在单个 Spring Cloud 应用的
pom.xml
中,将spring-cloud-starter-eureka
替换成spring-cloud-tsf-consul-discovery
。替换前:
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId></dependency>
替换后:
<dependency><groupId>com.tencent.tsf</groupId><artifactId>spring-cloud-tsf-consul-discovery</artifactId></dependency><!-- consul SDK 依赖的版本控制参见 Demo 或之前 pom 说明-->
3. 修改代码中的 Eureka 的相关注解。
@EnableEurekaClient => @EnableDiscoveryClient