每天學點SpringCloud(七):路由器和過濾器-Zuul

来源:https://www.cnblogs.com/zhixiang-org-cn/archive/2018/07/15/9314226.html
-Advertisement-
Play Games

為什麼要使用Zuul 先來看一下下方這個圖 假如現在我們具有四個微服務,分別是用戶、訂單、支付、催收微服務,它們的調用方式分別是使用http、restful、thrift、kafka。這個時候如果我們在客戶端直接調用的話感覺是不是太費勁了,客戶端需要維護這幾種調用方式的客戶端,如果後期新增微服務或者 ...


為什麼要使用Zuul

先來看一下下方這個圖

假如現在我們具有四個微服務,分別是用戶、訂單、支付、催收微服務,它們的調用方式分別是使用http、restful、thrift、kafka。這個時候如果我們在客戶端直接調用的話感覺是不是太費勁了,客戶端需要維護這幾種調用方式的客戶端,如果後期新增微服務或者減少或者更換調用方式等,都需要修改客戶端。那麼我們來看一下加入Zuul以後是什麼樣子的呢

 

Zuul呢就負責了所有的調用,解耦了客戶端和微服務。也符合我們設計的單一職責原則。

 

使用Zuul

 

首先呢,我們在原先的父項目下新增一個cloud-demo-zuul模塊,引入依賴

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>

創建包cn.org.zhixiang,在此包下新建啟動類CloudDemoZuulApplication

@SpringBootApplication
@EnableZuulProxy
public class CloudDemoZuulApplication {
    public static void main(String[] args) {
        SpringApplication.run(CloudDemoZuulApplication.class, args);
    }
}

@EnableZuulProxy就是開啟Zuul的註解

 

接下來看一下application.yml

spring:
  application:
    name: zuul-demo

server:
  port: 8093
eureka:
  client:
    register-with-eureka: true
    service-url:
      defaultZone: http://root:root@localhost:8761/eureka

這個配置其實是跟我們以往的服務消費者的配置是一樣的,為什麼要這樣配置呢,因為在這個之前我們需要先複習一下以往的知識點,沒有看過以往博客的小伙伴可以先參考這個:https://zhixiang.org.cn

 

首先啟動我們的Eureka服務,然後啟動一個提供者cloud-demo-provider。我們知道這個時候我們直接訪問http://localhost:8078/user/getUser/2是可以獲得數據的對吧,那麼我的Zuul是怎麼使用的呢。我們啟動一下我們的Zuul。

 

這個時候我們訪問http://localhost:8093/provider-demo/user/getUser/2獲得的數據是一樣的,也就是說我們的Zuul做了一個路由轉發。我們可以看到這個url中有一個provider-demo,這個呢是提供者的spring.application.name的值,那麼如果我們不想使用這個呢,比如說現在我知道這是user微服務,我就想如果訪問user微服務我就使用http://localhost:8093/user/user/getUser/2怎麼辦呢。

配置

我們需要在yml中加上一個配置。

