SpringCloud 组件

1. SpringCloud Alibaba简介


1)简介
Spring Cloud Alibaba致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过Spring Coud编程模型轻松使用这些组件来开发分布式应用服务。
依括Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将Spring Cloud应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。

https://github.com/alibaba/spring-cloud-alibaba
2)SpringCloud相关

SpringCloud的几大痛点

  • SpringCloud部分组件停止维护和更新,给开发带来不便;
  • SpringCloud 部分环境搭建复杂,没有完善的可视化界面,我们需要大量的二次开发和定制
  • Springcloud配置复杂,难以上手,部分配置差别难以区分和合理应用

SpringCloud Alibaba的优势:

  • 阿里使用过的组件经历了考验,性能强悍,设计合理,现在开源出来大家用
  • 成套的产品搭配完善的可视化界面给开发运维带来极大的便利
  • 搭建简单,学习曲线低。

结合Springcloud Alibaba我们最终的技术搭配方案:

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

3)版本选择
由于Spring Boot 1和Spring Boot 2在Actuator模块的接口和注解有很大的变更,且spring-cloud-commons从1.xx版本升级到2.0.0版本也有较大的变更,因此我们采取跟SpringBoot 版本号一致的版本:

·1.5.x版本适用于Spring Boot 1.5.x

·2.0.x版本适用于Spring Boot 2.0.x

·2.1.x版本适用于Spring Boot2.1.x

4)项目中的依赖

在common项目中引入如下,进行统一管理

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2.2.0.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

2、SpringCloud Alibaba-Nacos[作为注册中心]

nacos-server-1.3.0.zip

链接:https://pan.baidu.com/s/1zFSmlTO7drbxsZPFmi-GCA 
提取码:wnzu


Nacos 是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。他是使用java编写。需要依赖java环境。
Nacos 文档地址:https://nacos.io/zh-cn/docs/quick-starthtml
1)、下载nacos-server

htps://github.com/alibaba/nacos/releases
2)、启动nacos-server
·双击bin中的startup.cmd文件
·访问 http:/localhost:8848/nacos/
·使用默认的nacos/nacos 进行登录

3)、将微服务注册到nacos中
1. 首先,修改pom.xml文件,引入Nacos Discovery Starter。

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

2. 在应用的/src/main/resources/application.yml 配置文件中配置Nacos Server地址 + application.name

spring:
  datasource:
    username: root
    password: 123456
    url: jdbc:mysql://192.168.1.11:3308/zxmall_sms
    driver-class-name: com.mysql.cj.jdbc.Driver
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
  application:
    name: zxmall-coupon
mybatis-plus:
  mapper-locations: classpath:/mapper/**/*.xml
  global-config:
    db-config:
      id-type: auto
server:
  port: 7000

3. 使用 @EnableDiscoveryClient 注解开启服务注册与发现功能

package com.zx.zxmall.coupon;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

//开启服务注册发现的客户端
@EnableDiscoveryClient
@SpringBootApplication
public class ZxmallCouponApplication {

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

}

4. 启动应用,观察nacos 服务列表是否已经注册上服务

注意:每一个应用都应该有名字,这样才能注册上去。

修改application.properties文件

spring.application.name=service-provider

server port=8000

注:

参考 Nacos Discovery Example

5. 注册更多的服务上去,测试使用feign 远程调用

Nacos 使用三步

  • 1、导包nacos-discovery
  • 2、写配置,指定nacos地址,指定应用的名字
  • 3、开启服务注册发现功能@EnableDiscoveryClient

Feign 使用三步

  • 1、导包openfeign
  • 2、开启@EnableFeignClients功能
  • 3、编写接口,进行远程调用

注:

SpringCloud Feign声明式远程调用

3、SpringCloud Alibaba-Nacos[作为配置中心]

