尚硅谷谷粒商城项目学习笔记-分布式组件-P2-SpringCloudAlibaba

在这里插入图片描述

0.分布式组件

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

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

SpringCloud Alibaba使用

引入时,注意两个版本号匹配
在这里插入图片描述

引入依赖

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

1.Nacos-注册、配置中心

1.1注册中心

1.1引入依赖

在common模块

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

1.2配置Nacos地址

下载Nacos Server:https://github.com/alibaba/nacos/releases
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

在 application.properties 中配置 Nacos server 的地址

  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
  application:
    name: gulimall-coupon

1.3@EnableDiscoveryClient注解

package com.jq.gulimall.coupon;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@MapperScan("com.jq.gulimall.coupon.dao")
@SpringBootApplication
@EnableDiscoveryClient
public class GulimallCouponApplication {

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

}

单击启动Nacos

startup.cmd -m standalone

在这里插入图片描述

1.2配置中心

1.2.1引入依赖

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

1.2.2添加配置

/src/main/resources/bootstrap.properties

gulimall-coupon:当前服务的名字

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

1.2.3Nacos进行配置

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在对应controller上面添加注解,接口动态刷新修改完配置的文件

在这里插入图片描述

@RefreshScope //动态获取,并刷新配置
@Value("${配置项的名,例如user.name}") //获取application.properties中的值

优先使用Nacos配置中心的配置

1.3配置中心细节

1.3.1命名空间

用于进行租户粒度的配置隔离。 不同的命名空间下, 可以存在相同的 Group 或 Data ID 的配置。 Namespace 的常用场景之一是不同环境的配置的区分隔离,
例如

  • 开发测试环境
  • 生产环境的资源(如配置、 服务) 隔离等
  • 可以进行每个微服务之间相互隔离配置,每一个微服务都创建自己的命名空间,只加载自己命名空间下的配置
    在这里插入图片描述在bootstrap.properties进行配置,是public还是dev,还是pro的配置
spring.cloud.nacos.config.namespace=spring.cloud.nacos.config.namespace=(命名空间的唯一id值,看下图)

在这里插入图片描述

1.3.2配置集

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

1.3.3配置集 ID:

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

1.3.4配置分组:

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

spring.cloud.nacos.config.group= 设置的Group名称

1.3.5加载多个配置文件

  • datasource.properties
  • mybatis.properties
    在这里插入图片描述将application.yml中所有配置拆分交给Nacos进行管理
    在这里插入图片描述在bootstrap.properties进行配置
spring.application.name=gulimall-coupon
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=a7f396db-27e4-49c0-8cf6-1b79b486886f
#spring.cloud.nacos.config.group=prod

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=other.yml
spring.cloud.nacos.config.extension-configs[2].group=dev
spring.cloud.nacos.config.extension-configs[2].refresh=true

2.OpenFeign调用远程服务

2.1简介

Feign 是一个声明式的 HTTP 客户端, 它的目的就是让远程调用更加简单。 Feign 提供了 HTTP
请求的模板, 通过编写简单的接口和插入注解, 就可以定义好 HTTP 请求的参数、 格式、 地
址等信息。
Feign 整合了 Ribbon(负载均衡) 和 Hystrix(服务熔断), 可以让我们不再需要显式地使用这
两个组件。
SpringCloudFeign 在 NetflixFeign 的基础上扩展了对 SpringMVC 注解的支持, 在其实现下, 我
们只需创建一个接口并用注解的方式来配置它, 即可完成对服务提供方的接口绑定。 简化了
SpringCloudRibbon 自行封装服务调用客户端的开发量。

2.2使用

2.2.1引入依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2.2定义方法-在服务coupon里面

    @RequestMapping("/member/list")
    public R membercoupons(){
        CouponEntity couponEntity = new CouponEntity();
        couponEntity.setCouponName("满100减10");
        return R.ok().put("coupons",Arrays.asList(couponEntity));
    }

2.3远程调用,member服务调用coupon中方法membercoupons

  1. 引入open-feign依赖
  2. 编写接口,告诉SpringCloud这个接口需要调用远程服务
    声明接口的每一个方法都是调用哪个远程服务的哪个请求
    开启远程调用功能
    在这里插入图片描述
package com.jq.gulimall.member.feign;

import com.jq.common.utils.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;

@FeignClient("gulimall-coupon")
public interface CouponFeignService {
    @RequestMapping("/coupon/coupon/member/list")
    public R membercoupons();
}

开启远程调用功能,启动类上加@EnableFeignClients注解

package com.jq.gulimall.member;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

@EnableFeignClients(basePackages ="com.jq.gulimall.member.feign")
@EnableDiscoveryClient
@MapperScan("com.jq.gulimall.member.dao")

@SpringBootApplication
public class GulimallMemberApplication {

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

}

3.GayewayAPI网关

3.1简介

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

3.2为什么使用 API 网关?

API 网关出现的原因是微服务架构的出现, 不同的微服务一般会有不同的网络地址, 而外部
客户端可能需要调用多个服务的接口才能完成一个业务需求, 如果让客户端直接与各个微服
务通信, 会有以下的问题:

  • 客户端会多次请求不同的微服务, 增加了客户端的复杂性。
  • 存在跨域请求, 在一定场景下处理相对复杂。
  • 认证复杂, 每个服务都需要独立认证。
  • 难以重构, 随着项目的迭代, 可能需要重新划分微服务。 例如, 可能将多个服务合并成一个或者将一个服务拆分成多个。 如果客户端直接与微服务通信, 那么重构将会很难实施。
  • 某些微服务可能使用了防火墙 / 浏览器不友好的协议, 直接访问会有一定的困难。

3.3使用

3.3.1创建gateway模块

在这里插入图片描述

3.3.2开启服务注册发现

package com.jq.gulimall.gateway;

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

@EnableDiscoveryClient
@SpringBootApplication
public class GulimallGatewayApplication {

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

}

3.3.3配置Nacos注册中心地址

spring.application.name=gulimall-gateway
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
server.port=88

3.3.4配置Nacos配置中心地址

bootstrap.properties
在这里插入图片描述

spring.application.name=gulimall-gateway
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=071b81ba-f206-496b-9db2-2c29ba77190e

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值