gpt4 book ai didi

SpringCloudAlibaba之Nacos

转载 作者:我是一只小鸟 更新时间:2022-12-28 14:31:44 28 4
gpt4 key购买 nike

目录结构:

 1、Spring Cloud Alibaba简介 。

2、使用版本情况 。

3、什么是Nacos?

4、Nacos运行环境部署 。

5、Nacos注册中心 。

6、Nacos命名空间和分组 。

7、Nacos配置中心 。

8、基于profile多环境配置 。

9、Nacos配置中心动态刷新 。

10、Nacos数据持久化 。

11、Nacos集群部署 。

1、Spring Cloud Alibaba简介 :

Spring Cloud Alibaba是Spring Cloud下的一个子项目,Spring Cloud Alibaba为分布式应用程序开发提供了一站式解决方案,它包含开发分布式应用程序所需的所有组件,使您可以轻松地使用Spring Cloud开发应用程序,使用Spring Cloud Alibaba,您只需要添加一些注解和少量配置即可将Spring Cloud应用程序整合Alibaba的分布式解决方案,并使用Alibaba中间件构建分布式应用程序系统.

2、使用版本情况 。

1、项目所使用的的版本 。

Spring Cloud Alibaba Version Spring Cloud Version Spring Boot Version
2.2.9.RELEASE Spring Cloud Hoxton.SR12 2.3.12.RELEASE

2、Spring Cloud Alibaba 版本及其自身所适配的各组件对应版本:

Spring Cloud Alibaba Version Nacos Version Sentinel Version Seata Version RocketMQ Version Dubbo Version
2.2.9.RELEASE 2.0.4 1.8.5 1.5.2 4.9.4 2.7.13

3、什么是Nacos?

Nacos是阿里巴巴2018年7月推出来的一个开源项目,是一个构建微服务应用的服务注册与发现、配置管理平台; 。

Nacos 属于Spring Cloud Alibaba下的一个组件; 。

Nacos 约等于 Spring Cloud Eureka(注册中心)+ Spring Cloud Config(配置中心) 。

Nacos官网: https://nacos.io/ 。

4、Nacos运行环境部署 。

服务端(部署一个nacos-server)+ 客户端(你的各个服务) 。

步骤:

  1、下载Nacos的二进制压缩包 。

  下载地址: https://github.com/alibaba/nacos/releases 。

  2、解压下载下来的Nacos的二进制压缩包   。

  tar -zxvf nacos-server-2.0.4.tar.gz 。

  3、启动nacos server 。

  [root@localhost bin]# ./startup.sh -m standalone 。

  注:单机环境必须带-m standalone参数启动,否则无法启动,不带参数启动的是集群环境 。

  4、访问nacos的web客户端地址: http://ip地址:8848/nacos 。

  使用默认的用户名:nacos、密码:nacos 。

  5、关闭nacos server 。

  [root@localhost bin]# ./shutdown.sh 。

5、Nacos注册中心 。

Nacos注册中心可以说是类似于Eureka-server的功能 。

微服务开发是controller调用controller,调用者是服务消费者,被调用者是服务提供者,服务消费者和服务提供者是相对概念,服务消费者也可以被另一个服务调用,那么此时的服务消费者也是一个服务提供者; 。

在实际开发中,我们会把所有服务都注册到nacos注册中心上,由nacos去维护和管理我们的所有服务.

5.1、实现服务提供者 。

1、 pom.xml 文件中引入 Nacos Discovery Starter依赖 。

                          
                            <
                          
                          
                            dependency
                          
                          
                            >
                          
                          
                            <
                          
                          
                            groupId
                          
                          
                            >
                          
                          com.alibaba.cloud
                          
                            </
                          
                          
                            groupId
                          
                          
                            >
                          
                          
                            <
                          
                          
                            artifactId
                          
                          
                            >
                          
                          spring-cloud-starter-alibaba-nacos-discovery
                          
                            </
                          
                          
                            artifactId
                          
                          
                            >
                          
                          
                            <
                          
                          
                            version
                          
                          
                            >
                          
                          2.2.9.RELEASE
                          
                            </
                          
                          
                            version
                          
                          
                            >
                          
                          
                            </
                          
                          
                            dependency
                          
                          
                            >
                          
                        

2、配置文件application.yml中添加Nacos Server地址 。

                          
                            spring:
  cloud:
    nacos:
      discovery:
        server-addr: http://ip地址:8848/nacos
        username: nacos
        password: nacos

  application:
    name: nacos-provider
                          
                        

注意:如果不想使用Nacos作为你的服务注册与发现,可以将spring.cloud.nacos.discovery.enabled 设置为 false.

3、启动项目,此时就可以在Nacos的web管控台上看到注册上来的服务信息了; 。

 5.2、实现服务消费者 。

