当前位置:   article > 正文

SpringCloud之Nacos作为注册中心_springcloud nacos注册中心

springcloud nacos注册中心

目录

1、SpringCloud简介

1-1、SpringCloud是什么

1-2、SpringCloud包含那些项目

1-3、SpringCloud版本选择

2、Nacos安装以及编译

2-1、下载源码

2-2、源码单机启动

2-3、单机启动服务

3、Nacos服务领域模型

4、Nacos的使用

4-1、正常使用http客户端调用

4-2、引入nacos

5、Nacos注册中心的原理

6、集群搭建

6-1、解压Nacos

​6-2、配置数据库

6-3、修改application.properties配置文件

6-4、修改集群配置文件

6-5、集群启动

6-6、浏览器访问一下Nacos

6-7、配置Nginx

6-8、进行访问

6-9、配置nacos地址


1、SpringCloud简介

1-1、SpringCloud是什么

  • Spring Cloud是一系列框架的有序集合,这些框架为我们提供了分布式系统构建工具。

1-2、SpringCloud包含那些项目

项目项目名称
服务注册于发现Alibaba Nacos、Netflix Eureka、Apache Zookper
分布式配置中心Alibaba Nacos、Spring Cloud Config
网关Spring Cloud Gateway、Netflix Zull
限流熔断器Alibaba Sentinel、Netflix Hystrix、 Resilience4j
服务调用RestTemplate、Open Feign、Dubbo Spring Cloud
负载均衡Spring Cloud LoadBalancer、Netflix Ribbon
消息总线Spring Cloud Bus
.......

1-3、SpringCloud版本选择

版本说明 · alibaba/spring-cloud-alibaba Wiki · GitHub

Spring Cloud Alibaba VersionSpring Cloud VersionSpring Boot Version
2.1.4.RELEASESpring Cloud Greenwich.SR62.1.13.RELEASE
Spring Cloud Alibaba VersionSentinel VersionNacos VersionSeata Version
2.1.4.RELEASE1.8.01.4.11.3.0

2、Nacos安装以及编译

2-1、下载源码

下载地址:GitHub - alibaba/nacos at 1.4.1 (以1.4.1为例)

解压进入目录中进行maven编译

mvn clean install -DskipTests -Drat.skip=true -f pom.xml

 注意:编译的时候可能需要你自己指定jdk版本,可以修改maven配置文件conf/settings.xml

  1. <profile>
  2. <id>jdk-1.8</id>
  3. <activation>
  4. <activeByDefault>true</activeByDefault>
  5. <jdk>1.8</jdk>
  6. </activation>
  7. <properties>
  8. <maven.compiler.source>1.8</maven.compiler.source>
  9. <maven.compiler.target>1.8</maven.compiler.target>
  10. <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
  11. </properties>
  12. </profile>

2-2、源码单机启动

  • 将jdk版本都设置为jdk8

  • 设置参数

 -Dnacos.standalone=true

        

  • 然后启动服务

        

        

2-3、单机启动服务

  • 解压文件
tar xzf nacos-server-1.4.1.tar.gz
  • 执行命令,以单机模式启动(需要查看防火墙是否开放8848端口)
sh startup.sh -m standalone
  • 关闭服务
sh shutdown.sh

  

3、Nacos服务领域模型

  • service -> cluster -> instanc【之所以会这样设置就是为了大的互联网公司,多集群垮机房提供了解决方案。但小公司一般都不需要这样。】
  • Namespace:实现环境隔离,默认值public
  • Group:不同的service可以组成一个Group,默认值Default-Group
  • Service:服务名称 Cluster:对指定的微服务虚拟划分,默认值Default
  • Instance:某个服务的具体实例
  • Nacos服务注册中心于发现的领域模型的最佳实践。

  • NameSpace:是项目生产,开发和测试环境的隔离。测试访问测试,生产访问生产。
  • Group:比如说有一类服务。他们都是为了交易而服务的。比方说订单,比方说支付。这个在服务注册中心的场景中并不常用。
  • Service:下一个层级就是service,同一个group有多个service,再服务下面就是集群的概念。
  • Cluster:比方我们可以有北京的集群也可以有上海的集群。那这个集群的概念意义是什么? 可以设想这样的一个场景,比方阿里只在杭州部署一个淘宝的集群,那北方的人民去访问,是不是就会相对较慢,一般都会再南方和北方都设置两个集群。当北方人民访问的时候一般都访问北京这个集群的服务,其他的服务都会在北京的集群里面互相调用,而不会垮cluster进行访问,这样在同一个数据中心访问都是比较快的。这就是他的意义。
  • Instance:这个就是实例,并且是多实例的,这样防止单点问题,从而实现高可用,当北京集群坏了,他会可以访问上海的集群。当一个实例挂掉,另一个实例会替代,当一个集群挂掉,另一个集群会替代上。这样就保证了高可用。很多公司宣传5个9或者4个9的可用,那么全年停机的时长不会超过固定的时长。

4、Nacos的使用

4-1、正常使用http客户端调用

当下单的时候,一个订单服务可能会调用很多服务

当随着客户量访问逐渐增大,比如商品服务满足不了需求,这时可能需要两台或两台以上的服务,在没有注册中心的时候,我们使用nginx,通过nginx负载均衡到这两个商品系统服务,虽然问题解决了,但是随着服务的增加,对nginx的维护成本也越来越大。

4-2、引入nacos

1、父pom引入依赖

  1. <dependency>
  2. <groupId>com.alibaba.cloud</groupId>
  3. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  4. </dependency>

2、在库存服务的配置文件中,添加对nacos的配置信息

  1. spring:
  2. cloud:
  3. nacos:
  4. discovery:
  5. service: aiqingyu-stock
  6. server-addr: localhost:8848

