不要在该奋斗的年纪选择了安逸;|

黎华扬

园龄:8年1个月粉丝:4关注:3

spring cloud alibaba (一)

Spring Cloud Alibaba

官网:https://spring.io/projects/spring-cloud-alibaba

gitHub:https://github.com/alibaba/spring-cloud-alibaba

这节主要目标:

  • 掌握nacos使用
  • 了解服务与服务之间调用

1、简介

1.1、什么是分布式

将一套系统拆分成不同子系统部署在不同服务器上(这叫分布式)

1.2、什么是Spring Cloud

spring cloud提供了一些可以让开发者快速构建分布式应用的工具。

主要解决了分布式中,服务注册发现,远程服务调用,负载均衡,配置中心,链路监控等组件问题。

1.3、什么是Spring Cloud Alibaba

Spring Cloud Alibaba 提供分布式应用开发的一站式解决方案

它包含开发分布式应用程序所需的所有组件。

只需添加一些注解和少量配置,即可构建分布式应用系统。

基于Spring Cloud上进行改进。

1.4、Spring Cloud Alibaba相关组件

组件 作用
nacos 注册中心(服务注册与发现)、配置中心(动态配置管理)
Ribbon 负载均衡
Feign 声明式Http客户端(调用远程服务)
Sentinel 服务容错(限流、降级、熔断)
Gateway API网关(webflux编程模式)
Sleuth 调用链监控
Seata 原Fescar,即分布式事务解决方案

2、添加依赖

一定找对应spirngboot版本的springcloud版本。

一定要注意版本之间的兼容。

ub.com/alibaba/spring-cloud-alibaba

springcolud alibaba版本说明:https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明

添加spring-cloud-alibaba-dependencies

<properties>
    <java.version>1.8</java.version>
    <spring.cloud.version>2021.0.3</spring.cloud.version> <spring.cloud.alibaba.version>2021.0.1.0</spring.cloud.alibaba.version>
</properties>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring.cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <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>

3、Nacos

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

nacos官方文档:https://nacos.io/zh-cn/

提供了分布式中的服务注册与发现配置中心管理功能。

3.1、nacos安装

安装有很多方法:

1、从 最新稳定版本 下载 nacos-server-$version.zip 包。

2、通过docker管理。

docker run --name nacos -e MODE=standalone -p 8848:8848 -d nacos/nacos-server:v2.1.1

安装成功后访问,http://localhost:8848/nacos/#/login

默认账号密码:nacos

3.2、服务注册

1、引用依赖

<!--nacos服务注册/发现-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2、添加配置,开启注解

application.properties或者使用application.yaml

server.port=8081
spring.application.name=a-demo
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
management.endpoints.web.exposure.include=*

在启动类上开启注解

// 开启服务注册
@EnableDiscoveryClient
@SpringBootApplication
public class ADemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(ADemoApplication.class, args);
    }

}

3.3、启动项目,在Nacos 控制台上看到已注册的服务

3.3、配置中心

从nacos引用配置,方便管理

1、引用依赖

<!--nacos配置中心-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--解决版本太高了,无法读取bootstrap.yml文件-->
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

2、添加配置

bootstrap.properties

采用bootstrap是因为优先级高。

spring.application.name=a-demo
spring.cloud.nacos.config.server-addr=127.0.0.1:8848

默认配置名:${spring.application.name}.properties

3、添加naocs配置,测试。

a-demo.properties

4、测试

@SpringBootApplication
@EnableDiscoveryClient
public class ADemoApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext applicationContext = SpringApplication.run(ADemoApplication.class, args);
        String userName = applicationContext.getEnvironment().getProperty("user.name");
        String userAge = applicationContext.getEnvironment().getProperty("user.age");
        System.err.println("user name :" +userName+"; age: "+userAge);
//        SpringApplication.run(ADemoApplication.class, args);
    }

}

3.4、配置yaml格式

配置中心可以配置yaml 格式

1、配置文件bootstrap.properties

spring.cloud.nacos.config.file-extension=yaml

2、在nacos上添加配置。

测试:

3.5、动态加载

1、默认是动态加载。

// 自动刷新配置,放在配置类上即可。
// @RefreshScope

3.6、命名空间

命名空间用于隔离不同用户的配置。

典型场景是不同环境的配置隔离,例如开发/测试环境和生产环境的隔离。

1、创建新的命名空间

2、使用新的命名空间

bootstrap.properties

spring.cloud.nacos.config.namespace=f11392fe-84e0-48a1-9da5-71052b6a3af1

在新命名空间,创建文件并测试

测试:

服务也可以注册到不同的命名空间上

spring.cloud.nacos.discovery.namespace=f11392fe-84e0-48a1-9da5-71052b6a3af1

3.7、GROUP分组

可以根据分组不同,选择不同的配置。

1、创建新的分组测试

bootstrap.properties

spring.cloud.nacos.config.group=DEV_GROUP

3.8、公共配置

存在一个配置,多个项目共用配置使用情况。

# 公共配置的 data-id,支持一个应用程序的多个配置,通过下标来指向。
spring.cloud.nacos.config.ext-config[0].data-id=config-common01.properties
# 指定分组,默认DEFAULT_GROUP(非必需)
spring.cloud.nacos.config.ext-config[0].group=GLOBALE_GROUP
# 开启动态配置(非必需)
spring.cloud.nacos.config.ext-config[0].refresh=true

spring.cloud.nacos.config.ext-config[n].data-id。n值越大,优先级越高。

更清晰表示多个项目与配置之间的关联,还可以:

# 多个数据 id,用逗号分隔
spring.cloud.nacos.config.shared-dataids=bootstrap-common.properties,all-common.properties
# 指定动态更新配置
spring.cloud.nacos.config.refreshable-dataids=bootstrap-common.properties

数据Id必须有文件扩展名,可以是properties或者yaml/yml

4、Feign

用于服务与服务之间的调用

声明式,HTTP 形式的 API

例如,a服务调用b服务的接口。

服务都需要在nacos上注册。

4.1、添加依赖

<!-- openfeign -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- 负载均衡(不添加openfeign会报错) -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>

4.2、启动类添加注解

@EnableFeignClients

4.3、添加接口

1、添加调用接口

// 调用 b-demo 服务下的方法
@FeignClient(name = "b-demo")
public interface BdemoServcieFeignClient {

    @GetMapping("/list")
    String list();
}

2、添加服务的接口

b服务的controller

@RestController
public class IndexController {

    @GetMapping("/list")
    public String list(){
        return "这是 B 服务的接口";
    }
}

3、a服务调用b服务的接口


@RestController
public class IndexController {

    @Autowired
    BdemoServcieFeignClient bdemoServcieFeignClient;

    @GetMapping("/list")
    public String getConfig(){
        String str = bdemoServcieFeignClient.list();
        return "A服务+"+ str;
    }
}

启动项目测试:

4.4、服务不在线时

如果在调用服务不在线,会报错。

后端控制台:


我们下次继续讲 Gateway 网关。
spring cloud alibaba 2021.0.1.0官方文档:
https://spring-cloud-alibaba-group.github.io/github-pages/2021/en-us/index.html#_introduction

本文作者:黎华扬

本文链接:https://www.cnblogs.com/galenblog/p/16662915.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   黎华扬  阅读(86)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起