SpringCloudAlibaba第一章(Nacos)

目录

1:安装Nacos

2:什么是Nacos

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:安装Nacos

下载:官网Releases · alibaba/nacos · GitHub下载版本

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

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

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

2:什么是Nacos

官网快速开始

Nacos 快速开始

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配置



    <!--父工程 springboot 2.1.3-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.3.RELEASE</version>
      
    </parent>

    <!--统一jar的版本管理-->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
        <spring-cloud-alibaba.version>2.1.0.RELEASE</spring-cloud-alibaba.version>

    </properties>

    <!--父工程管理子项目  子项目不用指定版本号 子项目需要引入具体的需求包-->
    <dependencyManagement>
        <dependencies>
            <!--springcloud 包Greenwich-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--springcloud阿里巴巴包 采用2.1-->
            <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>



  

</project>

4.1:提供者8001和8002的pom

 <dependencies>

        <!--nocas依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <!--Spring web 依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>

        </dependency>

        <!--图形监控-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

      

    </dependencies>

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

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

/**
 * @author :huyiju
 * @date :2020-05-15 21:03
 */
@RestController
public class Controller {

   @Value("${server.port}")
    String port;
    @RestController
    public class add {
        @GetMapping(value = "/add")
        public String add() {

            return "服务端nocas端口号:"+port;
        }
    }

}

4.3: 提供者8001和8002的properties

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

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

@SpringBootApplication
@EnableDiscoveryClient//nocas服务发现注解
public class Mian8002 {
    public static void main(String[] args) {
        SpringApplication.run(Mian8002.class,args);

    }
}

 4.5:启动查看

5:消费者使用案例

5.1:消费者8003的pom

 <dependencies>

        <!--nacos的服务注册配置-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--nacos的config配置 用于动态配置-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

        <!--Spring web 依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>

        </dependency>

        <!--图形监控-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>


    </dependencies>

5.2:消费者8003的properties


#1:项目初始化配置项目名字
spring.application.name=nacos-8003
server.port=8003
#服务注册到nacos.discovery
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
management.endpoints.web.exposure.include=*


#2:配置文件读取地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
#文件后缀
spring.cloud.nacos.config.file-extension=yaml

#配置不同的环境
spring.profiles.active=info

#自定义组文件
spring.cloud.nacos.config.group=huyiju

#自定义命名空间
#spring.cloud.nacos.config.namespace=b726e92d-6766-4e05-b35b-a2128c25f00e


5.3:消费者8003的controller

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

@RestController
@RefreshScope //动态刷新获取config,config的注解
public class Controller {

    /**
     * 调用nocas上注册的服务
     * 采用restTemplate1+robbin的LoadBalanced注解
     * @return
     */
    @Resource
    private RestTemplate restTemplate1;

    @RequestMapping(value = "/get")
    public String add (){
        String url="http://huyiju-nacosservice/add";
        System.out.println("进入调用");
        return restTemplate1.getForObject(url,String.class);

    }
}


@Configuration
public class RestConfig {
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return  new RestTemplate();
    }
}

5.4:消费者8003的mian方法

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


}

5.5:启动查看

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

http://localhost:8003/get

6:动态配置使用

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

6.1:8003的properties


#1:项目初始化配置项目名字
spring.application.name=nacos-8003
server.port=8003
#服务注册到nacos.discovery
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
management.endpoints.web.exposure.include=*


#2:配置文件读取地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
#文件后缀
spring.cloud.nacos.config.file-extension=yaml

#配置不同的环境
spring.profiles.active=info

#自定义组文件
spring.cloud.nacos.config.group=huyiju

#自定义命名空间
#spring.cloud.nacos.config.namespace=b726e92d-6766-4e05-b35b-a2128c25f00e


6.2:服务器新建配置

6.3:controller方法

 /**
     * 读取指定名字的yml文件
     * nacos-8003-dev.yaml
     * 项目名字-环境.yaml
     */
    @Value("${aa.bb}")
    public String aa;
    @RequestMapping(value = "/dev")
    public String dev (){
        System.out.println("读取dev配置文件");
        return aa;

    }

    /**
     * 读取指定名字的yml文件
     * nacos-8003-test.yaml
     * 项目名字-环境.yaml
     */
    @Value("${aa.bb}")
    public String bb;
    @RequestMapping(value = "/test")
    public String test (){
        System.out.println("读取test配置文件");
        return bb;

    }

    /**
     * 自定义group获取指定文件
     *
     *
     */
    @Value("${aa.bb}")
    public String cc;
    @RequestMapping(value = "/group")
    public String group (){
        System.out.println("读取group配置文件");
        return cc;

    }

    /**
     * 自定义group获取指定文件和自定义命名空间
     *
     *
     */

    @Value("${aa.bb}")
    public String ff;
    @RequestMapping(value = "/namespece")
    public String namespece (){
        System.out.println("读取group分组和自定义命名空间-配置文件");
        return ff;

    }