3、在库存服务的启动类上添加@EnableDiscoveryClient注解,并启动库存服务

  1. @EnableDiscoveryClient
  2. @SpringBootApplication
  3. public class StockApplication {
  4. public static void main(String[] args) {
  5. SpringApplication.run(StockApplication.class);
  6. }
  7. }

4、在订单服务的配置文件中,添加对nacos的配置信息

  1. spring:
  2.   cloud:
  3.     nacos:
  4.       discovery:
  5.         service: aiqingyu-order
  6.         server-addr: localhost:8848

5、在订单服务的启动类上添加@EnableDiscoveryClient注解,并启动库存服务

  1. @EnableDiscoveryClient
  2. @SpringBootApplication
  3. public class OrderApplication {
  4. public static void main(String[] args) {
  5. SpringApplication.run(OrderApplication.class);
  6. }
  7. }

6、在nacos服务注册中心可以查询到所有的服务信息 

7、对订单服务接口进行改造,现在访问stock服务,但是restTemplate并不知道怎样调用

  1. @GetMapping("/order/create")
  2. public String createOrder(Integer productId,Integer userId){
  3. // 此时restTemplate并不能识别aiqingyu-stock,所以还不能进行调用
  4. // RestTempLate调用需要一个负载均衡器 1、获取aiqingyu-stock对应服务列表 2、选择一个去调用
  5. // RestTemplate扩展点clientHttpRequestInterceptor
  6. // 我们有个组件ribbon,实现了这个扩展点 LoadBalancerInterceptor
  7. // 它做的事情就是将aiqingyu-stock替换为:localhost:11001
  8. String result = restTemplate.getForObject("http://aiqingyu-stock/stock/reduce//" + productId, String.class);
  9. return "下单成功 " + result;
  10. }

8、库存接口 

  1. @GetMapping("/stock/reduce/{productId}")
  2. public String reduce(@PathVariable Integer productId){
  3. return "减库存成功," + productId;
  4. }

9、分析一下LoadBalancerInterceptor的拦截器Interceptor,并对其进行改造

  • 所有restTemplate请求都会经过该拦截器
  • 获取服务器名称serviceName,通过负载均衡器loadBalancer在nacos注册中心获取相应服务列表,然后选择该服务进行相应的调用

       

  • 因此我们可以改造成通过设置restTemplate,去添加LoadBalancerInterceptor拦截器
  1. @Autowired
  2. private LoadBalancerClient loadBalancerClient;
  3. @Bean
  4. public RestTemplate restTemplate(){
  5. RestTemplate restTemplate = new RestTemplate();
  6. restTemplate.setInterceptors(Collections.singletonList(new LoadBalancerInterceptor(loadBalancerClient)));
  7. return restTemplate;
  8. }
  • 当然也可以进行如下改造:直接加入注解@LoadBalance,效果是一样的
  1. @LoadBalanced
  2. @Bean
  3. public RestTemplate restTemplate(){
  4. return new RestTemplate();
  5. }

10、验证服务是否调用成功,访问地址:http://localhost:8001/order/create?productId=7788

5、Nacos注册中心的原理

        首先服务在启动的时候会将数据注册到注册中心,这样就服务只要启动就可以对外提供服务了, 那么同时他也要维持一个心跳,心跳的意义就是某个服务挂掉,我肯定让注册中心知道,如果服务挂了还没有告诉注册中心,那么注册中心会引导客户端调用挂掉的服务体验就不好了,所以注册中心重要的概念就是和我们的服务维持一个心跳,来实时的监听我们服务的状态,当服务挂掉就会将其从服务列表中踢掉,接下来肯定还有服务的调用者,他在调用服务之前一定会到注册中心拉取服务列表,获取可用的服务,并且还有一个定时任务来定时拉取服务列表,以保持服务列表的最新状态,其次还有更新的功能,这个功能就是当服务挂掉的时候通过心跳他会发现这服务不健康了,他会更新本地的服务注册表,同时将所有订阅这个注册表的服务进行更新。

6、集群搭建

6-1、解压Nacos

解压Nacos,复制三份 

6-2、配置数据库

具体位置在nacos目录下的conf中,这里的操作和之前是一样的,我们可以直接打开这个文件然后拷贝到数据库中执行,当然也是要创建数据库使用数据库然后在复制脚本内容,执行即可。

6-3、修改application.properties配置文件

修改每个服务数据库链接

  1. spring.datasource.platform=mysql
  2. db.num=1
  3. db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&serverTimezone=UTC
  4. db.user=root
  5. db.password=1qaz!QAZ

修改每个服务端口

  1. server.port=8848
  2. server.port=8868
  3. server.port=8888

6-4、修改集群配置文件

将cluster.conf.example 改为 cluster.conf,并添加对应服务集群Ip:port,其他文件夹也要修改

6-5、集群启动

  1. sh ./nacos-8848/bin/startup.sh -m cluster
  2. sh ./nacos-8868/bin/startup.sh -m cluster
  3. sh ./nacos-8888/bin/startup.sh -m cluster

6-6、浏览器访问一下Nacos

http://192.168.175.4:8848/nacos

http://192.168.175.4:8868/nacos

http://192.168.175.4:8888/nacos

6-7、配置Nginx

 修改nginx.conf

  1. stream {
  2. upstream nacos {
  3. server 192.168.175.4:8848;
  4. server 192.168.175.4:8868;
  5. server 192.168.175.4:8888;
  6. }
  7. server {
  8. listen 88;
  9. proxy_pass nacos;
  10. }
  11. }

 重新加载nginx

./sbin/nginx -s reload

6-8、进行访问

访问地址:http://192.168.175.4:88/nacos

 

6-9、配置nacos地址

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/182346?site
推荐阅读
相关标签
  

闽ICP备14008679号