如何构建一个07版本的微服务项目架构?

2026-05-22 13:041阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1688个文字,预计阅读时间需要7分钟。

如何构建一个07版本的微服务项目架构?

微服务项目搭建概述:使用Nacos、OpenFeign、Sentinel三个微服务模块,以及一个基础服务模块。注意事项:文中所有依赖均已引入到基础服务模块(Base)中,三个微服务模块继承自基础服务模块。

微服务项目的搭建

简述一下:

会使用到 nacos openfegin sentinel

三个微服务模块 一个基础服务模块 注意:文中所有的依赖都是引入到基础服务模块 base中

三个微服务模块继承与基础服务模块 可以做到依赖共享

  • service-base 基础服务模块
  • service-core 主服务模块
  • service-oss 文件存储服务模块
  • service-sms 短信服务模块
1 nacos的配置 1、Nacos下载和安装

下载地址:github.com/alibaba/nacos/releases

2、Windows启动Nacos

参考:github.com/alibaba/nacos

解压:将下载的压缩包解压

启动:startup.cmd -m standalone

3、访问

localhost:8848/nacos

用户名密码:nacos/nacos

4、引入依赖

<!--服务发现--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> 5、添加服务配置信息

在需要注册到注册中心的微服务放入配置文件中添加配置

#spring: cloud: nacos: discovery: server-addr: localhost:8848 # nacos服务地址 6、启动微服务

启动已注册的微服务,查看 “服务管理 => 服务列表”,可就以看到已注册的微服务

2 OpenFeign的引入 1、引入依赖

service-base模块中配置OpenFeign的依赖(实际是在服务消费者端需要OpenFeign的依赖)

<!--服务调用--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> 2、启动类添加注解

在service-sms的启动类添加如下注解

因为service-sms是消费者 需要开启feign的远程调用

@EnableFeignClients

我们这里以注册业务为例 在发送注册验证码的时候 我们需要判断用户有没有注册过 所以需要在短信模块中远程调用接口 判断用户是否注册过 判断用户是否注册过的接口处在另一模块中

  1. 服务提供者接口信息

    需要在消费者端创建一个接口 学过的都懂

  1. 服务消费者 也就是短信服务

    需要向那个服务发送远程调用

    @FeignClient(value = "service-core")// nacos中远程调用的名称 public interface CoreUserInfoClient { // 远程调用的完整路径 参数跟提供者一致 @GetMapping("/api/core/userInfo/checkMobile/{mobile}") boolean checkMobile(@PathVariable String mobile); }

    这样也大概实现的远程调用 但是有没有可能会发生这种情况

    • 远程调用超时了呢 解决办法: 配置更大的超时时间

      默认openFeign的超时时间只有1秒钟

    • 可以在配置文件中添加如下配置:是消费端配置哦

    feign: client: config: default: connectTimeout: 10000 #连接超时配置 readTimeout: 600000 #执行超时配置

    • 远程调用出错了呢

      配置容错措施 用sentinel实现 后面会说

3、日志

不知道你们会不会有这样的疑问 我们怎么知道远程调用是否成功了呢 不能只看报错信息吧 openFeign也提供了日志功能 下面看看吧

1、作用

OpenFeign提供了日志打印功能,我们可以通过配置来调整日志级别,从而了解OpenFeign中Http请求的细节。即对OpenFeign远程接口调用的情况进行监控和日志输出。

2、日志级别
  • NONE:默认级别,不显示日志
  • BASIC:仅记录请求方法、URL、响应状态及执行时间
  • HEADERS:除了BASIC中定义的信息之外,还有请求和响应头信息
  • FULL:除了HEADERS中定义的信息之外,还有请求和响应正文及元数据信息
3、配置日志bean

在service-base中创建配置文件 也就是基础服务模块

@Configuration public class OpenFeignConfig { @Bean Logger.Level feignLoggerLevel(){ return Logger.Level.FULL; } } 4、开启日志

sms的application.yml中指定监控的接口,以及日志级别

CoreUserInfoClient 发送远程调用的接口

logging: level: com.atguigu.srb.sms.client.CoreUserInfoClient: DEBUG #以什么级别监控哪个接口 5、监控到的日志

