SpringCloudAlibaba-Nacos

目录

 

1:安装nocas

2:什么是nocas

2.1:为什么使用SpringCloudAlibaba

2.2:什么是nacos 

3:案例架构

4:服务提供者使用案例

4.1:提供者8001和8002的pom

4.2: 提供者8001和8002的pom的controller

4.3: 提供者8001和8002的properties

4.4: 提供者8001和8002的main方法

4.5:启动查看

5:消费者使用案例

5.1:消费者8003的pom

5.2:消费者8003的properties

5.3:消费者8003的controller

5.4:消费者8003的mian方法

5.5:启动查看

5.6:调用8003返回不同的端口号,证明8003负载调用了8001和8002

6:动态配置使用

6.1:8003的properties

6.2:服务器新建配置

6.3:controller方法

7:nocas的cap问题(支持AP和CP的切换)

8:nocas的集群和持久化(具体部署请查阅官网)


1:安装nocas

下载:官网https://github.com/alibaba/nacos/releases下载版本

解压:解压到自己的文件夹下边

运行:Linux/Unix/Mac,启动命令(standalone代表着单机模式运行,非集群模式):    sh startup.sh -m standalone

查看:http://localhost:8848/nacos/#/login 账户密码都是nocas

2:什么是nocas

 

2.1:为什么使用SpringCloudAlibaba

1:springcloud官网的Eurake、Feign、Hystrix、Zuul、Config、Bus都已经停止了更新,进入维护阶段。导致后劲乏力

2:国产的SpringCloudAlibaba,兼容性能强,组件少,一个组件能代替springcloud的好几个组件,减少学习成本

3:国产的SpringCloudAlibaba在阿里中,能够应对双十一的压力,证明产品可靠性高

4:国产的SpringCloudAlibaba,学习使用更加简单方便,易于学习,页面管理也很方便。

 

 

2.2:什么是nacos 

nocas是SpringCloudAlibaba的一个组件,主要用来实现服务注册,服务发现,动态配置管理服务发现是微服务体系结构中的关键组件之一。在这样的体系结构中,为每个客户端手动配置服务列表可能是艰巨的任务,并且使动态扩展极为困难。Nacos Discovery帮助您自动将服务注册到Nacos服务器,并且Nacos服务器会跟踪服务并动态刷新服务列表。此外,Nacos Discovery注册服务实例的一些元数据,例如主机,端口,运行状况检查URL,Nacos主页。

nocas=Eurake(服务注册服务发现)+config(配置文件统一管理,但不能统一推送)+Bus(消息队列实现配置文件统一推送)

 

3:案例架构

在案例中8001,8002,8003向nocas注册服务,然后8001、8002作为相同的服务集群,给8003调用

给8003调用负载均衡调用8001和8002,得到服务器的端口号

 

4:服务提供者使用案例

父类项目pom配置


    
    
  1. <!--父工程 springboot 2.1.3-->
  2. <parent>
  3. <groupId>org.springframework.boot </groupId>
  4. <artifactId>spring-boot-starter-parent </artifactId>
  5. <version>2.1.3.RELEASE </version>
  6. </parent>
  7. <!--统一jar的版本管理-->
  8. <properties>
  9. <project.build.sourceEncoding>UTF-8 </project.build.sourceEncoding>
  10. <project.reporting.outputEncoding>UTF-8 </project.reporting.outputEncoding>
  11. <java.version>1.8 </java.version>
  12. <spring-cloud.version>Greenwich.RELEASE </spring-cloud.version>
  13. <spring-cloud-alibaba.version>2.1.0.RELEASE </spring-cloud-alibaba.version>
  14. </properties>
  15. <!--父工程管理子项目 子项目不用指定版本号 子项目需要引入具体的需求包-->
  16. <dependencyManagement>
  17. <dependencies>
  18. <!--springcloud 包Greenwich-->
  19. <dependency>
  20. <groupId>org.springframework.cloud </groupId>
  21. <artifactId>spring-cloud-dependencies </artifactId>
  22. <version>${spring-cloud.version} </version>
  23. <type>pom </type>
  24. <scope>import </scope>
  25. </dependency>
  26. <!--springcloud阿里巴巴包 采用2.1-->
  27. <dependency>
  28. <groupId>com.alibaba.cloud </groupId>
  29. <artifactId>spring-cloud-alibaba-dependencies </artifactId>
  30. <version>${spring-cloud-alibaba.version} </version>
  31. <type>pom </type>
  32. <scope>import </scope>
  33. </dependency>
  34. </dependencies>
  35. </dependencyManagement>
  36. </project>

 

