SpringCloud(一)--SpringCloud簡介

一. 引言

? 在微服務架構日益盛行的今天,Spring Cloud憑借其簡單易用、功能強大的特性,成為了眾多開發者的首選。本文僅為學習所用,聯系侵刪。

二. SpringCloud概述

2.1 定義

? Spring Cloud是一系列框架的有序集合,它巧妙地利用了Spring Boot的開發便利性來簡化分布式系統基礎設施的開發。在微服務架構中,許多復雜且繁瑣的分布式系統問題,如服務發現注冊、配置中心、消息總線、負載均衡、熔斷機制以及數據監控等,通過Spring Cloud都可以以Spring Boot的開發風格進行快速實現,并做到一鍵啟動和部署。這使得開發者能夠更專注于業務邏輯的實現,而無需在底層技術上花費過多精力。

? “微服務”一詞來源于 Martin Fowler 的《Microservices》一文。微服務是一種架構風格,即將單體應用劃分為小型的服務單元,微服務之間使用 HTTP 的 API 進行資源訪問與操作。

? 簡而言之,微服務體系結構是一種將單個應用程序開發為一組小型服務的方法,每個應用程序在自己的進程中運行,并與輕量級機制(通常是 HTTP 資源 API)通信。這些服務圍繞業務功能構建,可通過全自動部署機制獨立部署。這些服務的集中管理最少,可能以不同的編程語言編寫,并使用不同的數據存儲技術。

2.2 特點

Spring Cloud之所以能夠在微服務領域占據一席之地,與其鮮明的特點密不可分:

集成性:Spring Cloud深度集成了Netflix開源組件,這些組件在微服務領域有著廣泛的應用和認可。通過集成這些組件,Spring Cloud為開發者提供了一套完整且經過實踐檢驗的微服務解決方案。

易用性:Spring Cloud遵循Spring Boot的開發風格,使得開發者能夠快速地理解和上手。同時,它提供了豐富的文檔和社區支持,幫助開發者解決在使用過程中遇到的問題。

靈活性:Spring Cloud允許開發者根據項目的實際需求選擇適合的組件進行集成,這使得它能夠滿足不同規模和復雜度的微服務應用的需求。

擴展性:隨著業務的發展,微服務應用可能需要不斷地進行擴展。Spring Cloud提供了良好的擴展性,使得開發者能夠輕松地對應用進行水平或垂直擴展。

可靠性:Spring Cloud通過一系列機制,如熔斷器、負載均衡等,確保微服務應用的穩定性和可靠性。即使在面對高并發、故障轉移等復雜場景時,也能保持良好的性能表現。

說明:

  • 微服務架構只是一個樣式,一個風格。
  • 將一個完成的項目,拆分成多個模塊去開發。
  • 每一個模塊都是獨立運行在自己的容器中的。
  • 每一個模塊都是需要相互通訊的(HTTP、RPC、MQ)。
  • 每一個模塊之間是沒有依賴關系的,可以單獨部署。
  • 可以使用多種語言去開發不同的模塊。
  • 可以使用MySQL數據庫、redis、ES去存儲數據,也可以使用多個使用MySQL數據庫。
  • 總結:將復雜臃腫的單體應用進行細粒度的劃分,沒個拆分出來的服務各自打包部署。

三. SpringCloud的主要模塊

3.1架構圖

如圖:

image

img

3.2 實踐指南:

下面將通過一個具體的案例來介紹如何使用Spring Cloud實現服務拆分、注冊與發現、負載均衡以及容錯處理等核心功能。

1. 服務拆分

首先,我們需要將單體應用拆分成多個微服務。假設我們有一個電商應用,可以將其拆分為用戶服務、商品服務、訂單服務等。

每個服務都是一個獨立的Spring Boot應用,具有自己的pom.xml文件,并引入相應的Spring Cloud依賴。

用戶服務 pom.xml 示例:

<dependencies>  <dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-web</artifactId>  </dependency>  <dependency>  <groupId>org.springframework.cloud</groupId>  <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>  </dependency>  <!-- 其他依賴 -->  
</dependencies>

image.gif

2. 注冊與發現

使用Eureka作為服務注冊中心,每個微服務啟動時都會向Eureka注冊,并在Eureka的管理界面上展示。其他服務可以通過Eureka發現其他服務的地址。

啟用Eureka客戶端:

在每個服務的application.propertiesapplication.yml文件中,配置Eureka客戶端的相關屬性。

eureka:  client:  service-url:  defaultZone: http://localhost:8761/eureka/

image.gif

在商品服務的業務邏輯中,可以通過注入UserClient來調用用戶服務的方法,而不需要關心具體的服務地址和負載均衡策略。

