谷粒商城项目3——微服务——注册中心、配置中心、网关:SpringCloud Alibaba、Nacos、OpenFeign、GateWay

目录

四、微服务——注册中心、配置中心、网关

1.SpringCloud-Alibaba简介

2.组件

3.版本选择、依赖注入

4.Nacos注册中心

5.OpenFeign测试远程调用

(1).Feign声明式远程调用

(2).模拟测试

5.Nacos配置中心

(1).配置

(2).测试

(3).真正的配置中心

(4).配置中心-命名空间与配置分组

(5).加载多配置集

6.Gateway网关

(1).相关概念

(2).How It Works

(3).配置

(4).测试网关


四、微服务——注册中心、配置中心、网关

1.SpringCloud-Alibaba简介

GitHub - alibaba/spring-cloud-alibaba: Spring Cloud Alibaba provides a one-stop solution for application development for the distributed solutions of Alibaba middleware.

  • SpringCloud-Alibaba包含开发分布式项目微服务的必要组件,开发者可以通过spring cloud编程模型轻松使用这些组件来开发分布式应用服务

  • 只需要添加一些注解和少量配置,就可以spring cloud应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统

  • 谷粒商城项目3——微服务——注册中心、配置中心、网关:SpringCloud Alibaba、Nacos、OpenFeign、GateWay_第1张图片

2.组件

SpringCloud 的痛点:

  • 部分组件停止更新和维护

  • 部分环境搭建复杂,没有完善的可视化界面

  • 配置复杂,难以上手

SpringCloudAlibaba的优势:

  • 性能强悍、设计合理

  • 搭配了完善的可视化界面

  • 搭建简单

结合SpringCloudAlibaba,我们最终的技术搭建方案:

  • 注册中心(服务发现、注册) :SpringCloud Alibaba-Nacos

  • 配置中心(动态配置管理 ) :SpringCloud Alibaba-Nacos

  • 负载均衡 :SpringCloud-Ribbon

  • 声明式HTTP客户端(调用远程服务):SpringCloud-Fegin

  • 服务容错(熔断、降级、限流) :SpringCloud Alibaba-Sentinel

  • API网关(webflux编程模式) :SpringCloud-Gateway

  • 调用链监控 :SpringCloud-Sleuth

  • 原Fescar,即分布式事务解决方案 :SpringCloud Alibaba-Seata

谷粒商城项目3——微服务——注册中心、配置中心、网关:SpringCloud Alibaba、Nacos、OpenFeign、GateWay_第2张图片

3.版本选择、依赖注入

官网的推荐版本

谷粒商城项目3——微服务——注册中心、配置中心、网关:SpringCloud Alibaba、Nacos、OpenFeign、GateWay_第3张图片

这里我用的2.2.6

谷粒商城项目3——微服务——注册中心、配置中心、网关:SpringCloud Alibaba、Nacos、OpenFeign、GateWay_第4张图片

依赖注入到公共模块里

谷粒商城项目3——微服务——注册中心、配置中心、网关:SpringCloud Alibaba、Nacos、OpenFeign、GateWay_第5张图片

4.Nacos注册中心

各种组件官方配置文档:spring-cloud-alibaba/README-zh.md at 2.2.x · alibaba/spring-cloud-alibaba (github.com)

谷粒商城项目3——微服务——注册中心、配置中心、网关:SpringCloud Alibaba、Nacos、OpenFeign、GateWay_第6张图片

Nacos注册中心官方配置文档:spring-cloud-alibaba/readme-zh.md at 2.2.x · alibaba/spring-cloud-alibaba (github.com)

引入Nacos Discovery Starter

 
     com.alibaba.cloud
     spring-cloud-starter-alibaba-nacos-discovery
 

下载Nacos Server:Releases · alibaba/nacos (github.com) 解压出来,启动nacos/bin/startup.cmd

新版本nacos好像默认集群启动,如果启动失败可以找解决方法

配置yml文件,8848是nacos默认启动端口,配置name

主启动类添加@EnableDiscoveryClient

启动

访问localhost:8848/nacos,账号密码默认都是nacos

谷粒商城项目3——微服务——注册中心、配置中心、网关:SpringCloud Alibaba、Nacos、OpenFeign、GateWay_第7张图片