4.1:提供者8001和8002的pom


    
    
  1. <dependencies>
  2. <!--nocas依赖-->
  3. <dependency>
  4. <groupId>com.alibaba.cloud </groupId>
  5. <artifactId>spring-cloud-starter-alibaba-nacos-discovery </artifactId>
  6. </dependency>
  7. <!--Spring web 依赖-->
  8. <dependency>
  9. <groupId>org.springframework.boot </groupId>
  10. <artifactId>spring-boot-starter-web </artifactId>
  11. </dependency>
  12. <!--图形监控-->
  13. <dependency>
  14. <groupId>org.springframework.boot </groupId>
  15. <artifactId>spring-boot-starter-actuator </artifactId>
  16. </dependency>
  17. </dependencies>

 

4.2: 提供者8001和8002的pom的controller

该controller只提供一个返回端口的方法,没有业务逻辑,专注与架构


    
    
  1. /**
  2. * @author :huyiju
  3. * @date :2020-05-15 21:03
  4. */
  5. @RestController
  6. public class Controller {
  7. @Value("${server.port}")
  8. String port;
  9. @RestController
  10. public class add {
  11. @GetMapping(value = "/add")
  12. public String add() {
  13. return "服务端nocas端口号:"+port;
  14. }
  15. }
  16. }

 

4.3: 提供者8001和8002的properties


    
    
  1. #服务信息 8002 或者 8001
  2. server.port= 8002
  3. #服务名字需要一致,才是同一个服务下的集群
  4. spring.application.name=huyiju-nacosservice
  5. #服务注册的nocas地址
  6. spring.cloud.nacos.discovery.server-addr= 127.0 .0 .1: 8848
  7. management.endpoints.web.exposure.include=*

 

4.4: 提供者8001和8002的main方法


    
    
  1. @SpringBootApplication
  2. @EnableDiscoveryClient //nocas服务发现注解
  3. public class Mian8002 {
  4. public static void main(String[] args) {
  5. SpringApplication.run(Mian8002.class,args);
  6. }
  7. }

 4.5:启动查看

 

5:消费者使用案例

5.1:消费者8003的pom


    
    
  1. <dependencies>
  2. <!--nacos的服务注册配置-->
  3. <dependency>
  4. <groupId>com.alibaba.cloud </groupId>
  5. <artifactId>spring-cloud-starter-alibaba-nacos-discovery </artifactId>
  6. </dependency>
  7. <!--nacos的config配置 用于动态配置-->
  8. <dependency>
  9. <groupId>com.alibaba.cloud </groupId>
  10. <artifactId>spring-cloud-starter-alibaba-nacos-config </artifactId>
  11. </dependency>
  12. <!--Spring web 依赖-->
  13. <dependency>
  14. <groupId>org.springframework.boot </groupId>
  15. <artifactId>spring-boot-starter-web </artifactId>
  16. </dependency>
  17. <!--图形监控-->
  18. <dependency>
  19. <groupId>org.springframework.boot </groupId>
  20. <artifactId>spring-boot-starter-actuator </artifactId>
  21. </dependency>
  22. </dependencies>

 

5.2:消费者8003的properties


    
    
  1. # 1:项目初始化配置项目名字
  2. spring.application.name=nacos -8003
  3. server.port= 8003
  4. #服务注册到nacos.discovery
  5. spring.cloud.nacos.discovery.server-addr= 127.0 .0 .1: 8848
  6. management.endpoints.web.exposure.include=*
  7. # 2:配置文件读取地址
  8. spring.cloud.nacos.config.server-addr= 127.0 .0 .1: 8848
  9. #文件后缀
  10. spring.cloud.nacos.config.file-extension=yaml
  11. #配置不同的环境
  12. spring.profiles.active=info
  13. #自定义组文件
  14. spring.cloud.nacos.config.group=huyiju
  15. #自定义命名空间
  16. #spring.cloud.nacos.config.namespace=b726e92d-6766-4e05-b35b-a2128c25f00e

 

5.3:消费者8003的controller

该controller通过resttemple调用服务,得到端口号


    
    
  1. @RestController
  2. @RefreshScope //动态刷新获取config,config的注解
  3. public class Controller {
  4. /**
  5. * 调用nocas上注册的服务
  6. * 采用restTemplate1+robbin的LoadBalanced注解
  7. * @return
  8. */
  9. @Resource
  10. private RestTemplate restTemplate1;
  11. @RequestMapping(value = "/get")
  12. public String add (){
  13. String url= "http://huyiju-nacosservice/add";
  14. System.out.println( "进入调用");
  15. return restTemplate1.getForObject(url,String.class);
  16. }
  17. }
  18. @Configuration
  19. public class RestConfig {
  20. @Bean
  21. @LoadBalanced
  22. public RestTemplate getRestTemplate(){
  23. return new RestTemplate();
  24. }
  25. }

