写点什么

Spring Cloud 2020 版本最佳实践,你落伍了

作者:Java高工P7
  • 2021 年 11 月 11 日
  • 本文字数:2544 字

    阅读完需:约 8 分钟

工程案例


====


工程案例源码:https://github.com/java-aodeng/springcloud2020-demo-1


工程案例包括 2 个,一个服务提供者 provider 、服务消费者 consumer


在父 pom 文件引入相关的依赖,如下:


<properties>


<java.version>1.8</java.version>


<spring-boot.version>2.4.4</spring-boot.version>


<spring-cloud.version>2020.0.2</spring-cloud.version>


<spring-cloud-alibaba.version>2020.0.RC1</spring-cloud-alibaba.version>


</properties>


<dependencyManagement>


<dependencies>


<dependency>


<groupId>org.springframework.boot</groupId>


<artifactId>spring-boot-dependencies<


【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


/artifactId>


<version>${spring-boot.version}</version>


<type>pom</type>


<scope>import</scope>


</dependency>


<dependency>


<groupId>org.springframework.cloud</groupId>


<artifactId>spring-cloud-dependencies</artifactId>


<version>${spring-cloud.version}</version>


<type>pom</type>


<scope>import</scope>


</dependency>


<dependency>


<groupId>com.alibaba.cloud</groupId>


<artifactId>spring-cloud-alibaba-dependencies</artifactId>


<version>${spring-cloud-alibaba.version}</version>


<type>pom</type>


<scope>import</scope>


</dependency>


</dependencies>


</dependencyManagement>


服务提供者 provider


=============


在 pom 文件引入以下依赖:


<dependency>


<groupId>org.springframework.boot</groupId>


<artifactId>spring-boot-starter-web</artifactId>


</dependency>


<dependency>


<groupId>com.alibaba.cloud</groupId>


<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>


</dependency>


配置文件:


server:


port: 8762


spring:


application:


name: provider


cloud:


nacos:


discovery:


server-addr: 127.0.0.1:8848


启动入口添加注解:


@SpringBootApplication


@EnableDiscoveryClient


public class ProviderApplication {


public static void main(String[] args) {


SpringApplication.run(ProviderApplication.class,args);


}


}


写个接口:


@RestController


public class DemoController {


@Value("${server.port}")


String port;


@GetMapping("getInfo")


public String getInfo(@RequestParam(value = "name",defaultValue = "nacosConfig",required = false)String name){


return "my name is "+name+",my port is "+port;


}


}


服务消费者 consumer


=============


在 pom 文件引入以下依赖:


<dependency>


<groupId>org.springframework.boot</groupId>


<artifactId>spring-boot-starter-web</artifactId>


</dependency>


<dependency>


<groupId>com.alibaba.cloud</groupId>


<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>


</dependency>


<dependency>


<groupId>org.springframework.cloud</groupId>


<artifactId>spring-cloud-starter-openfeign</artifactId>


</dependency>


<dependency>


<groupId>org.springframework.cloud</groupId>


<artifactId>spring-cloud-starter-loadbalancer</artifactId>


</dependency>


配置文件


server:


port: 8763


spring:


application:


name: consumer


cloud:


nacos:


discovery:


server-addr: 127.0.0.1:8848


在工程的启动入口开启 FeignClient 的功能


@SpringBootApplication


@EnableDiscoveryClient


@EnableFeignClients


public class ConsumerApplication {


public static void main(String[] args) {


SpringApplication.run(ConsumerApplication.class,args);


}


}


写一个 FeignClient,去调用 provider 服务的接口:


@FeignClient(value = "provider")


public interface ProviderClient {


@GetMapping("getInfo")


String getInfo(@RequestParam(value = "name",defaultValue = "nacosConfig",required = false)String name);


}


写一个接口,让 consumer 去调用 provider 服务的接口:


@RestController


public class DemoController {


@Autowired


ProviderClient providerClient;


@GetMapping("getInfoByFeign")


public String getInfoByFeign(){


return providerClient.getInfo("consumer feign");


}


}


启动两个工程,在 nacos 服务列表页面出现,consumer,provider2 个服务表示都已经注册成功。


服务调用


====


在浏览器上输入 http://localhost:8763/getInfoByFeign,浏览器返回响应


my name is consumer feign,my port is 8761


可见浏览器的请求成功调用了 consumer 服务的接口,consumer 服务也成功地通过 feign 成功的调用了 provider 服务的接口。另外,Spring Cloud 系列面试题和答案全部整理好了,微信搜索互联网架构师,在后台发送:2T,可以在线阅读。


使用 sc loadbanlancer 作为负载均衡


========================


使用 spring cloud loadbanlancer 作为负载均衡器。通过修改 provider 的端口,再在本地启动一个新的 provider 服务,那么本地有 2 个 provider 服务,端口分别为 8761 和 8762。在浏览器上多次调用 http://localhost:8763/getInfoByFeign,浏览器会交替显示:


my name is consumer feign,my port is 8761


my name is consumer feign,my port is 8762


注册中心 provider 服务也会显示两个示例。


使用 nacos 作为配置中心


=============


父工程添加 nacos 配置版本,另一个是用来解决最新版本导致的问题:


<alibaba.nacos.version>2.0.3</alibaba.nacos.version>


<spring-cloud.bootstrap.version>3.0.4</spring-cloud.bootstrap.version>


<dependency>


<groupId>com.alibaba.cloud</groupId>


<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>


<version>${spring-cloud-alibaba.version}</version>


</dependency>


<dependency>


<groupId>org.springframework.cloud</groupId>


<artifactId>spring-cloud-starter-bootstrap</artifactId>


<version>${spring-cloud.bootstrap.version}</version>


</dependency>


服务提供者 provider 添加依赖:


<dependency>


<groupId>com.alibaba.cloud</groupId>


<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>


</dependency>


<dependency>


<groupId>org.springframework.cloud</groupId>


<artifactId>spring-cloud-starter-bootstrap</artifactId>


</dependency>

用户头像

Java高工P7

关注

还未添加个人签名 2021.11.08 加入

还未添加个人简介

评论

发布
暂无评论
Spring Cloud 2020 版本最佳实践,你落伍了