5.OpenFeign测试远程调用

会员服务(gulimall-member)从注册中心获取到优惠券服务(gulimall-coupon)在哪些服务器上,再向服务器发送请求

(1).Feign声明式远程调用

  • Feign是一个声明式HTTP客户端,它的目的是让远程调用更简单,提供HTTP的请求模板,通过编写简单的接口和插入注解,就可以定义好HTTP请求的参数、格式、地址等信息

  • Feign整合了Ribbon(负载均衡)和Hystrix(服务熔断)可以让我们不显示地使用这两个组件

  • OpenFeign在NextflixFegin的基础上拓展了springmvc注解的支持,在其实现下我们只需要常见一个接口并用注解的方式配置他,即可完成对服务提供方的接口绑定

确保你的微服务已经引入了openfegin

(2).模拟测试

编写一个controller返回所有的优惠券

编写一个接口调用远程服务

添加@EnableFeignClients开启远程调用功能

重启两个微服务,访问/member/member/test

谷粒商城项目3——微服务——注册中心、配置中心、网关:SpringCloud Alibaba、Nacos、OpenFeign、GateWay_第8张图片

谷粒商城项目3——微服务——注册中心、配置中心、网关:SpringCloud Alibaba、Nacos、OpenFeign、GateWay_第9张图片


在访问member模块调用的时候,idea可能会报错 “Did you forget to include spring-cloud-starter-loadbalancer?”

由于SpringCloud Feign在Hoxton.M2 RELEASED版本之后不再使用Ribbon而是使用spring-cloud-loadbalancer,所以不引入spring-cloud-loadbalancer会报错 解决方法 加入spring-cloud-loadbalancer依赖 并且在nacos中排除ribbon依赖,不然loadbalancer无效



    org.springframework.cloud
    spring-cloud-starter-loadbalancer
    3.1.3

参考文章:spring cloud整合feign和nacos报错:No Feign Client for loadBalancing defined. Did you forget to include_OldMan1024的博客-CSDN博客


启动成功之后访问8002网页可能会报500,这是因为我们在上面添加了spring-cloud-loadbalancer,但是还没有删除ribbon的依赖

所以删除掉ribbon的依赖就成功了

参考文章:hystrix客户端服务降级报错:org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient.choose_肖了个肖~的博客-CSDN博客

5.Nacos配置中心

(1).配置

修改pom.xml,引入Nacos Config Starter

 
     com.alibaba.cloud
     spring-cloud-starter-alibaba-nacos-config
 

在bootstrap.properties文件中配置Nacos Config元数据

(2).测试

在application.properties设置user.name会默认获取到系统的名字

在启动项目之后查看log有没有输出获取配置源的信息,如果没有,很可能是因为使用了高版本的spingboot

需要引入spring-cloud-starter-bootstrap依赖 来使bootstrap.properties文件生效

        
        
            org.springframework.cloud
            spring-cloud-starter-bootstrap
            3.1.3
        

测试成功

(3).真正的配置中心

在上面我们配置都是在每个微服务模块的application.properties里,但是在实际开发过程中,如果要修改配置文件,不可能每一个微服务模块都手动去修改,使用nacos配置中心来解决。

在实际过程中,如果配置中心和配置文件中都配置了相同的项,优先使用配置中心的

在nacos可视化界面里添加一个配置

谷粒商城项目3——微服务——注册中心、配置中心、网关:SpringCloud Alibaba、Nacos、OpenFeign、GateWay_第10张图片

谷粒商城项目3——微服务——注册中心、配置中心、网关:SpringCloud Alibaba、Nacos、OpenFeign、GateWay_第11张图片

谷粒商城项目3——微服务——注册中心、配置中心、网关:SpringCloud Alibaba、Nacos、OpenFeign、GateWay_第12张图片

重启项目,依旧能获取到值

在项目运行的情况下,在nacos可视化界面修改配置文件

谷粒商城项目3——微服务——注册中心、配置中心、网关:SpringCloud Alibaba、Nacos、OpenFeign、GateWay_第13张图片

谷粒商城项目3——微服务——注册中心、配置中心、网关:SpringCloud Alibaba、Nacos、OpenFeign、GateWay_第14张图片

刷新页面,发现没有动态改变

在控制层上加一个@RefreshScope注解实现动态刷新