5.4:消费者8003的mian方法


    
    
  1. @ComponentScan(basePackages = {"com.thit"})
  2. @SpringBootApplication
  3. @EnableDiscoveryClient //服务发现注解
  4. public class Mian8003 {
  5. public static void main(String[] args) {
  6. SpringApplication.run(Mian8003.class,args);
  7. }
  8. }

 

5.5:启动查看

5.6:调用8003返回不同的端口号,证明8003负载调用了8001和8002

http://localhost:8003/get

 

6:动态配置使用

我们使用8003来获取nocas的动态配置

6.1:8003的properties


    
    
  1. # 1:项目初始化配置项目名字
  2. spring.application.name=nacos -8003
  3. server.port= 8003
  4. #服务注册到nacos.discovery
  5. spring.cloud.nacos.discovery.server-addr= 127.0 .0 .1: 8848
  6. management.endpoints.web.exposure.include=*
  7. # 2:配置文件读取地址
  8. spring.cloud.nacos.config.server-addr= 127.0 .0 .1: 8848
  9. #文件后缀
  10. spring.cloud.nacos.config.file-extension=yaml
  11. #配置不同的环境
  12. spring.profiles.active=info
  13. #自定义组文件
  14. spring.cloud.nacos.config.group=huyiju
  15. #自定义命名空间
  16. #spring.cloud.nacos.config.namespace=b726e92d-6766-4e05-b35b-a2128c25f00e

6.2:服务器新建配置

6.3:controller方法


    
    
  1. /**
  2. * 读取指定名字的yml文件
  3. * nacos-8003-dev.yaml
  4. * 项目名字-环境.yaml
  5. */
  6. @Value("${aa.bb}")
  7. public String aa;
  8. @RequestMapping(value = "/dev")
  9. public String dev (){
  10. System.out.println( "读取dev配置文件");
  11. return aa;
  12. }
  13. /**
  14. * 读取指定名字的yml文件
  15. * nacos-8003-test.yaml
  16. * 项目名字-环境.yaml
  17. */
  18. @Value("${aa.bb}")
  19. public String bb;
  20. @RequestMapping(value = "/test")
  21. public String test (){
  22. System.out.println( "读取test配置文件");
  23. return bb;
  24. }
  25. /**
  26. * 自定义group获取指定文件
  27. *
  28. *
  29. */
  30. @Value("${aa.bb}")
  31. public String cc;
  32. @RequestMapping(value = "/group")
  33. public String group (){
  34. System.out.println( "读取group配置文件");
  35. return cc;
  36. }
  37. /**
  38. * 自定义group获取指定文件和自定义命名空间
  39. *
  40. *
  41. */
  42. @Value("${aa.bb}")
  43. public String ff;
  44. @RequestMapping(value = "/namespece")
  45. public String namespece (){
  46. System.out.println( "读取group分组和自定义命名空间-配置文件");
  47. return ff;
  48. }

 

7:nocas的cap问题(支持AP和CP的切换)

Nacos的AP和CP模式切换
C:是所有节点在同一时间看到的数据是一致,数据一致行
A:是所有请求都会收到响应,Nocas高可用性

何时选用哪种模式?

一般来说,如果不需要存储服务级别的信息且服务实例是通过nacos-client注册,并能够保持心跳上报,那么就可以选择AP模式。当前主流的服务如Spring Cloud 和 Dubbo服务,都适用于AP模式,AP模式为了服务的可能性而减弱了一致性,因此AP模式下只支持注册临时实例。

如果需要在服务级别编辑或者存储配置信息,那么CP是必须的,K8S服务和DNS服务则适用于CP模式。CP模式下支持注册持久化实例,此时则是以Raft协议为集群运行模式,该模式下注册实例之前必须先注册服务,如果服务不存在,则会返回错误。

curl -X PUT `$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'

 

8:nocas的集群和持久化(具体部署请查阅官网)

官方推荐nocas在生产环境尽量使用集群,3台以上的nocas服务中心,一个mysql数据库用来维持数据一致性。一个niginx代理3台nocas服务,只需访问nignx地址进入nocas服务页面

在这里插入图片描述
 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值