分布式系統中的 Kafka:流量削峰與異步解耦(二)

Kafka 在分布式系統中的應用案例

電商訂單系統

在電商領域,訂單系統是核心業務模塊之一,涉及多個復雜的業務環節和系統組件之間的交互。以常見的電商購物流程為例,當用戶在電商平臺上下單后,訂單創建服務會首先接收到用戶的訂單請求,這個請求中包含了訂單的基本信息,如商品種類、數量、價格,以及用戶的相關信息等 。

在傳統的同步處理模式下,訂單創建服務需要依次調用庫存服務進行庫存扣減,調用支付服務進行支付處理,調用物流服務安排發貨,以及調用消息服務通知用戶訂單狀態等操作。如果其中任何一個服務出現故障或者響應延遲,都會導致整個訂單創建流程的阻塞,用戶可能會面臨長時間的等待,甚至訂單創建失敗的情況 。

引入 Kafka 后,訂單創建服務將訂單消息發送到 Kafka 的 “order - topic” 中,然后立即返回給用戶訂單創建成功的響應,實現了異步處理。庫存服務、支付服務、物流服務和消息服務分別從 “order - topic” 中訂閱消息,并根據自身的業務邏輯進行處理。例如,庫存服務在接收到訂單消息后,會檢查庫存是否充足,如果充足則進行庫存扣減操作,并將扣減結果反饋給相關系統;支付服務會處理訂單的支付流程,驗證用戶的支付信息,完成支付操作,并更新訂單的支付狀態;物流服務會根據訂單信息安排發貨,生成物流單號,并跟蹤物流狀態;消息服務會向用戶發送訂單創建成功、支付成功、發貨通知等消息,讓用戶及時了解訂單的進展情況 。

在流量削峰方面,Kafka 同樣發揮著重要作用。在電商促銷活動期間,如 “雙 11”“618” 等,訂單請求量會呈爆發式增長,可能在短時間內達到平時的數倍甚至數十倍。如果這些請求直接涌入訂單處理系統,很容易導致系統過載,無法正常響應。通過 Kafka 作為緩沖,訂單請求被發送到 Kafka 的 “order - topic” 中,Kafka 可以快速接收并存儲這些訂單消息,即使在流量高峰期間,也能保證訂單請求不會丟失。然后,訂單處理系統可以根據自身的處理能力,從 Kafka 中逐步拉取訂單消息進行處理,實現了對流量的有效削峰,保證了訂單系統在高并發情況下的穩定運行 。

日志處理系統

在當今的分布式系統中,日志處理是一項至關重要的任務。隨著業務的不斷發展和系統規模的日益擴大,系統產生的日志數據量也在呈指數級增長。這些日志數據包含了豐富的信息,如系統運行狀態、用戶行為、業務操作等,對于系統的監控、故障排查、性能優化和業務分析都具有重要價值 。

Kafka 在日志處理系統中扮演著核心角色。它可以高效地收集來自各個應用程序、服務器節點的日志數據。例如,在一個大型互聯網公司的分布式系統中,有數百臺甚至數千臺服務器在同時運行,每個服務器上的應用程序都會產生大量的日志。通過在這些服務器上部署 Kafka Producer,將日志數據發送到 Kafka 集群中,Kafka 可以快速地接收并存儲這些日志消息,實現了日志數據的集中收集 。

Kafka 的高吞吐量和可擴展性使其能夠輕松應對海量日志數據的傳輸和存儲需求。它可以將日志消息持久化到磁盤,保證數據的可靠性,即使在系統出現故障時,日志數據也不會丟失。同時,Kafka 的分區機制可以將日志數據分散存儲在多個 Broker 節點上,提高了存儲的效率和可擴展性 。

在日志處理流程中,Kafka 通常會與 ELK(Elasticsearch、Logstash、Kibana)等工具集成,形成一個完整的日志處理和分析平臺。Logstash 作為數據收集和處理引擎,從 Kafka 中拉取日志數據,并對數據進行過濾、清洗、轉換等操作,使其符合后續處理的要求。例如,Logstash 可以從日志數據中提取關鍵信息,如時間戳、日志級別、日志內容等,并將其轉換為結構化的數據格式 。