zuul:
  routes:
    provider-demo: /user/**

這個配置呢就是把服務id為provider-demo的微服務項目地址映射為/user/**.註意最後是兩個*,為什麼是兩個呢,如果是一個*只能匹配/user/a,/user/b這種路徑,而匹配不了/user/a/b這種。而我們配兩個*的話不僅可以匹配/user/a/b,還能匹配/user/a/b/c/d等。

 

這個時候我們訪問http://localhost:8093/user/user/getUser/2的時候就可以得到數據了。

 

其實還有別的寫法。我們來看一下

1.

zuul:
  routes:
    demo:
      path: /user/**
      serviceId: provider-demo

2.

zuul:
  routes:
    demo:
      path: /user/**
      url: http://localhost:8078/

 

上方這兩種方式都是可以的,那個demo呢其實是自定義的,只要不是重覆就行。然後path呢就是網頁上我們訪問的url。這兩種方式就是分別將這哥path映射到serviceId或者一個url。

 

負載均衡

 

剛纔我們探討的一直都是單個服務的情況,那麼當我們有多個微服務的時候應該怎麼操作呢

 

zuul:
  routes:
    demo:
      path: /user/**
      serviceId: provider-demo
provider-demo:
  ribbon:
      listOfServers: http://localhost:8078,http://localhost:8079

使用這種方式以後,我們再啟動一下我們原先的cloud-demo-provider-2項目,然後啟動Zuul訪問時會發現已經實現了負載均衡

 

文件上傳

 

我們使用zuul做路由的時候可能會碰到上傳文件的需求,上傳小文件到是沒事,但是如果大文件的話是無法上傳呢,這兒呢就有一個辦法來繞過SpringMVC的DispatchServlet。

 

例如我們上傳文件的介面為http://localhost:8093/user/user/uploadFile 那麼我們在上傳的時候就可以訪問http://localhost:8093/zuul/user/user/uploadFile來實現上傳大文件

 

GitHub:https://github.com/2388386839/spring-cloud-demo

碼雲:https://gitee.com/zhixiang_blog/spring-cloud-demo

 

如果對您有所幫助,請記得幫忙點一個star哦

 

 

 

 

 

 

本文出自https://zhixiang.org.cn/#/blog/read/ae383e8b-93b9-4c52-9987-bb6801e87301,轉載請保留。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Javascript語言的執行環境是"單線程"(single thread,就是指一次只能完成一件任務。如果有多個任務,就必須排隊,前面一個任務完成,再執行後面一個任務,以此類推)。 這種模式的好處是實現起來比較簡單,執行環境相對單純;壞處是只要有一個任務耗時很長,後面的任務都必須排隊等著,會拖延整 ...
  • https://www.bilibili.com/video/av15241731 筆記來源:黑馬程式員 HTML(Hyper Text Markup Language):超文本標簽語言 HTML標簽關係: 1.嵌套關係 2.併列關係 Sublime快捷鍵:html:5+Tab 或者!+Tab可以生... ...
  • 大話設計模式 全書讀書筆記. 這本書針對各種設計模式, 屬於基礎書籍, 場景和例子比較生動(雖然廢話比較多). 總體來說還是值得看一下. 初學者學習, 工作者溫故知新. ...
  • 朋友指著自己寫的代碼問:你看我的代碼寫的怎麼樣,有沒有問題,哪裡需要修改? 以最寬鬆的標準講,只要代碼沒有邏輯錯誤,沒有嚴重性能問題,就沒有問題,但我知道,他問得不是這些,而是問代碼有沒有可以更進一步優化的可能,我看他的代碼做了清晰的分層,提取了基類,使用了模板模式,總體上算是不錯了。 問題來了,究 ...
  • 大家好,這裡是「聊聊系統優化 」,併在下列地址同步更新 博客園:http://www.cnblogs.com/changsong/ 知乎專欄:https://zhuanlan.zhihu.com/youhua 在這裡我會從基於J2EE系統及互聯網架構方面,來談談系統優化的各個方面,乾貨滿滿,歡迎訂閱 ...
  • TCP UDP TCP與UDP基本區別 1. 基於連接與無連接 2. TCP要求系統資源較多,UDP較少; 3. UDP程式結構較簡單 4. 流模式(TCP)與數據報模式(UDP); 5. TCP保證數據正確性,UDP可能丟包 6. TCP保證數據順序,UDP不保證 UDP應用場景: 1. 面向數據 ...
  • 背景 一致性是一個抽象的、具有多重含義的電腦術語,在不同應用場景下,有不同的定義和含義。在傳統的IT時代,一致性通常指強一致性,強一致性通常體現在你中有我、我中有你、渾然一體;而在互聯網時代,一致性的含義遠遠超出了它原有的含義,在我們討論互聯網時代的一致性之前,我們先瞭解一下互聯網時代的特點,互聯 ...
  • 1.模型管理 :web線上流程設計器、預覽流程xml、導出xml、部署流程 2.流程管理 :導入導出流程資源文件、查看流程圖、根據流程實例反射出流程模型、激活掛起 3.運行中流程:查看流程信息、當前任務節點、當前流程圖、作廢暫停流程、指派待辦人 4.歷史的流程:查看流程信息、流程用時、流程狀態、查看 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...