如何使用nacos作为配置中心统一管理配置
1.引入依赖(此处需要添加版本,不添加版本依赖添加失败,无法加载配置中心更新的配置项,控制台也不会输出配置的相关信息

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

 2.创建一个bootstrap.properties

spring.application.name=zxmall-coupon
spring.cloud.nacos.config.server-addr=127.0.0.1:8848

3.需要给配置中心默认添加一个叫数据集(Data id)zxmall-coupon.properties 默认规则:应用名.properties


4.给应用名.properties添加任何配置


5.动态获取配置
@RefreshScope:动态获取并刷新配置
@Value("${配置项的名}"): 获取到配置

@RefreshScope//从配置中心获取更新后的配置
@RestController
@RequestMapping("coupon/coupon")
public class CouponController {
    @Autowired
    private CouponService couponService;

    @Value("${coupon.user.name}")
    private String name;
    @Value("${coupon.user.age}")
    private Integer age;

    @RequestMapping("/test")
    public R test(){
        System.out.println(name);
        System.out.println(age);
        return R.ok().put("name",name).put("age",age);
    }
}

如果配置中心和当前应用的配置文件中都配置了相同的项,优先使用配置中心的配置

注:

参考 Nacos Config Example

4. 进阶

核心概念

命名空间:
用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的Group或DatalD的配置。Namespace的常用场景之一是不同环境的配置的区分隔高,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。

配置集:

一组相关或者不相关的配置项的集合称为配置集。在系统中,一个配置文件通常就是一个配置集,包含了系统各个方面的配置。例如,一个配置集可能包含了数据源、线程池、日志级别等配置项。

配置集ID:

Nacos 中的某个配置集的ID。配置集ID是组织划分配置的维度之一。DatalD通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。DatalD通常采用类Java包(例如com.taobao.tc.refund.log.level)的命名规则保证全局唯一性。此命名规则非强制。

配置分组:
Nacos中的一组配置集,是组织配置的维度之一。通过一个有意义的字符串(如Buy或Trade)对配置集进行分组,从而区分DatalD相同的配置集。当您在Nacos上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用DEFAULTGROUP。配置分组的常见场景:不同的应用或组件使用了相同的配置类型,如database_url配置和
MQ_topic 配置。

1.命名空间:配置隔离
    默认:public(保留空间);默认新增的所有配置都在public空间
        1.开发、测试、生产  利用命名空间来做环境隔离
        注意:在bootstrap.properties 配置上需要使用按个命名空间下的配置
        spring.cloud.nacos.config.namespace=a722648f-41a5-42de-b814-4981229063db

spring.application.name=zxmall-coupon
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=76f870df-ad21-4e35-ae22-ccc28662d6f4
spring.cloud.nacos.config.group=dev
        2.每一个微服务之间互相隔离配置,每一个微服务都创建自己的命名空间,只加载自己命名空间下的所有配置


    2.配置集:所有的配置的集合
    3.配置集ID:类似文件名
        新建配置中的Data ID: 类似配置文件名
    4.配置分组
        默认所有的配置集都属于: DEFAULT_GROUP
        1111,618,1212

每个微服务创建自己的命名空间,使用配置分组区分环境 dev test prop
3.同时加载多个配置集
    1.微服务任何配置信息,任何配置文件都可以放在配置中心中,这样就只需要一个bootstrap.properties
    2.只需要在bootstrap.properties说明加载配置中心中那些配置文件即可

spring.application.name=zxmall-coupon

spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=76f870df-ad21-4e35-ae22-ccc28662d6f4
spring.cloud.nacos.config.group=prop

spring.cloud.nacos.config.extension-configs[0].data-id=datasource.yml
spring.cloud.nacos.config.extension-configs[0].group=dev
spring.cloud.nacos.config.extension-configs[0].refresh=true

spring.cloud.nacos.config.extension-configs[1].data-id=mybatis.yml
spring.cloud.nacos.config.extension-configs[1].group=dev
spring.cloud.nacos.config.extension-configs[1].refresh=true

spring.cloud.nacos.config.extension-configs[2].data-id=others.yml
spring.cloud.nacos.config.extension-configs[2].group=dev
spring.cloud.nacos.config.extension-configs[2].refresh=true
    3.@Value @ConfigurationProperties..
    以前springboot任何方法从配置文件中获取值都能使用
默认规则:配置中心有的优先使用配置中心的值

5. Gateway

1. 简介

网关作为流量的入口,常用功能包括路由转发、权限校验、限流控制等。而springcloud gateway作为SpringCloud官方推出的第二代网关框架,取代了Zuul网关。

网关提供APl全托管服务,丰富的APl管理功能,辅助企业管理大规模的APl,以降低管理成本和安全风险,包括协议适配、协议转发、安全策略、防刷、流量、监控日志等功能。
Spring Cloud Gateway旨在提供一种简单而有效的方式来对API进行路由,并为他们提供切面,例如:安全性,监控/指标和弹性等。
官方文档地址:

https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.3.RELEASE/reference/html/

创建zxmall-gateway模块

package com.zx.zxmall.gateway;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

/**
 * 1.开启服务注册发现
 *      配置nacos的注册中心地址
 */
@EnableDiscoveryClient
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class ZxmallGatewayApplication {

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

}

 路由相关配置

spring:
  cloud:
    gateway:
      routes:
        - id: test_route
          uri: https://www.baidu.com
          predicates:
            - Query=url,baidu
        - id: qq_route
          uri: https://www.qq.com
          predicates:
            - Query=url,qq

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值