SpringCloud Alibab篇

本文总阅读量
本文最后更新于2 分钟前,文中所描述的信息可能已发生改变。

CAP概念

C: 一致性 、A:可用性 、P:分区容错性

Nacos与启动

Nacos:Eureka + Config + Bus 包含了注册中心、配置中心、动态刷新配置的功能,即是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

启动:在安装 nacos 的 bin 目录下输入命令:startup.cmd -m standalone 即以单机模式启动。

父工程

依赖:

xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.ecjtu</groupId>
    <artifactId>spring-cloud-alibaba</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <modules>
        <module>alibaba-provider</module>
        <module>alibaba-provider2</module>
        <module>nacos-consumer</module>
    </modules>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.17</version>
    </parent>
    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <spring-cloud-alibaba.version>2021.0.4.0</spring-cloud-alibaba.version>
        <spring-cloud.version>2021.0.8</spring-cloud.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>
</project>

服务方配置

  1. 依赖引入
xml
<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>
  1. yml配置文件
yml
server:
  port: 8000
spring:
  application:
    name: alibaba-provider
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #nacos注册中心地址
  1. 启动类上加上@EnableDiscoveryClient

消费方配置

  1. 依赖引入
xml
<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>
    <!-- 需要排除掉其中的ribbon,因为已经不再使用,使用的是spring-cloud-starter-loadbalancer -->
    <exclusions>
        <exclusion>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<!-- 使用loadbalancer来作为负载均衡策略 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
  1. yml配置文件
yml
server:
  port: 9000
spring:
  application:
    name: nacos-consumer
  cloud:
    loadbalancer:
      ribbon:
        enabled: false # 禁用ribbon
    nacos:
      discovery:
        server-addr: localhost:8848
  1. 启动类上加上@EnableDiscoveryClient
  2. 在配置类中将 RestTemplate 注入容器
java
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
    return new RestTemplate();
}
  1. 在需要使用 RestTemplate 的地方注入即可

与OpenFeign组件集成

就是导入依赖,和在Eureka中的配置一样,可以将这个组件看成是单独的东西。

Nacos配置中心

Nacos本身作为配置中心,不需要另外创建一个服务。

  1. 在需要配置中心的服务中引入依赖
xml
<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>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<!--nacos配置中心依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
  1. 启动类上加上@EnableDisCoveryClient在controller层加上注解@RefreshScope和Netflix的配置中心使用大差不差
  2. 配置文件 application.yml
yaml
# 指定要从nacos中获取那个环境下的配置文件
spring:
  profiles:
    active: dev

bootstrap.yml

yaml
server:
  port: 8888
spring:
  application:
    name: nacos-config
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 # 注册中心地址
      config:
        server-addr: localhost:8848 # 配置中心地址
        file-extension: yaml # 指定文件类型
        #group: BJ_GROUP # 指定配置文件所在分组
        #namespace: 5b493dad-ea2a-464f-aab7-87cecdf6e3c7 #指定命名空间id

配置文件持久化存储

  1. 初始化数据库 在 nacos 的 conf 目录下面有 mysql-schema.sql 文件,在自己创建的数据库中使用该文件初始化即可。
  2. 在安装 nacos 的目录下的 conf 中的 application.properties 文件中打开并修改以下配置,将数据库名称、用户名、密码修改为自己的:
yaml
#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
### Deprecated configuration property, it is recommended to use `spring.sql.init.platform` replaced.
 spring.datasource.platform=mysql
# spring.sql.init.platform=mysql

### Count of DB:
 db.num=1

### Connect URL of DB:
 db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
 db.user.0=nacos #改为自己的
 db.password.0=nacos #改为自己的

集群配置

就是在Linux下载安装,更改配置文件中的端口,数据库,并启动就行。

Nginx负载均衡

修改配置文件中 http 下的部分

xml
upstream cluster{
        server 192.168.246.128:6666; # nacos的ip和端口
        server 192.168.246.128:7777;
        server 192.168.246.128:8888;
}
server {
    listen       5555;
    server_name  localhost;

    #charset koi8-r;

    #access_log  logs/host.access.log  main;

    location / {
        #root   html;
        #index  index.html index.htm;
        proxy_pass http://cluster;
    }
}

SpringCloud Alibaba Sentinel哨兵实现熔断与限流(替代Hystrix)

把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。需要去Github上下载并安装 Sentinel中文文档 。安装好后在cli中使用java -jar sentinel-dashboard-x.x.x.jar将 java 程序运行起来,用户浏览器中访问 localhost:8080 即可访问Sentinel控制台页面(账号密码默认sentinel),程序访问8719端口。

Sentinel配置持久化

  1. 引入依赖
xml
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
  1. 配置文件配置
yml
spring:
  cloud:
    sentinel:
      datasource:
        ds1:
          nacos: # 将配置信息存到nacos当中
            server-addr: localhost:8848
            dataId: ${spring.application.name} # 该服务的服务名
            groupId: DEFAULT_GROUP # 配置信息将要配置到哪个组
            data-type: json # 配置格式
            rule-type: flow # 属于流控规则的配置
windows快捷键
SpringCloud Eureka篇
Valaxy v0.18.5 驱动 | 主题 - Yun v0.18.5
本站总访问量
本站访客数 人次
本站已运行0 天0 小时0 分0 秒后缀