在测试的过程中,即使nacos挂了,消费者也能够调用服务提供者,因为消费者本地会从nacos注册中心中下载一份服务列表到本机,所以即使nacos挂了,也能调用。但是这是不能注册新的服务了。这就是注册表缓存。

7:Nacos的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服务页面

在这里插入图片描述
 

  • 8
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: Spring Cloud Alibaba 是一个基于 Spring Cloud 的开源框架,用于构建分布式应用程序。Nacos 是一个开源的服务发现、配置管理和服务管理平台,可以帮助开发人员更好地管理和维护分布式应用程序。 要搭建 Spring Cloud AlibabaNacos,需要按照以下步骤进行操作: 1. 下载和安装 JDK 和 Maven。 2. 创建一个 Spring Boot 项目,并添加 Spring Cloud AlibabaNacos 的依赖。 3. 在 Nacos 中创建一个命名空间和一个服务。 4. 在 Spring Boot 项目中配置 Nacos 的地址和服务信息。 5. 编写代码并运行应用程序。 具体的步骤可以参考 Spring Cloud AlibabaNacos 的官方文档,或者参考其他相关的教程和资料。 ### 回答2: SpringCloudAlibaba是一款非常流行的分布式系统框架,它提供了一个非常方便的方式来搭建高可扩展的分布式应用程序。当使用SpringCloudAlibaba构建分布式应用程序时,我们常常需要使用Nacos作为服务注册中心和配置中心。本文将介绍如何使用SpringCloudAlibaba来搭建Nacos。 首先,我们需要在本地安装Nacos。 步骤如下: 1. 下载Nacos:https://github.com/alibaba/nacos/releases 2. 解压下载的文件,进入bin目录 3. 运行startup.cmd(如果是在Linux系统下,运行startup.sh) 当我们成功启动Nacos后,我们需要在我们的应用程序中添加Nacos的依赖项。可以在pom.xml文件中添加如下代码: ``` <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> ``` 这个依赖项将会自动添加Spring Cloud Nacos Discovery的类和配置。 接下来,我们需要为我们的应用程序添加Nacos配置。可以在application.properties或者application.yml文件中添加如下代码: ``` spring.cloud.nacos.discovery.server-addr=localhost:8848 ``` 当我们的应用程序启动时,它将会自动注册到Nacos。 最后,我们需要在我们的应用程序中使用Nacos作为配置中心。可以在配置文件中添加如下配置: ``` spring.cloud.nacos.config.server-addr=localhost:8848 ``` 这个配置项将会告诉我们的应用程序从Nacos中加载配置项。 当我们成功完成这些步骤后,我们的应用程序就已经成功地搭建了Nacos。现在我们可以使用Nacos作为服务注册中心和配置中心来管理我们的应用程序了。 ### 回答3: SpringCloudAlibaba是阿里巴巴团队推出的微服务框架,其中的nacos作为注册中心、配置中心以及服务发现组件,是使用SpringCloudAlibaba搭建微服务架构的重要组成部分。 下面是搭建nacos的详细步骤: 1.安装Java环境和Maven环境。在安装之前需要确保已经正确配置好Java和Maven的环境变量。 2.下载nacos的安装包。从nacos的官网中下载最新版的nacos安装包,解压缩到任意目录下。 3.启动nacos server。通过命令行进入nacos安装包所在的bin目录下,使用以下命令启动nacos: Linux/Unix/Mac: sh startup.sh –m standalone Windows: cmd startup.cmd 启动成功后通过访问http://localhost:8848/nacos/访问nacos的管理控制台,管理员账号和密码默认为nacos/nacos。 4.配置nacos客户端。在pom.xml文件中添加nacos的依赖: <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId> spring-cloud-starter-alibaba-nacos-discovery </artifactId> </dependency> 在配置文件application.yml中配置nacos信息: spring: cloud: nacos: discovery: server-addr: localhost:8848 # nacos服务的地址 application: name: service-provider # 微服务的名称 5.发布和发现微服务。使用@EnableDiscoveryClient注解启用服务发现功能,在微服务启动时自动注册到nacos中,nacos管理控制台会显示注册的微服务信息。其他微服务可以通过调用nacos的API或者使用Ribbon等工具进行服务发现。 至此,使用SpringCloudAlibaba搭建nacos的过程就结束了。nacos提供的服务注册、配置管理和服务发现功能,为微服务的构建和部署提供了更方便、更高效、更可靠的方案。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值