Elasticsearch 是一個分布式搜索引擎,它接收經過 Logstash 處理后的日志數據,并將其存儲在索引中,提供高效的全文檢索和數據分析功能。通過 Elasticsearch,用戶可以快速地查詢和分析日志數據,例如查找特定時間范圍內的錯誤日志、統計用戶行為數據等 。

Kibana 則是一個可視化平臺,它與 Elasticsearch 集成,為用戶提供了直觀的界面,用于展示和分析日志數據。用戶可以通過 Kibana 創建各種圖表、報表,對日志數據進行可視化分析,從而更直觀地了解系統的運行狀態和業務情況 。

通過 Kafka 與 ELK 的集成,實現了日志數據的收集、傳輸、處理、存儲和分析的全流程自動化,為企業提供了強大的日志管理和分析能力,有助于及時發現系統故障、優化系統性能、挖掘業務價值 。

實戰:Spring Boot 集成 Kafka 實現流量削峰與異步解耦

環境搭建

  1. Kafka 和 Zookeeper 安裝與配置:Kafka 運行依賴于 Zookeeper,從 Kafka 2.8.0 版本開始,它內置了 Zookeeper,簡化了部署流程 。若使用的是低于該版本的 Kafka,則需先單獨安裝和配置 Zookeeper。以 Linux 系統為例,首先從 Apache Kafka 官網下載最新穩定版本的 Kafka 安裝包,解壓到指定目錄,如 “/usr/local/kafka” 。在 “server.properties” 配置文件中,可根據實際需求調整關鍵參數,如 “broker.id”,每個 Kafka 節點都必須有一個唯一的標識,用于在集群中區分不同的節點;“listeners” 指定 Kafka 監聽的地址和端口,默認是 9092,若部署在多臺機器上,需確保端口未被占用且可被其他組件訪問;“log.dirs” 指定 Kafka 日志存儲目錄,建議選擇磁盤空間充足、I/O 性能較好的路徑,以保證日志的穩定存儲和讀寫效率 。若使用獨立的 Zookeeper,需先下載 Zookeeper 安裝包并解壓,在 “zoo.cfg” 配置文件中設置數據存儲目錄、客戶端連接端口等參數,啟動 Zookeeper 服務后,再啟動 Kafka。
  1. Spring Boot 項目創建與依賴引入:使用 Spring Initializr(https://start.spring.io/)快速創建一個基礎的 Spring Boot 項目,在創建過程中,填寫項目的基本信息,如 Group、Artifact 等 。在依賴選擇頁面,勾選 “Spring for Apache Kafka” 依賴,該依賴提供了與 Kafka 集成的核心功能,方便在 Spring Boot 項目中使用 Kafka 的生產者和消費者功能 。如果項目還需要構建 RESTful API 來與外部系統交互,可同時勾選 “Spring Web” 依賴;若涉及數據庫操作,還需勾選相應的 JDBC 或 Spring Data 依賴 。創建完成后,將項目導入到常用的 IDE(如 Intellij IDEA、Eclipse 等)中 。

代碼實現

  1. 生產者代碼示例:在 Spring Boot 項目中,創建一個 Kafka 生產者服務類。首先,通過依賴注入獲取 KafkaTemplate,KafkaTemplate 是 Spring Kafka 提供的核心類,封裝了發送消息到 Kafka 的詳細邏輯,提供了簡單易用的 API 。例如:
 

import org.springframework.kafka.core.KafkaTemplate;

import org.springframework.stereotype.Service;

@Service

public class KafkaProducerService {

private final KafkaTemplate<String, String> kafkaTemplate;

public KafkaProducerService(KafkaTemplate<String, String> kafkaTemplate) {

this.kafkaTemplate = kafkaTemplate;

}

public void sendMessage(String topic, String message) {

kafkaTemplate.send(topic, message);

}

}

在上述代碼中,KafkaProducerService 類的構造函數接收一個 KafkaTemplate 實例,并將其賦值給成員變量 kafkaTemplate 。sendMessage 方法接收兩個參數,topic 表示消息要發送到的主題,message 是要發送的消息內容 。在方法內部,通過調用 kafkaTemplate 的 send 方法將消息發送到指定的主題 。在實際應用中,可在某個業務邏輯處理方法中調用該服務類來發送消息,比如在一個訂單創建的 Controller 中:

 

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.PostMapping;

import org.springframework.web.bind.annotation.RequestBody;

import org.springframework.web.bind.annotation.RestController;

@RestController

public class OrderController {

private final KafkaProducerService kafkaProducerService;

@Autowired

public OrderController(KafkaProducerService kafkaProducerService) {

this.kafkaProducerService = kafkaProducerService;

}

@PostMapping("/orders")

public String createOrder(@RequestBody String orderInfo) {

// 假設這里生成訂單ID

String orderId = "123456";

// 拼接消息內容

String message = "Order created: " + orderId + ", " + orderInfo;

// 發送消息到指定主題

kafkaProducerService.sendMessage("order - topic", message);

return "Order created successfully, ID: " + orderId;

}

}

在 OrderController 類中,通過依賴注入獲取 KafkaProducerService 實例 。在 createOrder 方法中,當接收到創建訂單的 POST 請求時,首先生成訂單 ID,然后拼接包含訂單信息的消息,最后調用 kafkaProducerService 的 sendMessage 方法將消息發送到 “order - topic” 主題 。

  1. 消費者代碼示例:創建一個 Kafka 消費者類,通過使用 @KafkaListener 注解來監聽指定的主題 。例如:
 

import org.springframework.kafka.annotation.KafkaListener;

import org.springframework.stereotype.Component;

@Component

public class KafkaConsumerService {

@KafkaListener(topics = "order - topic", groupId = "order - group")

public void receiveMessage(String message) {

// 處理接收到的消息

System.out.println("Received message: " + message);

// 這里可以添加具體的業務邏輯,如更新訂單狀態、通知相關系統等

}

}

在上述代碼中,KafkaConsumerService 類使用 @Component 注解標記為 Spring 組件,以便 Spring 容器進行管理 。@KafkaListener 注解指定了該方法要監聽的主題為 “order - topic”,消費者組為 “order - group” 。當有消息到達 “order - topic” 且屬于 “order - group” 消費者組時,會自動觸發 receiveMessage 方法,將接收到的消息作為參數傳入該方法 。在方法內部,目前只是簡單地打印消息,實際應用中可根據業務需求添加具體的處理邏輯,如解析消息中的訂單信息,更新訂單狀態到數據庫,調用其他服務通知相關人員等 。

配置優化

  1. 生產者配置參數優化:在 Spring Boot 的 application.properties(或 application.yml)文件中,可對 Kafka 生產者的配置參數進行優化 。例如:
 

# Kafka 基礎配置

spring.kafka.bootstrap-servers=localhost:9092

# 生產者配置

spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer

spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer

spring.kafka.producer.acks=all

spring.kafka.producer.retries=3

spring.kafka.producer.batch-size=16384

spring.kafka.producer.linger.ms=10

“acks” 參數用于控制消息的持久性,取值為 “all” 時,表示分區 leader 必須等待消息被成功寫入到所有的 ISR 副本(同步副本)中才認為 produce 請求成功,提供了最高的消息持久性保證,但可能會降低吞吐量;若對消息持久性要求不高,可設置為 “1”,表示 leader 副本必須應答此 produce 請求并寫入消息到本地日志,之后 produce 請求被認為成功,這樣能提高一定的吞吐量,但存在消息丟失的風險 。“retries” 表示 Producer 發送消息失敗重試的次數,當發送消息出現瞬時失敗,如網絡波動、副本數量不足等情況時,Producer 會嘗試重新發送,設置合理的重試次數可提高消息發送的成功率 。“batch - size” 指定了 Producer 按照 batch 進行發送時,batch 的大小,默認是 16KB,當 batch 滿了后,Producer 會把消息發送出去,適當增大該值可減少網絡請求次數,提高發送效率,但也會占用更多的內存 。“linger.ms” 表示 Producer 在發送 batch 前等待的時間,默認是 0,表示不做停留,為了減少網絡 IO,提升整體的性能,建議設置一個合理的值,如 5 - 100ms,這樣 Producer 會在等待時間內盡量攢夠更多的消息再發送,進一步提高吞吐量 。

  1. 消費者配置參數優化:同樣在 application.properties(或 application.yml)文件中,優化 Kafka 消費者的配置參數:
 

# 消費者配置

spring.kafka.consumer.group-id=order - service - group

spring.kafka.consumer.auto-offset-reset=earliest

spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer

spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer

spring.kafka.consumer.properties.spring.json.trusted.packages=*

“group - id” 標記消費者所屬的消費者組,同一消費者組內的消費者會共同消費一個或多個 Topic 中的消息,且一條消息只會被組內的一個消費者消費,通過合理設置消費者組,可實現消息的并行消費和負載均衡 。“auto - offset - reset” 用于設置當 Kafka 中沒有初始偏移量或當前偏移量在服務器中不存在(如數據被刪除了)時的處理策略,取值為 “earliest” 表示自動重置偏移量到最早的偏移量,即從 Topic 的開頭開始消費消息;取值為 “latest”(默認值)表示自動重置偏移量為最新的偏移量,即從最新的消息開始消費;取值為 “none” 表示如果消費組原來的偏移量不存在,則向消費者拋異常 。在實際應用中,可根據業務需求選擇合適的策略,如在數據監控場景中,可能需要從最早的消息開始消費,以確保不遺漏任何數據;而在一些實時性要求較高的業務場景中,可選擇從最新的消息開始消費 。“key - deserializer” 和 “value - deserializer” 指定接收消息的 key 和 value 的反序列化類型,需與生產者端的序列化類型相對應,以確保消息能夠正確地被解析 。“spring.json.trusted.packages” 用于設置允許反序列化的包,當消費者接收到的消息是 JSON 格式且包含自定義對象時,需要設置該參數,“*” 表示允許所有包,在生產環境中,應根據實際情況進行更細粒度的配置,以提高安全性 。

總結與展望

總結 Kafka 優勢

在分布式系統的復雜生態中,Kafka 憑借其獨特的設計理念和強大的功能特性,成為了解決流量削峰和異步解耦問題的關鍵技術。它以高吞吐量、低延遲和可擴展性為基石,構建了一個可靠的消息傳遞和數據處理平臺 。

從流量削峰的角度看,Kafka 就像是分布式系統中的 “流量調節閥”。在面對如電商促銷、社交媒體熱點等場景下的突發流量時,Kafka 能夠憑借其消息隊列的緩沖機制,將大量的請求以消息的形式快速存儲起來,避免下游服務因瞬間的高負載而崩潰。通過合理配置生產者和消費者的參數,Kafka 可以靈活地控制消息的發送和消費速率,實現對流量的有效削峰,確保系統在高并發情況下的穩定運行 。

在異步解耦方面,Kafka 則扮演著 “系統解耦器” 的角色。它打破了傳統分布式系統中組件之間的強依賴關系,通過異步消息傳遞的方式,使生產者和消費者能夠獨立地進行開發、部署和擴展。這種解耦不僅降低了系統的耦合度,提高了系統的可維護性和可擴展性,還增強了系統的故障隔離能力,使得單個組件的故障不會影響整個系統的正常運行 。

未來應用趨勢

展望未來,隨著云計算、大數據、人工智能等技術的不斷發展,Kafka 的應用前景將更加廣闊。在云原生領域,Kafka 與 Kubernetes 等容器編排工具的集成將更加緊密,實現更加便捷的部署、管理和彈性擴展 。通過 Kubernetes 的自動化部署和資源管理能力,Kafka 集群可以根據實際負載動態調整節點數量,提高資源利用率,降低運維成本。同時,Kafka 也將更好地支持多租戶環境,通過更細粒度的訪問控制和資源隔離,滿足不同租戶的多樣化需求 。

在大數據和人工智能領域,Kafka 將繼續發揮其作為數據管道的核心作用。隨著數據量的持續增長和實時性要求的不斷提高,Kafka 將與 Flink、Spark 等大數據處理框架以及 TensorFlow、PyTorch 等人工智能框架進行更深入的集成 。例如,在實時機器學習場景中,Kafka 可以作為實時數據的采集和傳輸通道,將用戶行為數據、業務事件數據等實時傳遞給機器學習模型,實現模型的實時訓練和更新,為業務決策提供更及時、準確的支持 。同時,Kafka 還可能引入更多的智能數據路由和處理機制,利用機器學習和人工智能技術,根據數據的特征和業務需求,動態調整數據的路由和處理策略,提高數據處理的效率和準確性 。

總之,Kafka 作為分布式系統中的重要組件,在流量削峰和異步解耦方面展現出了卓越的能力。未來,隨著技術的不斷進步,Kafka 將不斷演進和發展,為分布式系統的發展提供更強大的支持 。

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

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

相關文章

從事登高架設作業需要注意哪些安全事項?

從事登高架設作業&#xff08;如腳手架搭設、高空維修、外墻清洗等&#xff09;屬于高風險特種作業&#xff0c;必須嚴格遵守安全規范。以下是關鍵安全注意事項&#xff0c;涵蓋作業前準備、作業中操作、應急處理三大環節&#xff0c;符合國家《高處作業安全技術規范》&#xf…

RA4M2開發IOT(6)----涂鴉模組快速上云

RA4M2開發IOT.6--涂鴉模組快速上云 概述視頻教學樣品申請硬件準備參考程序涂鴉官網鏈接創建一個項目選擇對應產品產品基本配置添加標準功能APP界面配置硬件選擇產品配置硬件詳情PCB原理圖涂鴉調試文件下載進入調試涂鴉模塊串口協議心跳檢測查詢產品信息查詢工作模式AP配網APP鏈…

AI時代SEO關鍵詞革新

內容概要 在人工智能&#xff08;AI&#xff09;技術快速發展的背景下&#xff0c;搜索引擎優化&#xff08;SEO&#xff09;關鍵詞策略正經歷根本性變革。本文將系統闡述AI如何重塑關鍵詞研究、優化及效果評估的全流程。具體而言&#xff0c;首先解析智能研究方法在挖掘用戶意…

JavaEE初階第三期:解鎖多線程,從 “單車道” 到 “高速公路” 的編程升級(一)

專欄&#xff1a;JavaEE初階起飛計劃 個人主頁&#xff1a;手握風云 目錄 一、認識線程 1.1. 概念 1.2. 為什么要使用線程 1.3. 進程和線程的關系 1.4. 多線程模型 二、多線程的創建 2.1. 繼承Thread類 2.2. 實現Runnable接口 2.3. 匿名內部類 2.4. lambda表達式 一、…

【StarRocks系列】建表優化

目錄 一、數據模型選擇 (核心優化) 二、分區與分桶策略 (數據分布優化) 三、字段類型與壓縮 四、索引策略 五、高級特性應用 六、建表示例&#xff08;關鍵優化整合&#xff09; 參考官網 優化性能 | StarRocks 在 StarRocks 中創建表時&#xff0c;合理的表設計是性能優…

linux-vim編輯器

linux-vim編輯器 前言一、命令模式1. 跳轉功能2. 文本編輯3. 模式切換 二、輸入模式1. 進入輸入模式2. 快捷鍵 三、末行模式1. 進入末行模式2. 文件操作3. 查找與替換4. 行操作 四、替換模式五、可視模式1. 進入可視模式2. 文本操作 六、相關配置 前言 vim - Vi IMproved, a p…

SQL關鍵字三分鐘入門: 表結構管理與分區設計。(ALTER、MODIFY、CHANGE、DEFAULT、VALUES、LESS THAN、RANGE)

前面我們已經學習了如何查詢數據&#xff08;SELECT&#xff09;、篩選數據&#xff08;WHERE&#xff09;等操作。現在我們要進入數據庫的另一個重要領域 —— 表結構管理與分區設計。 本文帶你快速認識以下關鍵字&#xff1a; ? ALTER? MODIFY? CHANGE? DEFAULT? VALU…

深度剖析:RTTI輕量框架實現原理與架構(C++ 17 高級編程)

&#x1f680; C RTTI反射系統深度設計文檔 &#x1f30c; 核心架構圖 #mermaid-svg-aWkaWoFklq1ylap6 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-aWkaWoFklq1ylap6 .error-icon{fill:#552222;}#mermaid-svg-a…

03-D3.js SVG text標簽?

Data Visualization D3.js ? SuperHiLearn how to create interactive, engaging experiences using HTML, CSS, SVG and Javascript.https://www.superhi.com/catalog/data-visualization-with-d3 text - SVG&#xff1a;可縮放矢量圖形 | MDNtext元素定義了一個由文字組成…

Python 使用Gitlab Api

代碼 REST API 見自帶幫助文檔 python 安裝python-gitlab pip install --upgrade python-gitlab使用API 參考&#xff1a;https://python-gitlab.readthedocs.io/en/stable/api-usage.html import gitlab# anonymous read-only access for public resources (GitLab.com…

中醫體質識別:理論、方法與應用的簡要綜述

中醫體質識別&#xff1a;理論、方法與應用的簡要綜述 摘要 中醫體質識別是中醫“治未病”及個性化診療的關鍵環節。本文系統闡述中醫體質識別&#xff0c;涵蓋理論基礎、常見體質類型、識別方法、現代技術應用及臨床實踐。中醫體質理論源遠流長&#xff0c;《黃帝內經》奠定…

稀疏表原理及應用場景

1 概述 稀疏表&#xff08;Sparse Table&#xff0c;ST&#xff09;是一種用于高效解決 靜態區間查詢&#xff08;Range Query&#xff09; 問題的數據結構&#xff0c;主要用于 可重復貢獻問題&#xff08;Idempotent Range Queries&#xff09;&#xff0c;例如區間最小值&a…

【深度學習與機器學習的區別】從本質到應用的全景對比

目錄 前言 一、三者關系&#xff1a;深度學習是機器學習的子集 1.1 概念關系 1.2 類比理解&#xff1a;動物 vs 哺乳動物 1.3 舉個例子更清楚 1.4 為什么“機器學習 ≠ 深度學習”&#xff1f; 1.5 最容易搞混的地方 二、核心區別總覽&#xff08;對比表&#xff09; …

Masscan常用命令詳解

一、工具介紹 Masscan是一款開源、高速的網絡端口掃描工具&#xff0c;設計目標是實現最快的掃描速度。它能夠在極短的時間內完成大規模的網絡掃描&#xff0c;適用于互聯網級別的掃描任務。它采用異步傳輸和自定義TCP/IP協議棧技術&#xff0c;最快可實現每秒160萬數據包的掃…

STM32的內部RC與外部晶振電路

內部RC是“能用”&#xff0c;外部晶振是“用得準”。 一、STM32芯片內部的“晶振電路”是什么&#xff1f; STM32內部確實集成了兩個RC&#xff08;電阻-電容&#xff09;振蕩器&#xff1a; HSI&#xff08;高速內部振蕩器&#xff09;&#xff1a;通常8MHz&#xff0c;精…

為OneCode 開發TRea 開發插件,從環境搭建到生態融合

作為 AI 原生開發環境&#xff0c;TRea 的插件體系支持開發者基于其核心能力&#xff08;如自然語言代碼生成、AI 代碼分析&#xff09;進行功能擴展。本文以開發一個 "OneCode 組件生成插件" 為例&#xff0c;詳解如何通過 TRea 開放接口實現自定義功能&#xff0c;…

Spring JDBC配置與講解

目錄 一、Spring JDBC概述1、Spring JDBC需要配置的依賴2、Spring配置項文件配置 二、Spring JDBC的使用1、Spring JDBC的增加操作2、Spring JDBC的修改操作3、Spring JDBC的刪除操作4、Spring JDBC的查詢操作 三、Spring JDBC的事務1、xml的形式進行事務2、Transactional注解 …

【AI智能體】Spring AI MCP 服務常用開發模式實戰詳解

目錄 一、前言 二、MCP 介紹 2.1 MCP是什么 2.2 MCP 核心特點 2.3 Spring AI MCP 介紹 2.3.1 Spring AI MCP架構 2.3.2 Spring AI MCP分層說明 2.4 兩種模式介紹 三、本地開發SSE模式 3.1 搭建mcp-server 3.1.1 導入工程核心依賴 3.1.2 添加配置文件 3.1.3 提供兩個…

OpenStack 入門與實踐

一、云計算概述 1.1 云計算的定義與本質 云計算&#xff08;Cloud Computing&#xff09;是一種基于網絡的超級計算模式&#xff0c;它能夠根據用戶的不同需求&#xff0c;動態提供所需的計算資源、存儲資源和網絡資源等。這種模式就像我們日常生活中使用水電煤氣一樣&#x…

AntV L7入門教程

以下教程將系統地介紹 AntV?L7 的核心 Scene 類用法&#xff0c;涵蓋實例化、地圖配置、視圖操作、圖層管理、事件監聽及資源銷毀等常用 API&#xff0c;并為每個方法給出完整示例代碼。所有示例均基于官方 API 文檔 ([l7.antv.antgroup.com][1])。 一、安裝與引入 # 安裝 L7…