谷粒商城项目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应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统

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.版本选择、依赖注入

官网的推荐版本

这里我用的2.2.6

依赖注入到公共模块里

4.Nacos注册中心

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

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

引入Nacos Discovery Starter

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

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

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

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

主启动类添加@EnableDiscoveryClient

启动

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

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


在访问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无效

<!-- 加入spring-cloud-loadbalancer依赖 -->
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-loadbalancer -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
    <version>3.1.3</version>
</dependency>

参考文章: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

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

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

(2).测试

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

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

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

<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-bootstrap -->
        <!-- spring-cloud-starter-bootstrap -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
            <version>3.1.3</version>
        </dependency>

测试成功

(3).真正的配置中心

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

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

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

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

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

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

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

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

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

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

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

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

  • 默认分组:默认是DEFAULT_GROUP

新建命名空间

配置组

(5).加载多配置集

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

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

可以设置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).配置

可以在yml文件里配置

开启服务注册发现

配置nacos的注册中心地址

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

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

启动成功

(4).测试网关

测试是否能访问成功

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

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

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

访问成功(大都是404)

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HotRabbit.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值