• mtg-shop商城SpringCloudAlibaba基础组件构建


    介绍


    mgt-shop是一款基于SpringCloudAlibaba从0到1构建的商城系统,本篇主要将SpringCloudAlibaba相关微服务组件集成到mtg-shop的项目中,具体的组件有:

    1. Nacos服务发现集成主要将微服务通过nacos客户端注册到nacos服务端。

    2. Nacos配置中心集成:可以替代springcloud-config组件,基于命名空间和group能够设置多开发环境,如:dev/test/pre/prod。也可以对项目中的配置做拆分,如:数据源配置、Redis链接配置等等。

    3. OpenFegin集成:服务与服务之间的调用将通过OpenFegin组件实现,也可以做到类似dubbo,提供者可以抽象接口依赖jar包,消费者依赖jar包进行开发,让消费者不在维护提供者提供的接口。

    4. GetWay集成:旨在为微服务架构提供⼀种简单有效的统⼀的API路由管理⽅式。

    Nacos服务发现集成


    由于Nacos1.x版本底层的协议使用的是http的方式,Nacos2.x版本底层增加了gRpc长连接的方式,所以我们尽量的去使用新版本。但是我们发现当我们将SpringCloudAlibaba2021.0依赖进行之后发现,它依赖的nacos还是1.4.x版本,所以我们将其排除掉并使用nacos2.0.0的客户端版本。这里先创建一个common模块用来存放所有公用的模块。

    添加common模块的依赖,将mtg-order纳入到注册中心,mtg-order配置文件配置如下

    server:  port: 9002spring:  application:    name: mtg-order  cloud:    nacos:      discovery:        server-addr: 192.168.56.10:8848

    启动mtg-order,根据《SpringCloud Alibaba之Nacos客户端启动流程源码分析》我们可以验证一下nacos2.0版本是否使用了gRpc,首先找到注册服务的代码块,并将代码块打断点,看下启动的时候是否进入gRpc的方式进行服务的注册。

    NamingGrpcClientProxy.registerService

    当前组件是将mtg-order服务通过gRpc的方式注册到nacos的服务端,nacos客户端启动流程源码分析我们已经分析过了,这里不做赘述。看下注册中心管理平台。其它几个服务做同样的配置,将其纳入到注册中心。

    Nacos配置中心


    依赖​​​​​​​

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

    nacos config使用

    在nacos的控制台中,提供了namespace命名空间,它可以定义各个模块,模块与模块之间相互隔离,例如:mtg-order模块、mtg-product模块等,可以在每个模块中定义自己的配置。

    具体操作结果如下图所示

    在namespace有group,可以将每个模块进行分组,利用分组可以达到不同的环境,如:dev/test/pre/prod。

    nacos控制台设置不同的环境,如下图所示

    再来个demo

    在product中配置一个提示信息,用于在商品抢购的时候,被抢完了,此时返回给客户端一个提示信息:客官你来晚了,商品已经被抢购一空~~~,未来提示信息可能会变化,所以我们要将其当做一个配置项应变未来可能的变化,类似的情况都可以这样做。

    1、配置bootstrap.properties,nacos-config的配置信息。​​​​​​​

    spring:  application:    name: mtg-product  cloud:    nacos:      config:        server-addr: 192.168.56.10        #mtg-product的namespace对应的id        namespace: c1b104cd-ec77-4d7b-b5a0-491c1fbc3766        #我们选择pre        group: pre

    2、创建常量类

    3、客户端调用

    当nacos控制台的值变化的时候,调用方的数据会自动刷新

    OpenFegin集成


    依赖和配置​​​​​​​

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

    将openfeign放入common模块,绝大部分的模块应该都会依赖它,版本的选择在上一篇文章已经说过。配置很简单,只需要在启动类上添加一个开启注解即可。

    @EnableFeignClients

    使用OpenFeign

    在使用OpenFeign的时候,服务与服务之间调用api的管理,采用如下的方式进行管理。

    当order模块调用product模块的一个接口,我们将这个接口抽出来放到一个模块mtg-product-sdk,只要product需要往外提供的接口都定义在这个模块中。这样的好处在于提供者提供服务的时候会单独给一个jar包,消费者依赖这个jar包,消费者不需要关心未来jar包的维护,如果提供者修改了字段或者新增方法,消费者只需要更新jar包就可以。接下来开发一个demo,product提供一个接口,order依赖这个接口并利用OpenFeign发起调用。

    一、创建mtg-product-sdk模块

    二、product依赖sdk并做具体的实现

    三、order继承sdk并通过OpenFeign发起调用

    OpenFeign集成完毕,未来就会按照这种方式进行服务与服务之间的调用。

    GetWay集成


    网关的作用:旨在为微服务架构提供⼀种简单有效的统⼀的API路由管理⽅式。让服务提供者不直接和客户端进行通信,采用网关统一管理。

    SpringCloud的GetWay主要提供的功能包括:路由、断言和过滤器。通过官网可以看到他提供了很多功能。

    依赖​​​​​​​

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

    创建mgt-gateway模块

    做一个简单的demo​​​​​​​

    server:  port: 9005spring:  application:    name: mtg-gateway  cloud:    nacos:      discovery:        server-addr: 192.168.56.10:8848    gateway:      routes:        - id: baiduUrl          uri: https://www.baidu.com          predicates:            - Query=uri,baidu

    访问当前项目并在uri地址后面增加一个uri=baidu的一个参数,让其跳转到baidu的主页,可以看到gateway生效了。

  • 相关阅读:
    【2023年11月第四版教材】第14章《沟通管理》(第二部分)
    flutter 使用texture实现Windows渲染视频
    2 | Window 搭建单机 Hadoop 和Spark
    【数据结构】二叉搜索树(Java + 链表实现)
    暗黑破坏神资unity资源分包精讲
    股票预测和股票分析就用FineBI!
    递归算法实现二分查找c++
    组件化架构搭建——铺路Android架构师
    Java中的内部类
    【Linux】Nginx安装使用负载均衡及动静分离(前后端项目部署),前端项目打包
  • 原文地址:https://blog.csdn.net/zqy_zq_zxl/article/details/125435948