消费者应用比提供者应用要稍微复杂一点,因为在消费端需要去调用提供者提供的REST服务,此时需要用到RestTemplate、OpenFeign及负载均衡Spring Cloud LoadBalancer.

1、添加OpenFeign、Nacos Discovery Starter依赖 。

                          
                            <
                          
                          
                            dependency
                          
                          
                            >
                          
                          
                            <
                          
                          
                            groupId
                          
                          
                            >
                          
                          com.alibaba.cloud
                          
                            </
                          
                          
                            groupId
                          
                          
                            >
                          
                          
                            <
                          
                          
                            artifactId
                          
                          
                            >
                          
                          spring-cloud-starter-alibaba-nacos-discovery
                          
                            </
                          
                          
                            artifactId
                          
                          
                            >
                          
                          
                            <
                          
                          
                            version
                          
                          
                            >
                          
                          2.2.9.RELEASE
                          
                            </
                          
                          
                            version
                          
                          
                            >
                          
                          
                            </
                          
                          
                            dependency
                          
                          
                            >
                          
                          
                            <
                          
                          
                            dependency
                          
                          
                            >
                          
                          
                            <
                          
                          
                            groupId
                          
                          
                            >
                          
                          org.springframework.cloud
                          
                            </
                          
                          
                            groupId
                          
                          
                            >
                          
                          
                            <
                          
                          
                            artifactId
                          
                          
                            >
                          
                          spring-cloud-starter-openfeign
                          
                            </
                          
                          
                            artifactId
                          
                          
                            >
                          
                          
                            </
                          
                          
                            dependency
                          
                          
                            >
                          
                        

2、配置文件application.yml中添加Nacos Server地址 。

                          
                            spring:
  cloud:
    nacos:
      discovery:
        server-addr: http://ip地址:8848/nacos
        username: nacos
        password: nacos

  application:
    name: nacos-consumer
                          
                        

3、新建Feign接口,调用服务提供者 。

                          
                            //
                          
                          
                             nacos-provider是服务提供者的应用名,也就是注册到Nacos中的应用名
                          
                          
@FeignClient(value = "nacos-provider"
                          
                            )

                          
                          
                            public
                          
                          
                            interface
                          
                          
                             ProductFeign {
    
                          
                          
                            //
                          
                          
                             服务提供者对应的controller接口
                          
                          
    @GetMapping("/product/{id}"
                          
                            )
    Product getProduct(@PathVariable(
                          
                          "id"
                          
                            ) Integer id);
}
                          
                        

4、服务消费者接口实现类中注入Feign对象,调用服务提供者 。

                          
                            @Service

                          
                          
                            public
                          
                          
                            class
                          
                           OrderServiceImpl 
                          
                            implements
                          
                          
                             OrderService {
    @Resource
    
                          
                          
                            private
                          
                          
                             OrderDao orderDao;
    @Resource
    
                          
                          
                            private
                          
                          
                             ProductFeign productFeign;
    @Override
    
                          
                          
                            public
                          
                          
                            int
                          
                          
                             addOrder(Integer id) {
        
                          
                          
                            //
                          
                          
                             注入Feign接口对象,调用服务提供者接口
                          
                          
        Product product =
                          
                             productFeign.getProduct(id);
        
                          
                          
                            int
                          
                           result = 0
                          
                            ;
        
                          
                          
                            if
                          
                           (product != 
                          
                            null
                          
                          
                            ) {
            Order order 
                          
                          =
                          
                            
                    Order.builder().orderName(
                          
                          "我购买的").orderMoney(
                          
                            new
                          
                           BigDecimal(1000)).productId(1).orderStatus(0).memberId(1001
                          
                            ).build();
            result 
                          
                          =
                          
                             orderDao.addOrder(order);
        }
        
                          
                          
                            return
                          
                          
                             result;
    }
}
                          
                        

6、Nacos命名空间和分组 。

6.1、命名空间:用于隔离每一个微服务的外部应用配置,每一个微服务都可以有自己单独的配置环境。默认新增的所有服务都在public空间(保留空间).

 新建命名空间,每一个服务都可以创建一个命名空间 。

 6.2、配置分组:默认所有的配置都属于:DEFAULT_GROUP 。

每个微服务创建自己的命名空间,使用配置分组区分环境:开发环境dev,测试环境test以及生产环境prod等 。

创建分组:选择对应的命名空间,点击“+”创建分组配置 。

7、Nacos配置中心 。

Nacos配置中心类似于Spring Cloud Config的功能 。

Spring Cloud Config 使用git仓库存储配置文件,程序员自己创建config-server的服务器,把各个微服务作为客户端 。

Nacos 作为配置中心,配置的信息存储到服务端,就是Nacos。Nacos提供用于存储配置数据功能,为分布式系统中的配置数据提供服务器端和客户端支持,使用Spring Cloud Alibaba Nacos Config就可以在Nacos Server集中管理Spring Cloud应用的外部属性配置; 。