3. 容錯處理

Spring Cloud提供了Hystrix作為容錯處理組件。通過在方法上添加@HystrixCommand注解,可以指定熔斷、降級等策略。

商品服務中調用用戶服務的容錯處理示例:

@Service  
public class ProductService {  @Autowired  private UserClient userClient;  @HystrixCommand(fallbackMethod = "getUserByIdFallback")  public User getUserById(Long userId) {  return userClient.getUserById(userId);  }  public User getUserByIdFallback(Long userId, Throwable e) {  // 降級邏輯,例如返回默認用戶或記錄日志等  return new User(); // 示例:返回一個空用戶對象  }  
}

image.gif

在這個示例中,如果調用userClient.getUserById(userId)方法失敗(例如網絡問題或用戶服務不可用),則會執行getUserByIdFallback方法作為降級邏輯。

四. 參考資料

070016)]

在這個示例中,如果調用userClient.getUserById(userId)方法失敗(例如網絡問題或用戶服務不可用),則會執行getUserByIdFallback方法作為降級邏輯。

四. 參考資料

  1. Spring Cloud:一文讀懂其原理與架構-阿里云開發者社區

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/64835.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/64835.shtml
英文地址,請注明出處:http://en.pswp.cn/web/64835.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SQLALchemy如何將SQL語句編譯為特定數據庫方言

最近在一個使用fastapitortoise-orm的項目中&#xff0c;需要將orm的語句編譯成特定數據庫方言&#xff0c;但是查詢了官方文檔及一些資料卻找不到合適的方法論&#x1f614;&#xff0c;于是乎我就把目光放到了sqlalchemy身上&#xff0c;東找西找給我找著了。話不多說&#x…

廬山派K230學習日記2 MicroPython基礎

MicroPython文檔&#xff1a; https://docs.micropython.org/ MicroPython是編程語言 Python3 的精簡高效實現&#xff0c;語法和 Python3 保持一致&#xff0c;但只實現了 Python 標準庫的一小部分&#xff0c;并且經過優化&#xff0c;適用于物聯網 (IoT)、消費電子和嵌入式…

《計算機組成及匯編語言原理》閱讀筆記:p177-p177

《計算機組成及匯編語言原理》學習第 13 天&#xff0c;p177-p177 總結&#xff0c;總計 1 頁。 一、技術總結 1.real mode A programming model where the program has access to the entire capability of the machine, bypassing security and memory management. Useful…

2000-2020年各省財政一般預算支出面板數據

2000-2020年各省財政一般預算支出面板數據 1、時間&#xff1a;2000-2020年 2、來源&#xff1a;國家統計局 3、指標&#xff1a;年份、省份、地方財政一般預算支出 4、范圍&#xff1a;31省 指標解釋&#xff1a;地方財政一般預算支出?是指地方ZF根據預算安排&#xff0…

python小項目:給復制出來的段落前添加星號

給復制出來的段落前添加星號 最終效果二、實現步驟2.1 編寫python腳本2.2 批處理腳本2.3 運行腳本 三、用到知識3.1 pyperclip 模塊 最終效果 說明&#xff1a;復制四段內容&#xff08;段落實際不做限制&#xff09;&#xff0c;在windows終端輸入 bulletPointAdder&#xff0…

【LeetCode Hot100 二分查找】搜索插入位置、搜索二維矩陣、搜索旋轉排序數組、尋找兩個正序數組的中位數

二分查找 搜索插入位置搜索二維矩陣在排序數組中查找元素的第一個和最后一個位置尋找旋轉排序數組中的最小值搜索旋轉排序數組尋找兩個正序數組的中位數&#xff08;hard&#xff09; 搜索插入位置 給定一個排序數組和一個目標值&#xff0c;在數組中找到目標值&#xff0c;并…

24.Java 新特性擴展(重復注解、類型注解)

一、重復注解 1、基本介紹 自從 JDK 5 引入注解以來&#xff0c;注解的使用開始流行&#xff0c;在各個框架中被廣泛使用 不過注解有一個很大的限制&#xff0c;在同一個地方不能多次使用同一個注解 JDK 8 引入了重復注解的概念 2、具體實現 &#xff08;1&#xff09;自…

后端java開發路由接口并部署服務器(四)

一、安裝IntelliJ IDEA&#xff0c;安裝包下載 1、官網下載 2、網盤資源 安裝包下載完成后進行傻瓜式下一步安裝就可以了 打開IntelliJ IDEA&#xff0c;輸入網盤資源文件內容 三、漢化處理 插件搜索chinese&#xff0c;就會找到相應的插件安裝重啟軟件即可 四、新建后端j…

Vue.js 表單驗證實戰:一個簡單的登錄頁面

