微服务平台 TSF 服务注册与发现

在本地开发 Spring Cloud 微服务示例应用并注册到 TSF 服务注册发现中心,或者将已经接入 Eureka 服务注册与发现的应用迁移到 TSF 服务注册发现中心的操作方法。

相关产品
微服务平台 TSF 产品页,含版本规格、价格与购买入口。

一、前提条件

在开始开发前,请确保你已经参见 下载 Maven下载安装了 Java 和 Maven,并且配置了 TSF 私服地址。

二、本地开发应用

创建 tsf-demo 工程,文件结构如下:

|- consumer-demo|- provider-demo|- pom.xml

其中pom.xml文件参见 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>

注意:Finchley 版本 SDK 无须添加 monitor 依赖包,具体请参见 服务监控。

六、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服务。

@RestController public 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 @Bean public RestTemplate restTemplate() { return new RestTemplate(); } @LoadBalanced @Bean public 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 { @Autowired private RestTemplate restTemplate; @Autowired private AsyncRestTemplate asyncRestTemplate; @Autowired private 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:部署应用

参见 如何打 FatJar 包 将应用工程打包,并打包好的 FatJar 程序包上传到 TSF 控制台,进行部署操作,无需关心额外配置。部署相关操作可参见 容器托管应用 或 虚拟机托管应用。

十七、从 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

十八、延迟注册

注意:版本支持说明:

添加应用配置即可使用:

tsf: discovery: delay-register: true # 延迟注册开关,默认关闭 delay-register-interval: 30000 # 延迟注册间隔,默认30000,单位:毫秒

赞 (0)
上一篇 4天前
下一篇 4天前