9.8(SpringCloudAlibaba)概念和Nacos使用

概念

为什么会出现SpringCloudAlibaba

  1. 前面学习SpringCloud发现很多技术都是结合Netflix进行整合的。

  2. 后面NetFlix公司很多的技术进入了维护阶段。

  3. 这里个时候Alibaba推出SpringCloudAlibaba。又是一套微服务的解决方案

  4. 最开始Alibaba推出过duboo作为RPC分布式处理框架

  5. 后面被Springcloud取代微服务一站式框架

  6. 再后来Alibaba推出SpringCloudAlibaba。

  7. 老师常说:神仙打架,凡人遭殃

SpringCloudAlibaba带来了什么

2018.10.31,Spring Cloud Alibaba 正式入驻了 Spring Cloud 官方孵化器,并在 Maven 中央库发布了第一个版本。

在这里插入图片描述

功能

  1. 服务限流降级:默认支持 Servlet、Feign、RestTemplate、Dubbo 和 RocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控。
  2. 服务注册与发现:适配 Spring Cloud 服务注册与发现标准,默认集成了 Ribbon 的支持。
  3. 分布式配置管理:支持分布式系统中的外部化配置,配置更改时自动刷新。
    消息驱动能力:基于 Spring Cloud Stream 为微服务应用构建消息驱动能力。
  4. 阿里云对象存储:阿里云提供的海量、安全、低成本、高可靠的云存储服务。支持在任何应用、任何时间、任何地点存储和访问任意类型的数据。
  5. 分布式任务调度:提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有 Worker(schedulerx-client)上执行。

怎么玩

在这里插入图片描述

我再访问硅谷和网上提供的中文地址的时候,可能因为网络原因就是访问不出来

https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md

Nacos注册中心

SpringCloudAlibabaNacos 是服务注册中心和配置中心

nacos = naming+configuration+service表示不仅是注册中心还是配置中心

nacos功能=Eureka+Config+Bus

安装Nacos服务端

官网下载:

https://github.com/alibaba/nacos/releases

进入之后可以根据需要向下查找版本

然后进行下载压缩文件即可

在这里插入图片描述

在这里插入图片描述

使用

因为使用startup.cmd命令启动是以集群方式启动nacos,可以看见命令行中有“nacos is starting with cluster”

所以启动使用cmd进行启动指定

我们可以以单机方式启动nacos,执行以下命令

startup.cmd -m standalone

启动正常,访问http://localhost:8848/nacos即可

示例

在这里插入图片描述

访问成功页面

在这里插入图片描述

默认:账号密码都是nacos

服务列表现在什么都不显示

在这里插入图片描述

向nacos注册中心添加客户端

首先是引入依赖

再父工程引入SpringCloudAlibaba的dependencies依赖之后使用SpringCloudAlibaba方便

父工程依赖

 <dependencies>

            <!-- nacos属于Alibaba管理依赖-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.5.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!--springCloud的依赖-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--SpringBoot-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.2.4.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>

服务客户端

引入依赖
 <!--SpringBoot 启动器-->
        <!-- restTemplate本身就存在与SpringBoot中-->
        <!--导入Starter依赖-->
        <!--因为再父类已经管理好了版本号-->
        <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>
主程序类

使用注解开启服务注册和发现

@SpringBootApplication
//表示开启   注册中心 客户端
@EnableDiscoveryClient
public class ModuleOne {
    public static void main(String[] args) {
        SpringApplication.run(ModuleOne.class,args);

    }
}

yaml

这里进行指定类nacos位置,服务名,端口等常见的配置

server:
  port: 8091

spring:
  application:
    name: providerHeima
  cloud:
    nacos:
      discovery:
        namespace: public
        server-addr: localhost:8848

想要进行客户端集群操作。

  1. 再次编写一个模块
  2. 通过IDEA的克隆服务模块
Idea的Service

我们再使用负载均衡的时候需要多个服务

Idea中可以通过service来复制一个微服务

idea版本

我使用的版本是2020.1.1,service窗口中可以以配置方式启动微服务,一般是配置不同端口号启动。如下图。
(但是在旧版本中,对应的窗口叫做Run Dashboard窗口,旧版本的解决办法网上文章很多,请自行查找。)

img

我的Idea版本比较低,所以Run Dashboard

在这里插入图片描述

复制微服务,修改端口,因为端口重复会冲突

在这里插入图片描述

设置一些配置即可

端口号,项目名等

在这里插入图片描述

配置端口号

-Dserver.prot=8891
开启rundashboard

有的时候发现IDEA中没有RundashBoard,所以需要进行配置一下

在这里插入图片描述

这里可以通过IDEA的ctrl+f进行查找

在这里插入图片描述

        <option name="configurationTypes">
	      <set>
	        <option value="SpringBootApplicationConfigurationType" />
	      </set>
	    </option>

引入这段内容之后,重启服务即可

结果展示

在这里插入图片描述

点击详情可以查看更加详细的信息

在这里插入图片描述

下面的使用Ribbon和Feign都与Eureka类似

负载均衡

这里的操作与Eureka的操作基本上都一直。nacos只是作为了Eureka的功能操作

进行搭建就不展示,直接展示目录结构和,注册中心的服务展示

再Nacos中jar文件集成了很多我们的ribbon
在这里插入图片描述

Nacos展示

在这里插入图片描述

Nacos注册中心对比

nacos对于AP和CP都是支持的,可以进行来回切换。

在这里插入图片描述