HTTP 是一种无状态协议,客户端向服务器发送一个 TCP 请求,服务端响应完毕后断开连接。

如果客户端向服务器发送多个请求,每个请求都要建立各自独立的连接以传输数据。

如何构建一个07版本的微服务项目架构?

HTTP 有一个 KeepAlive 模式,它告诉 webserver 在处理完一个请求后保持这个 TCP 连接的打开状态。

若接收到来自客户端的其它请求,服务端会利用这个未被关闭的连接,而不需要再建立一个连接。

KeepAlive 在一段时间内保持打开状态,它们会在这段时间内占用资源。占用过多就会影响性能。

timeout 来指定 KeepAlive 的超时时间(timeout)。指定每个 TCP 连接最多可以保持多长时间。

3 sentinel 服务容错

在服务发送错误时 消费端的一种容错模式

1、引入依赖

service-base中引入sentinel依赖

<!--服务容错--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency> 2、开启Sentinel支持

在service-sms的yml配置文件中开启Feign对Sentinel的支持

#开启Feign对Sentinel的支持 #feign: sentinel: enabled: true 3、创建容错类

fallback:当无法校验手机号是否已注册时,直接发送短信

package com.atguigu.sms.client.fallback; import com.atguigu.sms.client.CoreUserInfoClient; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; /** * 对远程服务调用的容错措施 * @author : look-word * @date : 2022-05-22 19:14 **/ @Slf4j @Service public class CoreUserInfoClientFallBack implements CoreUserInfoClient { @Override public boolean checkMobile(String mobile) { log.info("远程调用失败 除法服务熔断 service-core/api/core/userInfo/checkMobile/"+mobile); return false; } } 4、指定熔断类

为OpenFeign远程调用接口添加fallback属性值没指定容错类

CoreUserInfoClient 远程调用接口哦

@FeignClient(value = "service-core", fallback = CoreUserInfoClientFallback.class) public interface CoreUserInfoClient { 5、测试

停止core微服务测试

我们可以看到 服务容错生效

标签:搭建

本文共计1688个文字,预计阅读时间需要7分钟。

如何构建一个07版本的微服务项目架构?

微服务项目搭建概述:使用Nacos、OpenFeign、Sentinel三个微服务模块,以及一个基础服务模块。注意事项:文中所有依赖均已引入到基础服务模块(Base)中,三个微服务模块继承自基础服务模块。

微服务项目的搭建

简述一下:

会使用到 nacos openfegin sentinel

三个微服务模块 一个基础服务模块 注意:文中所有的依赖都是引入到基础服务模块 base中

三个微服务模块继承与基础服务模块 可以做到依赖共享

  • service-base 基础服务模块
  • service-core 主服务模块
  • service-oss 文件存储服务模块
  • service-sms 短信服务模块
1 nacos的配置 1、Nacos下载和安装

下载地址:github.com/alibaba/nacos/releases

2、Windows启动Nacos

参考:github.com/alibaba/nacos

解压:将下载的压缩包解压

启动:startup.cmd -m standalone

3、访问

localhost:8848/nacos

用户名密码:nacos/nacos

4、引入依赖

<!--服务发现--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> 5、添加服务配置信息

在需要注册到注册中心的微服务放入配置文件中添加配置

#spring: cloud: nacos: discovery: server-addr: localhost:8848 # nacos服务地址 6、启动微服务

启动已注册的微服务,查看 “服务管理 => 服务列表”,可就以看到已注册的微服务

2 OpenFeign的引入 1、引入依赖

service-base模块中配置OpenFeign的依赖(实际是在服务消费者端需要OpenFeign的依赖)

<!--服务调用--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> 2、启动类添加注解

在service-sms的启动类添加如下注解

因为service-sms是消费者 需要开启feign的远程调用

@EnableFeignClients

我们这里以注册业务为例 在发送注册验证码的时候 我们需要判断用户有没有注册过 所以需要在短信模块中远程调用接口 判断用户是否注册过 判断用户是否注册过的接口处在另一模块中

  1. 服务提供者接口信息