修改日期備注2025.1.2初版 一、前言 Vue.js 學習第一天——學會一個帶有簡單表單驗證的登錄頁面。通過這個項目&#xff0c;會對 Vue.js 的核心概念有了更深入的理解&#xff0c;加深掌握如何運用 Vue 的一些強大特性來實現動態交互和數據處理。 二、項目的基本結構 首先&a…

MySQL 鎖那些事

Q1 : MySQL有哪些鎖,功能是什么,如何項目中使用?Q2 : 行鎖是如何實現的?什么情況下會使用行鎖?Q3 : 四種事務隔離形式的行鎖有什么不一樣?讀未提交讀提交可重復讀串行 Q4 : MySQL 的讀寫都是怎樣加鎖的?Q5 : 需要注意什么? Q1 : MySQL有哪些鎖,功能是什么,如何項目中使用…

國產文本編輯器EverEdit - 批量轉碼轉換行符

1 批量轉碼&轉換行符 1.1 應用場景 如果用戶批量在Windows編輯文件&#xff0c;要上傳到異構系統&#xff0c;如&#xff1a;Linux&#xff0c;則需要批量轉換編碼和換行符&#xff0c;此時可以使用EverEdit的批量轉碼功能。 1.2 使用方法 選擇主菜單文檔 -> 批量轉碼…

Java實現下載excel模板,并實現自定義下拉框

GetMapping("excel/download")ApiOperation(value "模板下載")public void getUserRecordTemplate(HttpServletResponse response, HttpServletRequest request) throws IOException {OutputStream outputStream response.getOutputStream();InputStream…

成立一家無人機培訓機構需要哪些基礎配置

成立一家無人機培訓機構&#xff0c;需要一系列基礎配置來確保教學質量、學員安全以及機構的正常運營。以下是根據公開發布的信息整理出的關鍵基礎配置&#xff1a; 一、場地配置 1. 飛行場&#xff1a;提供一個安全、寬敞的室外飛行環境&#xff0c;面積最好大于三千平米&…

交換機性能詳解

1. 背板帶寬 只有模塊化交換機&#xff08;擁有可擴展插槽&#xff0c;可靈活改變端口數量&#xff09;才有這個概念&#xff0c;固定端換機是沒有這個概念的。并且固定端換機的背板容量和交換容量大小是相等的。 背板帶寬是交換機的總數據處理能力&#xff0c;由硬件架構設…

讀“將計算性能調高到極致的基點秘訣”的嘗試

看到一篇文章&#xff0c;說最近閱讀LAMMPS源碼&#xff0c;悟出了很多道理。在計算性能優化這塊&#xff0c;源代碼作者很多寫法我最初不以為意&#xff0c;后來發現是作者有意為之&#xff0c;就是為了把計算性能優化到極致。做計算仿真軟件&#xff0c;也特別需要注意這些吧…

Gitea代碼倉服務搭建

特點與優勢 輕量級:Gitea是一個輕量級的Git服務,提供了快速、穩定的代碼托管和協作開發環境。它資源占用低,適合在資源受限的環境中運行。易于安裝和部署:Gitea提供了簡單易用的安裝和部署方式,支持多種安裝方式,包括二進制文件、Docker容器等,并提供了詳細的文檔和配置…

leetcode hot 小偷

class Solution(object):def rob(self, nums):""":type nums: List[int]:rtype: int"""# 使用動態規劃&#xff0c;把之前的給保存起來ans[0,nums[-1]]for i in range(1,len(nums)):ans.append(max(ans[-1],ans[-2]nums[-1*i-1]))return ans[-1]…

端口被占用

端口8080被占用 哈哈哈&#xff0c;我是因為后端項目跑錯了&#xff0c;兩個項目后端名稱太像了&#xff1b; &#xff08;1&#xff09;netstat -aon | findstr 8080&#xff0c;找到占用8080端口的進程號&#xff0c;獲取對應的進程號pid&#xff1b; &#xff08;2&#…

文件本地和OSS上傳

這里寫目錄標題 前端傳出文件后端本地存儲阿里云OSS存儲上傳Demo實現上傳ConfigurationProperties 前端傳出文件 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>上傳文件</title> </head&g…

[人工智能] 結合最新技術:Transformer、CLIP與邊緣計算在提高人臉識別準確率中的應用

隨著人工智能的快速發展&#xff0c;特別是深度學習和自然語言處理領域的革命性技術&#xff0c;越來越多的前沿技術被應用于人臉識別中。Transformer架構、CLIP模型以及邊緣計算的結合&#xff0c;正成為提升人臉識別準確率和應用效能的關鍵技術路徑。特別是在多樣化場景下&am…