1. 程式人生 > 其它 >07 微服務專案的搭建

07 微服務專案的搭建

微服務專案的搭建

簡述一下:

會使用到 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微服務測試

我們可以看到 服務容錯生效