重启项目并且重新修改值测试成功

谷粒商城项目3——微服务——注册中心、配置中心、网关:SpringCloud Alibaba、Nacos、OpenFeign、GateWay_第15张图片

(4).配置中心-命名空间与配置分组

  • 命名空间:配置隔离,默认是public(保留空间),默认新增的所有配置都在public空间。可以指定像dev、prod等环境命名空间,不同环境下配置文件可以重命名。然后在bootstrap.properties配置文件指定要使用的命名空间的id spring.cloud.nacos.config.namespace= id

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

  • 配置集id:类似配置文件名

  • 默认分组:默认是DEFAULT_GROUP

新建命名空间

谷粒商城项目3——微服务——注册中心、配置中心、网关:SpringCloud Alibaba、Nacos、OpenFeign、GateWay_第16张图片

谷粒商城项目3——微服务——注册中心、配置中心、网关:SpringCloud Alibaba、Nacos、OpenFeign、GateWay_第17张图片

配置组

谷粒商城项目3——微服务——注册中心、配置中心、网关:SpringCloud Alibaba、Nacos、OpenFeign、GateWay_第18张图片

(5).加载多配置集

随着项目业务的完善,配置文件的配置也相当巨大,所有我们一般将不同的配置属性放到不同的配置集里,方便后期的维护和更新

将不同的配置放到各个配置集里,之后再bootstrap.properties里设置获取这三个配集的总和

谷粒商城项目3——微服务——注册中心、配置中心、网关:SpringCloud Alibaba、Nacos、OpenFeign、GateWay_第19张图片

可以设置data-id、group、以及refresh(是否动态刷新。默认false)

添加coupon微服务模块所需要的配置

点进这条代码,发现是之前配置的一个集合

将application.yml里的代码注释了,重新启动项目

启动成功

访问成功

同时,尽管我们的配置文件是放到了配置中心,但是springboot以前从任何配置文件获取值都还能使用。(@Value)

6.Gateway网关

网关作为流量的入口,功能包括路由转发、权限校验、限流控制等

官方文档:Spring Cloud Gateway

(1).相关概念

  • Route(路由):包含独一无二的路由id、目的地的URL、断言集合、过滤器集合,断言用来判断路由是否能到达目的地URL

  • Predicats(断言):用来判断路由是否能到达目的地URL

  • Filter(过滤器):在请求访问成功之前、响应成功之后,都能进行修改

(2).How It Works

当请求到达网关,网关先利用断言判断这次请求是否符合路由规则,如果符合规则,就经过一系列的过滤器之后到达目的地。

谷粒商城项目3——微服务——注册中心、配置中心、网关:SpringCloud Alibaba、Nacos、OpenFeign、GateWay_第20张图片

(3).配置

可以在yml文件里配置

谷粒商城项目3——微服务——注册中心、配置中心、网关:SpringCloud Alibaba、Nacos、OpenFeign、GateWay_第21张图片

开启服务注册发现

配置nacos的注册中心地址

将网关的配置也配置到配置中心

谷粒商城项目3——微服务——注册中心、配置中心、网关:SpringCloud Alibaba、Nacos、OpenFeign、GateWay_第22张图片

因为我们在common模块里配置了mybatis相关的依赖,所以默认spring会扫描我们的数据库配置,为了防止找不到数据库配置报错,我们要排除掉数据库配置

启动成功

谷粒商城项目3——微服务——注册中心、配置中心、网关:SpringCloud Alibaba、Nacos、OpenFeign、GateWay_第23张图片

(4).测试网关

测试是否能访问成功

需要注意的是在配置uri的时候,需要加上https、htpp,否则会报错java.lang.IllegalArgumentException: The parameter [www.xxxxxx.com] format is incorrect, scheme can not be empty

同时一些网址是net结尾,简易先去指定网站查看完整的网址再测试

一些其他的错误也可以参考文章:近期遇到的一些问题_周有骛的博客-CSDN博客

访问成功(大都是404)

谷粒商城项目3——微服务——注册中心、配置中心、网关:SpringCloud Alibaba、Nacos、OpenFeign、GateWay_第24张图片

你可能感兴趣的:(谷粒商城,微服务,分布式,spring,cloud,微服务,gateway)