您的位置:首页 > 其它

07 微服务项目的搭建

2022-05-22 21:39 986 查看

微服务项目的搭建

简述一下:

会使用到 nacos openfegin sentinel

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

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

  • service-base 基础服务模块
  • service-core 主服务模块
  • service-oss 文件存储服务模块
  • service-sms 短信服务模块

1 nacos的配置

1、Nacos下载和安装

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

2、Windows启动Nacos

参考:https://github.com/alibaba/nacos

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

启动:startup.cmd -m standalone

3、访问

http://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 请求,服务端响应完毕后断开连接。

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

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微服务测试

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: