• 07 微服务项目的搭建 look


    微服务项目的搭建

    简述一下:

    会使用到 nacos openfegin sentinel

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

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

    image-20220522205745643

    • 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、启动微服务

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

    image-20220522205603909

    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. 服务提供者接口信息

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

    image-20220522210709704

    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、监控到的日志

    image-20220522212149931

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

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

    image-20220522212819083

  • 相关阅读:
    Java面向对象编程 -1.3
    Java面向对象编程 -1.2
    Java面向对象编程 -1
    Java基础 -5.3
    Java基础 -5.2
    oracle 新建用户
    js密码的匹配正则
    oracle导入和导出和授权
    oracle存储过程语法
    java.lang.NumberFormatException: For input string: "26.0"
  • 原文地址:https://www.cnblogs.com/look-word/p/16299157.html
Copyright © 2020-2023  润新知