Spring Cloud Alibaba Nacos config是在启动的bootstrap阶段,将配置加载到Spring环境中; 。

通过bootstrap.properties(bootstrap.yml)启动我们的微服务 。

6.1、基于Nacos配置中心构建微服务应用 。

步骤:

1、pom文件中添加Nacos Config依赖 。

                          
                            <
                          
                          
                            dependency
                          
                          
                            >
                          
                          
                            <
                          
                          
                            groupId
                          
                          
                            >
                          
                          com.alibaba.cloud
                          
                            </
                          
                          
                            groupId
                          
                          
                            >
                          
                          
                            <
                          
                          
                            artifactId
                          
                          
                            >
                          
                          spring-cloud-starter-alibaba-nacos-config
                          
                            </
                          
                          
                            artifactId
                          
                          
                            >
                          
                          
                            <
                          
                          
                            version
                          
                          
                            >
                          
                          2.2.9.RELEASE
                          
                            </
                          
                          
                            version
                          
                          
                            >
                          
                          
                            </
                          
                          
                            dependency
                          
                          
                            >
                          
                          
                            <
                          
                          
                            dependency
                          
                          
                            >
                          
                          
                            <
                          
                          
                            groupId
                          
                          
                            >
                          
                          org.springframework.cloud
                          
                            </
                          
                          
                            groupId
                          
                          
                            >
                          
                          
                            <
                          
                          
                            artifactId
                          
                          
                            >
                          
                          spring-cloud-starter-bootstrap
                          
                            </
                          
                          
                            artifactId
                          
                          
                            >
                          
                          
                            <
                          
                          
                            version
                          
                          
                            >
                          
                          3.1.5
                          
                            </
                          
                          
                            version
                          
                          
                            >
                          
                          
                            </
                          
                          
                            dependency
                          
                          
                            >
                          
                        

2、项目配置文件bootstrap.yml中 。

Spring Cloud Alibaba Nacos Config会根据命名空间、DataId、GROUP以及文件后缀名确定唯一一个配置 。

                          
                            spring:
  cloud:
    nacos:
      config:
        server-addr: http://ip地址:8848/nacos
        username: nacos
        password: nacos
        namespace: e769b2bd-5082-4829-82a5-3c98ee6cf758
        group: dev-group
        file-extension: properties

  application:
    name: config-server
                          
                        

3、Nacos中添加外部配置文件 。

4、客户端通过nacos调用外部配置文件,拿到相应的属性值 。

                          
                            @RestController

                          
                          
                            public
                          
                          
                            class
                          
                          
                             ConfigController {
    @Value(
                          
                          "${user.info.username}"
                          
                            )
    
                          
                          
                            private
                          
                          
                             String username;
    @Value(
                          
                          "${user.info.password}"
                          
                            )
    
                          
                          
                            private
                          
                          
                             String password;
    @GetMapping(
                          
                          "/user/info"
                          
                            )
    
                          
                          
                            public
                          
                          
                             String getUserInfo(){
        
                          
                          
                            return
                          
                           username + ": " +
                          
                             password;
    }
}
                          
                        

8、基于profile多环境配置 。

nacos配置中心在加载配置的时候,不仅仅加载了以 dataid为 ${spring.application.name}.${file-extension:properties} 的基础配置,还加载了dataid为 ${spring.application.name}-${profile}.${file-extension:properties} 的基础配置; 。

在日常开发中如果遇到多套环境下的不同配置,可以通过Spring提供的 ${spring.profiles.active} 配置项来激活使用某个配置文件; 。

1、在Nacos中创建两个配置文件 。

 2、修改项目的配置文件bootstrap.yml 。

                          
                            spring:
  cloud:
    nacos:
      config:
        server-addr: http://192.168.0.130:8848/nacos
        username: nacos
        password: nacos
        namespace: e769b2bd-5082-4829-82a5-3c98ee6cf758
        group: user-group
        file-extension: properties

  application:
    name: config-server
  profiles:
    active: dev
                          
                        

如果需要切换到测试环境,只需要更改 ${spring.profiles.active} 参数配置即可,如下所示:

spring.profiles.active=test 。

9、Nacos配置中心动态刷新 。

Nacos Config Starter 默认为所有获取数据成功的 Nacos 的配置项添加了监听功能,在监听到服务端配置发生变化时会实时触发org.springframework.cloud.context.refresh.ContextRefresher的refresh 方法; 。

可以通过配置 spring.cloud.nacos.config.refresh.enabled=false 来关闭动态刷新; 。

controller 加上以下注解 。

                          
                            @RestController