在这里插入图片描述

  1. C是所有节点在同一时间看到的数据是一致的;
  2. A的定义是所有的请求都会收到响应。

何时选择使用何种模式?

  1. 一般来说,
    如果不需要存储服务级别的信息且服务实例是通过nacos-client注册,并能够保持心跳上报,那么就可以选择AP模式。当前主流的服务如 Spring cloud 和 Dubbo 服务,都适用于AP模式,AP模式为了服务的可能性而减弱了一致性,因此AP模式下只支持注册临时实例。
  2. 如果需要在服务级别编辑或者存储配置信息,那么 CP 是必须,K8S服务和DNS服务则适用于CP模式。
  3. CP模式下则支持注册持久化实例,此时则是以 Raft 协议为集群运行模式,该模式下注册实例之前必须先注册服务,如果服务不存在,则会返回错误。
//进行切换
curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'

Nacos配置管理

统一配置管理

在SpringCloud中使用SpringConfig进行结合git进行多个服务之间的统一配置文件

因为在之后使用中会存在很多服务,如果以后需要更改配置可能需要大量的服务都更改配置,为了更好进行管理,所以出现了统一配置管理

nacos不仅可以作为注册中心,还具有配置管理功能

步骤

Nacos添加配置信息

在这里插入图片描述

在这里插入图片描述

配置获取的步骤

在这里插入图片描述

引入Nacos配置管理的依赖

<!--nacos配置管理依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

BootStrap.yaml文件

在被管理的服务中的resource目录添加一个bootstrap.yml文件,这个文件是引导文件,优先级高于application.yml:

spring:
  application:
    name: userservice # 服务名称
  profiles:
    active: dev #开发环境,这里是dev 
  cloud:
    nacos:
      server-addr: localhost:8848 # Nacos地址
      config:
        file-extension: yaml # 文件后缀名

我的操作

添加配置信息

在这里插入图片描述

引入依赖

当然这里面还需要引入多个依赖,比如devtools,actuator等

 <dependencies>
        <!--SpringBoot 启动器-->
        <!-- restTemplate本身就存在与SpringBoot中-->
        <!--导入Starter依赖-->
        <!--因为再父类已经管理好了版本号-->
        <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>

        <!--nacos配置管理依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>


    </dependencies>

bootstrap.yaml

可以将一些application的yaml放入bootstrap配置文件中



server:
  port: 8881

spring:
  application:
    name: moduleOne # 服务名称
  profiles:
    active: dev #开发环境,这里是dev
  cloud:
    nacos:
      server-addr: localhost:8848  # Nacos地址
      config:
        file-extension: yaml    # 文件后缀名

controller控制器

@Controller
//表示开启热部署   当consul中配置更新随着更新数据
@RefreshScope
public class ControllerOneTest {


    @Value("${name}")
    private String name;

    @RequestMapping("show")
    @ResponseBody
    public String show(){

        return name;
    }

}

结果展示

获取到了 consul配置中的数据

在这里插入图片描述

当改变consul中配置文件数据

随之动态改变
在这里插入图片描述

Nacos的分类配置

  1. 类似Java里面的package名和类名
  2. 最外层的namespace是可以用于区分部署环境的,Group和DataID逻辑上区分两个目标对象。

在这里插入图片描述

默认值

  1. Namespace=public
  2. Group=DEFAULT_GROUP
  3. 默认Cluster是DEFAULT

四个术语不同表示

  1. Nacos默认的命名空间是public,Namespace主要用来实现隔离。
    比方说我们现在有三个环境:开发、测试、生产环境,我们就可以创建三个Namespace,不同的Namespace之间是隔离的。

  2. Group默认是DEFAULT_GROUP,Group可以把不同的微服务划分到同一个分组里面去

  3. Service就是微服务;一个Service可以包含多个Cluster(集群),Nacos默认Cluster是DEFAULT,Cluster是对指定微服务的一个虚拟划分。
    比方说为了容灾,将Service微服务分别部署在了杭州机房和广州机房,
    这时就可以给杭州机房的Service微服务起一个集群名称(HZ),
    给广州机房的Service微服务起一个集群名称(GZ),还可以尽量让同一个机房的微服务互相调用,以提升性能。

  4. 最后是Instance,就是微服务的实例。

添加一个命名空间

在这里插入图片描述

分类再Nacos中的展示

在这里插入图片描述

在这里插入图片描述

通过 配置DataId Group 命名空间来查找不同的配置文件

在这里插入图片描述

DateId

再同一个命名空间中,同一个组中, 服务指定不同的dataid 来读取不同的配置文件

在这里插入图片描述

bootstrap.yaml修改


spring:
  application:
    name: moduleOne # 服务名称
  profiles:
    active: dev #开发环境,这里是dev
#   active: test  通过修改指定的  dataid对应的值来改变读取的配置
    

Group

再相同的命名空间 不同组 相同的DataId
在这里插入图片描述

在这里插入图片描述

命名空间

  1. 不同的命名空间,相同的组,相同的Dataid
  2. 命名空间的范围>组>dataid

查看命名空间id

在这里插入图片描述

再yaml配置文件中进行指定

spring:
  application:
    name: moduleOne # 服务名称
  profiles:
    active: dev #开发环境,这里是dev
#   active: test  通过修改指定的  dataid对应的值来改变读取的配置
  cloud:
    nacos:
      server-addr: localhost:8848  # Nacos地址
      config:
        file-extension: yaml    # 文件后缀名
        namespace: test001  #指定命名空间
        group: DEFAULT  #指定分组
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值