    需要在消费者端创建一个接口 学过的都懂

  1. 服务消费者 也就是短信服务

    需要向那个服务发送远程调用

    @FeignClient(value = "service-core")// nacos中远程调用的名称 public interface CoreUserInfoClient { // 远程调用的完整路径 参数跟提供者一致 @GetMapping("/api/core/userInfo/checkMobile/{mobile}") boolean checkMobile(@PathVariable String mobile); }

    这样也大概实现的远程调用 但是有没有可能会发生这种情况

    • 远程调用超时了呢 解决办法: 配置更大的超时时间

      默认openFeign的超时时间只有1秒钟

    • 可以在配置文件中添加如下配置:是消费端配置哦

    feign: client: config: default: connectTimeout: 10000 #连接超时配置 readTimeout: 600000 #执行超时配置

    • 远程调用出错了呢

      配置容错措施 用sentinel实现 后面会说

3、日志

不知道你们会不会有这样的疑问 我们怎么知道远程调用是否成功了呢 不能只看报错信息吧 openFeign也提供了日志功能 下面看看吧

1、作用

OpenFeign提供了日志打印功能,我们可以通过配置来调整日志级别,从而了解OpenFeign中Http请求的细节。即对OpenFeign远程接口调用的情况进行监控和日志输出。

2、日志级别
  • NONE:默认级别,不显示日志
  • BASIC:仅记录请求方法、URL、响应状态及执行时间
  • HEADERS:除了BASIC中定义的信息之外,还有请求和响应头信息
  • FULL:除了HEADERS中定义的信息之外,还有请求和响应正文及元数据信息
3、配置日志bean

在service-base中创建配置文件 也就是基础服务模块

@Configuration public class OpenFeignConfig { @Bean Logger.Level feignLoggerLevel(){ return Logger.Level.FULL; } } 4、开启日志

sms的application.yml中指定监控的接口,以及日志级别

CoreUserInfoClient 发送远程调用的接口

logging: level: com.atguigu.srb.sms.client.CoreUserInfoClient: DEBUG #以什么级别监控哪个接口 5、监控到的日志

HTTP 是一种无状态协议,客户端向服务器发送一个 TCP 请求,服务端响应完毕后断开连接。

如果客户端向服务器发送多个请求,每个请求都要建立各自独立的连接以传输数据。

如何构建一个07版本的微服务项目架构?

HTTP 有一个 KeepAlive 模式,它告诉 webserver 在处理完一个请求后保持这个 TCP 连接的打开状态。

若接收到来自客户端的其它请求,服务端会利用这个未被关闭的连接,而不需要再建立一个连接。

KeepAlive 在一段时间内保持打开状态,它们会在这段时间内占用资源。占用过多就会影响性能。

timeout 来指定 KeepAlive 的超时时间(timeout)。指定每个 TCP 连接最多可以保持多长时间。

3 sentinel 服务容错

在服务发送错误时 消费端的一种容错模式

1、引入依赖

service-base中引入sentinel依赖

<!--服务容错--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency> 2、开启Sentinel支持

在service-sms的yml配置文件中开启Feign对Sentinel的支持

#开启Feign对Sentinel的支持 #feign: sentinel: enabled: true 3、创建容错类

fallback:当无法校验手机号是否已注册时,直接发送短信

package com.atguigu.sms.client.fallback; import com.atguigu.sms.client.CoreUserInfoClient; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; /** * 对远程服务调用的容错措施 * @author : look-word * @date : 2022-05-22 19:14 **/ @Slf4j @Service public class CoreUserInfoClientFallBack implements CoreUserInfoClient { @Override public boolean checkMobile(String mobile) { log.info("远程调用失败 除法服务熔断 service-core/api/core/userInfo/checkMobile/"+mobile); return false; } } 4、指定熔断类

为OpenFeign远程调用接口添加fallback属性值没指定容错类

CoreUserInfoClient 远程调用接口哦

@FeignClient(value = "service-core", fallback = CoreUserInfoClientFallback.class) public interface CoreUserInfoClient { 5、测试

停止core微服务测试

我们可以看到 服务容错生效

标签:搭建