【微服务】分布式组件 Nacos 结合 Feign 的使用

本文主要介绍如何搭建分布式开发基本环境

一、基本概念

在这里插入图片描述

1. 注册中心

在分布式系统中,每一个微服务上线,都需要注册到注册中心。(方便服务的远程调用,比如订单想调用商品服务,直接从注册中心获得)

对应 SpringCloud 里的 Netflix 组件中的 Eureka

2. 配置中心

用于集中管理配置,服务实时获取配置中心的配置,进行修改

对应 SpringCloud 里的 Spring Cloud Config 组件

3. 网关

前端请求经过网关进行鉴权、过滤等操作

对应 SpringCloud 里的 Netflix 组件中的 Zuul

二、分布式使用的组件

我们不使用 SpringCloud 原生组件,而是使用 SpringCloud Alibaba 中提供的组件

原因:SpringCloud 中的部分组件停止维护了,并且环境搭建复杂。而 SpringCloud Alibaba 具有完善的可视化界面,学习曲线低。

最终我们需要用的组件为:

  1. Nacos —— 注册配置中心
  2. Ribbon + Feign —— 远程调用 、负载均衡
  3. Sentinel —— 服务熔断降级
  4. GateWay —— API 网关
  5. Sleuth —— 调用链监控
  6. Seata —— 分布式事务

三、Nocas + Feign 基本使用

Nocas 示例文档: https://github.com/alibaba/spring-cloud-alibaba/blob/2021.x/README-zh.md

1. 导入 spring-cloud-alibaba 组件
   <dependency>
       <groupId>com.alibaba.cloud</groupId>
       <artifactId>spring-cloud-alibaba-dependencies</artifactId>
       <version>2.2.9.RELEASE</version>
       <type>pom</type>
       <scope>import</scope>
   </dependency>
2. 使用 Nacos 组件作为注册中心

1) 导入依赖到我们微服务项目的聚合服务

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

2) 下载 Nacos 服务器
https://nacos.io/zh-cn/docs/quick-start.html

如果安装了 git ,可以使用 git 下载

git clone https://github.com/alibaba/nacos.git

解压后,通过 cmd 启动 bin 目录
在这里插入图片描述
然后通过下列命令启动

 startup.cmd -m standalone

在这里插入图片描述

3)在项目中注册微服务到 Nacos 中

  • 在需要注册到配置中心的微服务项目 yml 文件中配置 Nocos 服务器地址以及当前服务名
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
  application:
    name: mall-coupon
  • 在项目启动类中加入 @EnableDiscoveryClient 注解

4)访问 nacos 客户端首页,地址为http://127.0.0.1:8848/nacos —— Nacos 初始登录名和登录密码都为 nacos

3. 使用 Feign 进行服务的远程调用

Feign : 一个声明式的 HTTP 客户端

使用 Feign 远程调用其他服务步骤:

1) 导入 openfeign 依赖

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

2) 创建 feign 包,在里面编写一个接口,其作用是告诉 springcloud,这个接口需要调用远程服务

3) 在接口中声明接口的每个方法调用的是远程服务的那个请求

代码示例:

package com.wanqing.mall.member.feign;

import com.wanqing.common.utils.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;

@FeignClient("mall-coupon") // 找 mall-coupon 位置
public interface CouponFeignService {

   @RequestMapping("coupon/coupon/member/list")
    public R memberCoupons();
}

解释:

  • 在需要调用远程服务的接口处 ,使用 @FeignClient(“远程服务名”) 注释
  • 接口中声明的方法为远程服务中的方法名

4)通过在项目启动类中加入@EnableFeignClients(basePackages = "feign包位置") 注释,开启远程调用功能

@EnableFeignClients(basePackages = "com.wanqing.mall.member.feign")
4. 使用 Nocas 作为配置中心

1)引入 Nacos 作为配置中心的依赖

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

2)创建 bootstrap.properties 文件,bootstrap.properties 文件内容为微服务名字和配置中心地址

spring.application.name=mall-coupon
spring.cloud.nacos.config.server-addr=127.0.0.1:8848

bootstrap.properties 文件创建位置:

在这里插入图片描述

3)需要给配置中心中添加一个数据集 Date-Id, 其默认名字为 应用名.properties ,然后为这个数据集中添加所有配置

在这里插入图片描述

4)在服务中设置动态获取并刷新配置 —— 优先使用配置中心的配置

  • 在需要动态获取配置的类前加入 @RefreshScope 注解
	@RefreshScope
  • 使用 @Value("${配置项的值}") 获取配置的值
    @Value("${user.uname}")
5. Nocas 配置中心细节
5.1 命名空间

命名空间的核心是为了实现配置隔离,其默认为 public , 默认新增的配置都在 public 空间下

  1. 命名空间可实现环境隔离

通过在 bootstrap.properties 配置文件中加入命名空间的唯一 id 配置,修改获取配置的命名空间

spring.cloud.nacos.config.namespace=cc753734-cca7-4ff0-b332-f627b34502dc

通过命名空间,可实现 开发环境、生产环境、测试环境的 隔离
在这里插入图片描述

  1. 基于每个微服务间互相隔离配置,即每个微服务都创建自己的命名空间
5.2 配置集

所以配置的集合就是配置集,类似配置文件

5.3 配置集 ID

配置集 ID 就是配置文件名字

5.4 配置分组

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

在创建配置时,可设置配置组,对不同的情况,我们可以使用不同的配置组的配置文件

通过在 bootstrap.properties 配置文件中加入配置组的唯一 id 配置,修改获取配置的配置组

spring.cloud.nacos.config.group=1111

命名空间和配置组项目中的用法:

  1. 每个微服务有其自己的命名空间
  2. 对每个微服务的命名空间使用配置分组区分其环境

在这里插入图片描述

# 该微服务的命名空间
spring.cloud.nacos.config.namespace=69fca09f-2013-433a-83fd-8d4397eff83c 
# 该微服务当前配置使用的组
spring.cloud.nacos.config.group=dev
5.5 加载多配置集

在项目中,对不同位置的配置拆分成不同的配置文件

例如,将完整的 application.yml 文件拆分成关于数据源的,关于 mybatis 的配置文件 和其他等等配置,将其加入到 Nocas 中

在这里插入图片描述

通过在 bootstrap.properties 配置文件中加入如下配置,动态获取配置中心中的配置

# 加入配置文件及其分组
spring.cloud.nacos.config.extension-configs[0].data-id=datasource.yml
spring.cloud.nacos.config.extension-configs[0].group=dev
spring.cloud.nacos.config.extension-configs[1].data-id=mybatis.yml
spring.cloud.nacos.config.extension-configs[1].group=dev
spring.cloud.nacos.config.extension-configs[2].data-id=other.yml
spring.cloud.nacos.config.extension-configs[2].group=dev
# 配置动态刷新
spring.cloud.nacos.config.extension-configs[0].refresh=true 

总结: 我们可以将微服务中所有配置配置到配置中心中,项目中只保留一 bootstrap.properties 配置文件即可

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值