• 【雷丰阳-谷粒商城 】【分布式基础篇-全栈开发篇】【02】Nacos、Feign、Gateway



    持续学习&持续更新中…

    学习态度:守破离


    微服务的几大组件

    在这里插入图片描述

    SpringCloud Alibaba 简介

    简介

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

    在这里插入图片描述

    为什么使用

    在这里插入图片描述

    版本选择

    在这里插入图片描述

        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>com.alibaba.cloudgroupId>
                    <artifactId>spring-cloud-alibaba-dependenciesartifactId>
                    <version>2.1.0.RELEASEversion>
                    <type>pomtype>
                    <scope>importscope>
                dependency>
            dependencies>
        dependencyManagement>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    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
    
    • 1

    运行nacos-server:

    在这里插入图片描述

    在这里插入图片描述

    依赖:

    	<dependency>
    	    <groupId>com.alibaba.cloudgroupId>
    	    <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
    	dependency>
    
    • 1
    • 2
    • 3
    • 4

    application.yml:

    spring:
      cloud:
        nacos:
          discovery:
            server-addr: localhost:8848
      application:
        name: gulimall-coupon
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    注解:

    @EnableDiscoveryClient
    @SpringBootApplication
    public class GulimallCouponApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(GulimallCouponApplication.class, args);
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    可视化界面:

    在这里插入图片描述

    Feign声明式远程调用

    在这里插入图片描述

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

        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloudgroupId>
                    <artifactId>spring-cloud-dependenciesartifactId>
                    <version>Greenwich.SR3version>
                    <type>pomtype>
                    <scope>importscope>
                dependency>
        dependencyManagement>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    	<dependency>
    	    <groupId>org.springframework.cloudgroupId>
    	    <artifactId>spring-cloud-starter-openfeignartifactId>
    	dependency>
    
    • 1
    • 2
    • 3
    • 4

    开启Feign的使用:

    @EnableFeignClients(basePackages = "l.p.gulimall.member.feign")
    @EnableDiscoveryClient
    @SpringBootApplication
    public class GulimallMemberApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(GulimallMemberApplication.class, args);
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    声明式远程调用

    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);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    gulimall-member:

    /*
    这是一个声明式的远程调用
     */
    @FeignClient("gulimall-coupon")
    public interface CouponFeignService {
        @RequestMapping("/coupon/coupon/memberCoupon")
        R memberCoupon();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    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());
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    Nacos作为配置中心

    基本使用

    引入依赖:

    	<dependency>
    	    <groupId>com.alibaba.cloudgroupId>
    	    <artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
    	dependency>
    
    • 1
    • 2
    • 3
    • 4

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

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

    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);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    核心概念

    命名空间:配置隔离

    在这里插入图片描述

    默认: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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    在这里插入图片描述

    datasource.yaml:

    在这里插入图片描述

    others.yaml:

    在这里插入图片描述

    mybatis.yaml:

    在这里插入图片描述

    gulimall-coupon.properties:

    在这里插入图片描述

    总结

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

    SpringCloud-Gateway

    简介

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    工作流程

    在这里插入图片描述

    简单示例

    引入依赖:

        <dependencies>
            <dependency>
                <groupId>l.p.gulimallgroupId>
                <artifactId>gulimall-commonartifactId>
                <version>1.0.0version>
                <exclusions>
                    <exclusion>
                        <groupId>org.springframework.bootgroupId>
                        <artifactId>spring-boot-starter-webartifactId>
                    exclusion>
                exclusions>
            dependency>
            <dependency>
                <groupId>org.springframework.cloudgroupId>
                <artifactId>spring-cloud-starter-gatewayartifactId>
            dependency>
        dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    启动gateway网关服务:

    @EnableDiscoveryClient
    // 父项目中有依赖MySQL的starter,因此需要在这儿排除一下【或者在pom.xml中使用标签】
    @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
    public class GulimallGatewayApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(GulimallGatewayApplication.class, args);
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    访问测试:

    在这里插入图片描述

    参考

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


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


  • 相关阅读:
    python采集天气数据 并做数据可视化 (含完整源代码)
    mmdetection中的一些Python基础知识(super()/***args/**kwargs)
    MACday1
    【Docker部署私服仓库Harbor详细教程步骤&镜像拉取&推送到Harbor仓库实战演练应用】
    如何禁止公司电脑文件上传到网络
    二、微服务拆分案例
    常见钓鱼手法及防范
    salesforce零基础学习(一百一十三)Trigger中获取IP地址的过程
    iotdb优化
    pythonGUI(二)基本元素之一
  • 原文地址:https://blog.csdn.net/weixin_44018671/article/details/128077472