@RefreshScope

                          
                          
                            public
                          
                          
                            class
                          
                          
                             ConfigController {
    @Value(
                          
                          "${user.info.username}"
                          
                            )
    
                          
                          
                            private
                          
                          
                             String username;
    @Value(
                          
                          "${user.info.password}"
                          
                            )
    
                          
                          
                            private
                          
                          
                             String password;
    @GetMapping(
                          
                          "/user/info"
                          
                            )
    
                          
                          
                            public
                          
                          
                             String getUserInfo(){
        
                          
                          
                            return
                          
                           username + ": " +
                          
                             password;
    }
}
                          
                        

10、Nacos数据持久化 。

参考网址: https://nacos.io/zh-cn/docs/deployment.html 。

Nacos默认情况下是采用 apache derby内嵌数据库进行数据存储,在单机模式时可以使用 nacos嵌入式数据库实现数据存储,但是 derby数据库不方便观察数据存储的基本情况,从 acos 0.7版本开始增加了支持 mysql数据源能力; 。

具体操作步骤:

第一步:安装数据库,版本要求:5.6.5+; 。

第二步:初始化MySQL数据库(也就是生成对应的数据库和表),数据库初始化文件: nacos-mysql.sql,该文件可以在Nacos程序包下的 conf目录下获得 。

第三步:修改 conf/application.properties文件,增加支持MySQL数据源配置,添加(目前只支持 mysql)数据源的 url、用户名和密码 。

                          #
                          
                            ***************
                          
                           Config Module Related Configurations 
                          
                            ***************
                          
                          
                            #
    
                          
                          
                            32
                          
                              ### 
                          
                            If
                          
                          
                            use
                          
                           MySQL 
                          
                            as
                          
                          
                             datasource:
    
                          
                          
                            33
                          
                               spring.datasource.platform
                          
                            =
                          
                          
                            mysql
    
                          
                          
                            34
                          
                          
                            35
                          
                              ### 
                          
                            Count
                          
                          
                            of
                          
                          
                             DB:
    
                          
                          
                            36
                          
                               db.num
                          
                            =
                          
                          
                            1
                          
                          
                            37
                          
                          
                            38
                          
                              ### Connect URL 
                          
                            of
                          
                          
                             DB:
    
                          
                          
                            39
                          
                               db.url.
                          
                            0
                          
                          
                            =
                          
                          jdbc:mysql:
                          
                            //
                          
                          
                            127.0
                          
                          .
                          
                            0.1
                          
                          :
                          
                            3306
                          
                          
                            /
                          
                          nacos_config?characterEncoding
                          
                            =
                          
                          utf8
                          
                            &
                          
                          connectTimeout
                          
                            =
                          
                          
                            1000
                          
                          
                            &
                          
                          socketTimeout
                          
                            =
                          
                          
                            3000
                          
                          
                            &
                          
                          autoReconnect
                          
                            =
                          
                          true
                          
                            &
                          
                          useUnicode
                          
                            =
                          
                          true
                          
                            &
                          
                          useSSL
                          
                            =
                          
                          false
                          
                            &
                          
                          serverTimezone
                          
                            =
                          
                          Asia
                          
                            /
                          
                          
                            Shanghai
    
                          
                          
                            40
                          
                               db.
                          
                            user
                          
                          .
                          
                            0
                          
                          
                            =
                          
                          
                            root
    
                          
                          
                            41
                          
                               db.password.
                          
                            0
                          
                          
                            =
                          
                          
                            123456
                          
                        

第四步:然后启动 nacos(还是单机启动),此时发现 nacos所有嵌入式数据库的数据都写到了 mysql; 。

11、Nacos集群部署 。

具体配置步骤:

1、准备三个nacos,3个或3个以上Nacos节点才能构成集群; 。

2、在Nacos的conf目录下有一个cluster.conf.example,可以直接把example扩展名去掉来使用,也可以单独创建一个 cluster.conf文件,然后在该文件中每行配置一个 ip:port; 。

 端口号需要和对应nacos的文件application.properties中的端口号一致 。

3、按照上面nacos持久化的方式配置好数据持久化到MySQL,生产使用建议至少主备模式,或者采用高可用数据库 。

4、启动测试; 。

集群下客户端怎么连?

第一种:可以在单机的基础上加多个IP和端口中间用逗号隔开; 。

                          
                            spring:
  cloud:
    nacos:
      config:
        server-addr: http://ip地址1:8848/nacos,http://IP地址2:8848/nacos,http://ip地址3:8848/nacos
        username: nacos
        password: nacos
        namespace: e769b2bd-5082-4829-82a5-3c98ee6cf758
        group: user-group
        file-extension: properties

  application:
    name: config-server
  profiles:
    active: dev
                          
                        

第二种:配合Nginx代理我们的Nacos集群,配置里就直接写Nginx的IP和端口即可; 。

  。

最后此篇关于SpringCloudAlibaba之Nacos的文章就讲到这里了,如果你想了解更多关于SpringCloudAlibaba之Nacos的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com