持续学习&持续更新中…

学习态度:守破离


微服务的几大组件

在这里插入图片描述

SpringCloud Alibaba 简介

简介

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

在这里插入图片描述

为什么使用

在这里插入图片描述

版本选择

在这里插入图片描述

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

Nacos作为注册中心

官网:https://nacos.io/zh-cn/

下载nacos-server1.1.3:

https://objects.githubusercontent.com/github-production-release-asset-2e65be/137451403/d6c1ee80-b87c-11e9-8f32-79d0ba6f9c89?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20221129%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20221129T110414Z&X-Amz-Expires=300&X-Amz-Signature=609c8b94c94e42fa5463ef109f3ea2df6a86e9c292822be96b99ce4c7d89a915&X-Amz-SignedHeaders=host&actor_id=46433032&key_id=0&repo_id=137451403&response-content-disposition=attachment%3B%20filename%3Dnacos-server-1.1.3.zip&response-content-type=application%2Foctet-stream

运行nacos-server:

在这里插入图片描述

在这里插入图片描述

依赖:

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

application.yml:

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

注解:

@EnableDiscoveryClient
@SpringBootApplication
public class GulimallCouponApplication {

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

}

可视化界面:

在这里插入图片描述

Feign声明式远程调用

在这里插入图片描述

原理:

在这里插入图片描述

依赖:【feign被闭源了,SpringCloud开源了一个OpenFeign。属于SpringCloud,不属于SpringCloudAlibaba】

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Greenwich.SR3</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
    </dependencyManagement>
	<dependency>
	    <groupId>org.springframework.cloud</groupId>
	    <artifactId>spring-cloud-starter-openfeign</artifactId>
	</dependency>

开启Feign的使用:

@EnableFeignClients(basePackages = "l.p.gulimall.member.feign")
@EnableDiscoveryClient
@SpringBootApplication
public class GulimallMemberApplication {

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

}

声明式远程调用

gulimall-coupon:

@RestController
@RequestMapping("coupon/coupon")
public class CouponController {
    @Autowired
    private CouponService couponService;

    /**
     * 测试feign
     */
    @RequestMapping("/memberCoupon")
    public R memberCoupon() {
        CouponEntity coupon = new CouponEntity();
        coupon.setCouponName("买一送一");
        return R.ok().put("coupon", coupon);
    }
}

gulimall-member:

/*
这是一个声明式的远程调用
 */
@FeignClient("gulimall-coupon")
public interface CouponFeignService {
    @RequestMapping("/coupon/coupon/memberCoupon")
    R memberCoupon();
}

MemberController:

@RestController
@RequestMapping("member/member")
public class MemberController {
    @Autowired
    private CouponFeignService couponFeignService;

    @RequestMapping("/coupons")
    public R test() {
        MemberEntity member = new MemberEntity();
        member.setUsername("lp");
        return R.ok().put("member", member).put("coupons", couponFeignService.memberCoupon());
    }
}

Nacos作为配置中心

基本使用

引入依赖:

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

新建bootstrap.properties:【.properties与.yml文件都可以】

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

Nacos中添加配置:

在这里插入图片描述

微服务中使用配置:

@RefreshScope
@RestController
@RequestMapping("coupon/coupon")
public class CouponController {
    @Value("${coupon.user.name}")
    private String cun;
    @Value("${coupon.user.age}")
    private Integer cua;

    @RequestMapping("/test")
    public R test() {
        return R.ok().put("name", cun).put("age", cua);
    }
}

核心概念

命名空间:配置隔离

在这里插入图片描述

默认:public(保留空间);默认新增的所有配置都在public命名空间,默认使用的也是public。

举例:

  • 开发,测试,生产:利用命名空间来做环境隔离。
  • 每一个微服务之间互相隔离配置:每一个微服务都创建自己的命名空间,只加载自己命名空间下的所有配置

注意:在bootstrap.properties配置上,需要使用哪个命名空间下的配置:spring.cloud.nacos.config.namespace=9de62e44-cd2a-4a82-bf5c-95878bd5e871

配置集:所有的配置的集合

在这里插入图片描述

配置集ID:类似文件名(Nacos中的DataID)

在这里插入图片描述

配置分组

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

默认所有的配置集都属于:DEFAULT_GROUP


在这里插入图片描述
在这里插入图片描述

总结

项目中的使用:

  • 每个微服务创建自己的命名空间;
  • 使用配置分组区分环境:dev,test,prod

在这里插入图片描述

在这里插入图片描述

加载多配置集

bootstrap.yml:

spring:
  application:
    name: gulimall-coupon
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
      config:
        server-addr: localhost:8848
        namespace: ddecbef0-996d-48bd-ab3c-910af2291344
        group: dev
        ext-config:
          - dataId: datasource.yaml
            group: dev
            refresh: true
          - dataId: mybatis.yaml
            group: dev
            refresh: true
          - dataId: others.yaml
            group: dev
            refresh: true

在这里插入图片描述

datasource.yaml:

在这里插入图片描述

others.yaml:

在这里插入图片描述

mybatis.yaml:

在这里插入图片描述

gulimall-coupon.properties:

在这里插入图片描述

总结

  • 微服务任何配置信息,任何配置文件都可以放在配置中心中
  • 只需要在bootstrap.properties / bootstrap.yml说明加载配置中心中哪些配置文件即可
  • SpringBoot启动加载的配置、@Value、@ConfigurationProperties都能使用Nacos所管理的配置

SpringCloud-Gateway

简介

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

工作流程

在这里插入图片描述
一句话:满足某些断言(predicates)就路由到指定的地址(uri),使用指定的过滤器(filter)

在这里插入图片描述

简单示例

引入依赖:

    <dependencies>
        <dependency>
            <groupId>l.p.gulimall</groupId>
            <artifactId>gulimall-common</artifactId>
            <version>1.0.0</version>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-web</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
    </dependencies>

Nacos配置:

在这里插入图片描述

在这里插入图片描述

server:
  port: 88
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

注意

  • 各种 Predicates 同时存在于同一个路由时,请求必须同时满足所有的条件才被这个路由匹配。
  • 一个请求满足多个路由的谓词条件时,请求只会被首个成功匹配的路由转发

bootstrap.yml:

spring:
  application:
    name: gulimall-gateway
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
      config:
        server-addr: localhost:8848
        namespace: a46c9ea5-c78b-4191-bb0c-14da3991c2f7
        group: dev
        file-extension: yaml

启动gateway网关服务:

@EnableDiscoveryClient
// 父项目中有依赖MySQL的starter,因此需要在这儿排除一下【或者在pom.xml中使用<exclusion>标签】
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class GulimallGatewayApplication {

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

}

访问测试:

在这里插入图片描述

断言

在这里插入图片描述

过滤器

GatewayFilter:

在这里插入图片描述

GlobalFilter:
在这里插入图片描述

参考

雷丰阳: Java项目《谷粒商城》Java架构师 | 微服务 | 大型电商项目).


本文完,感谢您的关注支持!


Logo

一站式 AI 云服务平台

更多推荐