【序列晉升】13 Spring Cloud Bus微服務架構中的消息總線

Spring Cloud Bus作為微服務架構中的關鍵組件,通過消息代理實現分布式系統中各節點的事件廣播與狀態同步,解決了傳統微服務架構中配置刷新效率低下、系統級事件傳播復雜等問題。它本質上是一個輕量級的事件總線,將Spring Boot Actuator的端點功能擴展到分布式環境中,使開發者能夠通過統一的接口管理微服務集群的配置更新和狀態變化。本文將從定義、背景、架構設計、解決的問題、關鍵特性、與同類產品的對比以及實際使用方法等方面,全面解析Spring Cloud Bus的技術原理與實踐應用。

一、什么是Spring Cloud Bus?

Spring Cloud Bus是Spring Cloud生態系統中的一個組件,用于在微服務架構中實現消息總線功能。它通過整合Java的事件處理機制和消息中間件(如RabbitMQ、Kafka)的特性,將分布式系統的節點與輕量級消息系統連接起來,形成一個統一的消息廣播通道。當某個微服務發生狀態變化(如配置更新)或需要傳遞特定事件時,Spring Cloud Bus會將這些信息通過消息中間件廣播到所有訂閱該主題的服務節點,實現全局狀態同步。

在微服務架構中,傳統的配置管理方式通常需要逐個服務發送刷新指令,這在服務數量較多時變得效率低下且難以維護。Spring Cloud Bus通過消息代理的發布-訂閱模型,簡化了這一過程,只需向消息總線發送一次刷新請求,即可觸發所有相關服務的配置更新 ,無需重啟服務即可實現動態配置。這種機制不僅提高了系統的靈活性,還降低了運維復雜度。

二、Spring Cloud Bus的誕生背景

Spring Cloud Bus的誕生源于微服務架構演進過程中對分布式系統狀態同步全局事件管理的需求。在單體應用中,配置更新或狀態變化只需在單一實例內處理,但在微服務架構中,隨著服務數量的增加和實例的動態擴展,如何高效地管理這些變化成為了一個挑戰。

微服務架構的普及帶來了以下問題:

  1. 配置管理困難:傳統的配置方式需要在每個服務實例上單獨更新,效率低下且容易出錯。
  2. 事件傳播復雜:系統級事件(如緩存失效、服務狀態變更)需要手動通知每個服務實例,增加了耦合度。
  3. 狀態同步不一致:微服務實例分布在不同節點上,難以保證配置或狀態的實時同步。

Spring Cloud Bus應運而生,旨在解決這些微服務通信中的痛點 。它最初作為Spring Cloud Config的補充組件出現,通過消息代理的廣播機制,使配置更新能夠自動傳播到所有微服務實例,無需逐個操作。隨著微服務架構的成熟,Spring Cloud Bus的應用場景也擴展到了更廣泛的系統事件管理領域。

三、Spring Cloud Bus的架構設計

Spring Cloud Bus的架構設計基于事件驅動消息代理兩個核心概念,其整體架構可分為以下幾個層次:

1. 消息中間件層

消息中間件是Spring Cloud Bus的基礎,負責消息的傳輸與路由。目前支持的實現包括:

  • RabbitMQ:通過AMQP協議實現消息的可靠傳輸,支持持久化、確認機制等特性。
  • Kafka:通過發布-訂閱模型實現高吞吐量的消息傳播,適合大規模分布式系統。

消息中間件層負責消息的存儲、傳輸和路由,確保事件能夠被正確地廣播到所有訂閱的服務。

2. Spring Cloud Bus核心層

核心層負責將Spring Boot Actuator的端點功能擴展到分布式環境。它通過消息代理將本地事件轉化為分布式事件,實現跨節點的狀態同步。核心組件包括:

  • AbstractBusEndpoint:抽象基類,用于實現消息總線端點。
  • RefreshBusEndpoint:具體實現類,負責處理配置刷新事件。
  • EnvironmentBusEndpoint:處理環境變量變更的端點。

核心層將Spring的事件模型與消息代理的特性結合,使開發者能夠以熟悉的方式操作分布式系統。

3. Spring Boot Actuator層

Actuator層提供了HTTP接口,用于觸發和管理配置刷新等操作。Spring Cloud Bus通過擴展Actuator的端點功能,實現了分布式環境下的統一管理。關鍵端點包括:

  • /bus/refresh:觸發所有訂閱服務的配置刷新。
  • /bus/env:發送鍵值對更新,修改每個節點的Spring環境。
4. 微服務節點層

微服務節點層是Spring Cloud Bus的最終消費者,負責處理接收到的事件。每個節點都需要配置消息代理連接信息,并啟用事件監聽機制。

架構示意圖如下:

+-------------------+      +-------------------+      +-------------------+
|   Microservice A  |      |   Microservice B  |      |   Microservice C  |
| (監聽消息總線)    |      | (監聽消息總線)    |      | (監聽消息總線)    |
+-------------------+      +-------------------+      +-------------------+|                               |v                               v
+-------------------+      +-------------------+      +-------------------+
|   消息中間件      |      |   消息中間件      |      |   消息中間件      |
| (如RabbitMQ/Kafka)|      | (如RabbitMQ/Kafka)|      | (如RabbitMQ/Kafka)|
+-------------------+      +-------------------+      +-------------------+|                               |v                               v
+-------------------+      +-------------------+      +-------------------+
|   Config Server   |      |   Bus Client A    |      |   Bus Client B    |
| (觸發配置刷新)    |      | (發布自定義事件)  |      | (處理接收到事件)  |
+-------------------+      +-------------------+      +-------------------+

這種分層架構使得Spring Cloud Bus能夠靈活地與不同消息中間件集成,同時保持與Spring Boot生態的兼容性。

四、Spring Cloud Bus解決的問題

Spring Cloud Bus主要解決以下問題:

1. 配置動態刷新

在微服務架構中,配置通常分散在多個服務實例中。傳統方式需要逐個服務發送刷新指令,效率低下且容易遺漏 。Spring Cloud Bus通過消息代理的廣播機制,使配置更新能夠自動傳播到所有訂閱的服務,大大簡化了配置管理流程。

2. 事件傳播與狀態同步

微服務之間需要傳遞系統級事件(如緩存失效、服務狀態變更)以保持一致性。手動實現這些事件傳播會增加系統的耦合度和復雜性。Spring Cloud Bus提供了一個統一的事件廣播通道,使開發者能夠以聲明式的方式處理分布式事件。

3. 服務管理與監控

Spring Cloud Bus可以作為微服務集群的管理通道,用于觸發服務重啟、配置重載等操作。通過消息代理的廣播機制,可以實現對整個集群的統一管理,簡化運維流程。

4. 解耦服務通信

在微服務架構中,服務之間的直接通信會增加耦合度。Spring Cloud Bus通過消息代理的中介作用,使服務之間通過事件進行間接通信,降低系統的耦合度和復雜性。

五、Spring Cloud Bus的關鍵特性

Spring Cloud Bus具備以下關鍵特性:

1. 輕量級事件廣播

Spring Cloud Bus基于Spring事件模型,提供輕量級的事件廣播機制,無需復雜的消息路由規則即可實現服務間的狀態同步。它通過消息代理的發布-訂閱模型,將本地事件轉化為分布式事件,實現跨節點的狀態傳播。

2. 與Spring Cloud Config無縫集成

Spring Cloud Bus是Spring Cloud Config的理想補充 ,解決了配置中心的動態刷新問題。當配置中心的配置發生變化時,Bus可以自動將變更廣播到所有訂閱的服務,實現配置的實時更新。

3. 支持多種消息中間件

Spring Cloud Bus支持多種消息中間件,包括RabbitMQ和Kafka。這種靈活性使得開發者可以根據實際需求選擇最適合的消息代理 ,同時保持一致的編程模型。

4. 精準尋址與廣播控制

通過destination參數,Spring Cloud Bus可以實現精準尋址,指定特定服務或實例接收事件。例如,destination=serviceA:**可以廣播到所有serviceA實例,而destination=serviceA:8080則只發送到指定端口的實例。這種機制提供了靈活的事件傳播控制。

5. 自定義消息轉換器

Spring Cloud Bus支持通過實現MessageConverter接口擴展消息格式,默認使用JSON格式,但可以自定義為其他格式(如Properties) ,滿足不同場景的需求。

6. 消息追蹤與調試

通過配置spring.cloud bus.trace.enabled=true,可以啟用消息追蹤功能,記錄消息的發送、接收和處理過程 ,便于調試和監控分布式系統中的事件傳播。

六、Spring Cloud Bus與同類產品的對比

Spring Cloud Bus與Spring Cloud Stream是Spring Cloud生態中兩個重要的消息處理組件,它們在設計目標和使用場景上有顯著區別:

特性Spring Cloud BusSpring Cloud Stream
核心定位系統級廣播(配置刷新、管理指令)業務級消息處理(訂單事件、數據流)
依賴組件Actuator端點(如/bus/refreshBinder抽象層(支持Kafka/RabbitMQ等)
消息格式默認JSON,支持自定義擴展(如Properties)支持多種格式(JSON、Avro等),依賴Binder實現
路由控制通過destination參數實現精準尋址通過@StreamListener綁定通道,無內置廣播機制
典型用例全局配置更新、服務狀態同步訂單處理、日志收集、事件驅動業務邏輯
集成復雜度簡單,主要依賴自動配置和端點觸發較高,需定義消息通道和綁定邏輯
消息可靠性基于消息代理的可靠性保證(如持久化、確認機制)支持消息持久化、重試等高級特性,可靠性更高

Spring Cloud Bus專注于系統級事件的廣播,如配置更新、服務狀態變更等,通常與Spring Boot Actuator和Spring Cloud Config結合使用。而Spring Cloud Stream則專注于業務級消息的生產與消費,提供更豐富的消息處理功能,如分區、消費組、消息持久化等。

除了Spring Cloud Stream外,Spring Cloud Bus還可以與Spring Cloud Function結合使用,實現更靈活的事件處理邏輯。但總體而言,Spring Cloud Bus在Spring Cloud生態中沒有直接的競品,它填補了微服務架構中系統級事件廣播的空白。

七、Spring Cloud Bus的使用方法

1. 環境準備

在使用Spring Cloud Bus之前,需要確保以下環境已就緒:

  • 消息中間件:安裝并配置RabbitMQ或Kafka。本文以RabbitMQ為例。
  • Spring Cloud Config:配置中心服務已部署并運行。
  • Spring Boot版本:Spring Boot 3.4.0+(Spring Cloud Bus 4.0.0要求) 。
2. 配置Spring Cloud Bus

在Spring Boot項目中,添加以下依賴:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

application.yml中配置RabbitMQ連接信息和Bus相關設置:

server:port: 8080spring:application:name: config-clientindex: ${隨機唯一值}  # 確保每個實例的applicationContext ID唯一rabbitmq:host: localhostport: 5672username: guestpassword: guestvirtual-host: /  # 如果使用非默認虛擬主機,需指定cloud:bus:enabled: truetrace:enabled: true  # 啟用消息追蹤config:uri: http://localhost:8888  # Config Server地址failFast: trueretry:initial-interval: 1000max-interval: 10000max-attempts: 5multiplier: 1.0
3. 配置刷新

要實現配置的動態刷新,需要在微服務中使用@RefreshScope注解標記需要刷新的Bean:

@RefreshScope
@RestController
public class ConfigController {@Value("${test foo}")private String testFoo;@GetMapping("/test")public String getTestFoo() {return testFoo;}
}

然后,可以通過以下方式觸發配置刷新:

  • 向Config Server發送請求
curl -X POST http://localhost:8888/actuator/bus-refresh
  • 向微服務實例發送請求
curl -X POST http://localhost:8080/actuator/bus-refresh

無論向哪個端點發送請求,配置更新都會通過消息總線廣播到所有訂閱的服務

4. 自定義事件廣播

Spring Cloud Bus不僅限于配置刷新,還可以用于廣播自定義事件。以下是實現自定義事件廣播的步驟:

  • 定義自定義事件
public class MyCustomEvent extends ApplicationEvent {private final String message;public MyCustomEvent(Object source, String message) {super(source);this.message = message;}public StringgetMessage() {return message;}
}
  • 創建事件發布者
@Component
public class EventPublisher {@Autowiredprivate ApplicationEventPublisher eventPublisher;public void publishEvent(String message) {eventPublisher.publishEvent(new MyCustomEvent(this, message));}
}
  • 創建事件監聽器
@Component
public class EventListener {@EventListenerpublic void handleEvent(MyCustomEvent event) {System.out.println("Received event: " + event.getMessage());}
}
  • 通過HTTP接口觸發事件
curl -X POST http://localhost:8080/actuator/bus事件
5. 高級配置

Spring Cloud Bus還支持一些高級配置,以滿足不同場景的需求:

  • 消息持久化(RabbitMQ):
spring:rabbitmq:publisher-確認: true  # 啟用消息確認機制delivery-mode: persistent  # 設置消息持久化
  • 消息追蹤
spring:cloud:bus:trace:enabled: trueheaders: correlationId,destination
  • 安全性配置(RabbitMQ):
spring:rabbitmq:host: localhostport: 5672username: adminpassword: passwordvirtual-host: /my_vhost  # 限制訪問特定虛擬主機
  • Kafka配置
spring:cloud:bus:enabled: truekafka:bootstrap-servers: localhost:9092topic: springCloudBussecurity:enabled: trueprotocol: SASL_SSLsasl:mechanism: PLAINusername: adminpassword: password

八、最佳實踐與注意事項

1. 版本兼容性

Spring Cloud Bus的版本與Spring Boot和Spring Cloud整體版本密切相關。確保使用兼容的版本組合 ,避免因版本不匹配導致的功能異常。例如:

  • Spring Cloud Bus 4.0.0要求Spring Boot 3.4.0+和Java 17+ 。
  • Spring Cloud Alibaba 2021版本與Spring Cloud 2024.x不兼容,需等待新版本適配?。
2. 消息中間件選擇

根據系統規模和性能需求選擇合適的消息中間件:

  • RabbitMQ:適合中小規模系統,配置簡單,支持消息持久化和確認機制。
  • Kafka:適合大規模系統,高吞吐量,但配置相對復雜。
3. 安全配置

在生產環境中,必須配置消息中間件的安全性,防止未授權訪問和消息泄露:

  • RabbitMQ:創建獨立用戶,限制其虛擬主機訪問權限,啟用SSL加密。
  • Kafka:配置ACL權限控制,啟用SSL加密,設置合適的分區和副本數。
4. 性能調優

根據系統負載和消息量進行性能調優:

  • 消息持久化:確保重要事件能夠可靠傳輸,避免因網絡故障導致消息丟失。
  • 消息確認機制:啟用消息確認機制,確保消息被正確接收和處理。
  • 分區策略:對于Kafka,根據消息類型設置合適的分區策略,提高吞吐量。
  • QoS設置:對于RabbitMQ,設置合適的QoS參數,控制消息消費速率。
5. 監控與日志

配置完善的監控和日志系統,及時發現和處理消息總線中的問題

  • 啟用消息追蹤功能,記錄消息的發送、接收和處理過程。
  • 集成Spring Cloud Sleuth,實現分布式鏈路追蹤。
  • 配置完善的日志系統,記錄消息處理的詳細信息。

九、總結與展望

Spring Cloud Bus作為微服務架構中的消息總線組件,通過消息代理實現分布式系統中各節點的事件廣播與狀態同步,解決了傳統微服務架構中配置刷新效率低下、系統級事件傳播復雜等問題。它與Spring Cloud Config的無縫集成,使配置管理變得更加高效和靈活;與Spring Boot Actuator的結合,提供了統一的系統管理接口。

隨著微服務架構的不斷發展和云原生技術的普及,Spring Cloud Bus的應用場景也在不斷擴展。未來,隨著消息中間件技術的演進和Spring Cloud生態的完善,Spring Cloud Bus可能會支持更多類型的消息代理,提供更豐富的事件處理功能,更好地滿足分布式系統的通信需求。

對于開發者而言,掌握Spring Cloud Bus的使用方法,能夠提高微服務架構的靈活性和可維護性 ,簡化配置管理和系統級事件傳播的實現。同時,結合Spring Cloud Stream等其他組件,可以構建更加完善的分布式消息處理系統,滿足業務發展的各種需求。

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

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

相關文章

[激光原理與應用-314]:光學設計 - 光學系統設計與電子電路設計的相似或相同點

光學系統設計與電子電路設計雖分屬不同工程領域&#xff0c;但在設計理念、方法論和工程實踐中存在諸多相似或相同點。這些共性源于兩者均需解決復雜系統的優化問題&#xff0c;并遵循工程設計的通用規律。以下是具體分析&#xff1a;一、設計流程的相似性需求分析與規格定義光…

Linux學習:信號的保存

目錄1. 進程的異常終止與core dump標志位1.1 進程終止的方式1.2 core方案的作用與使用方式2. 信號的保存2.1 信號的阻塞2.2 操作系統中的sigset_t信號集類型2.3 進程PCB中修改block表的系統調用接口2.4 信號阻塞的相關問題驗證1. 進程的異常終止與core dump標志位 1.1 進程終止…

數據分析編程第二步: 最簡單的數據分析嘗試

2.1 數據介紹有某公司的銷售數據表 sales.csv 如下:第一行是標題&#xff0c;解釋每一列存了什么東西。第二行開始每一行是一條數據&#xff0c;對應一個訂單。這種數據有個專業的術語&#xff0c;叫結構化數據。這是現代數據處理中最常見的數據類型。整個表格的數據統稱為一個…

UDP報文的數據結構

主要內容參照https://doc.embedfire.com/net/lwip/zh/latest/doc/chapter14/chapter14.html#id6&#xff0c;整理出來自用。 1. UDP 報文首部結構體&#xff08;udp_hdr&#xff09; 為清晰定義 UDP 報文首部的各個字段&#xff0c;LwIP 設計了udp_hdr結構體&#xff0c;其包含…

圖論與最短路學習筆記

圖論與最短路在數學建模中的應用 一、圖論模型圖 G(V,E)G(V,E)G(V,E) VVV&#xff1a;頂點集合EEE&#xff1a;邊集合每條邊 (u,v)(u,v)(u,v) 賦予權值 w(u,v)w(u,v)w(u,v)&#xff0c;可用 鄰接矩陣 或 鄰接表 表示。二、最短路問題的數學形式 目標&#xff1a;尋找從源點 sss…

第九節 Spring 基于構造函數的依賴注入

當容器調用帶有一組參數的類構造函數時&#xff0c;基于構造函數的 DI 就完成了&#xff0c;其中每個參數代表一個對其他類的依賴。接下來&#xff0c;我們將通過示例來理解 Spring 基于構造函數的依賴注入。示例&#xff1a;下面的例子顯示了一個類 TextEditor&#xff0c;只能…

【數據庫】PostgreSQL詳解:企業級關系型數據庫

文章目錄什么是PostgreSQL&#xff1f;核心特性1. 標準兼容性2. 擴展性3. 高級功能4. 可靠性數據類型1. 基本數據類型2. 高級數據類型基本操作1. 數據庫操作2. 表操作3. 數據操作高級查詢1. 連接查詢2. 子查詢3. 窗口函數JSON操作1. JSON數據類型2. JSON查詢3. JSON索引全文搜索…

FFMPEG相關解密,打水印,合并,推流,

1&#xff1a;ffmepg進行打水印解密 前提ffmepg安裝利用靜態版就可以這個什么都有&#xff0c;不用再配置其他信息&#xff1a;&#xff08;這個利用ffmpeg終端命令是沒問題的&#xff0c;但是如果要是再C中調用ffmpeg庫那么還需要從新編譯安裝下&#xff09; 各個版本 Inde…

MySql知識梳理之DML語句

注意: 插入數據時&#xff0c;指定的字段順序需要與值的順序是一一對應的。 字符串和日期型數據應該包含在引號中。 插入的數據大小&#xff0c;應該在字段的規定范圍內注意:修改語句的條件可以有&#xff0c;也可以沒有&#xff0c;如果沒有條件&#xff0c;則會修改整張表的所…

GaussDB GaussDB 數據庫架構師修煉(十八)SQL引擎-SQL執行流程

1 SQL執行流程查詢解析&#xff1a;詞法分析、語法分析、 語義分析 查詢重寫&#xff1a;視圖和規則展開、基于規則的查詢優化 計劃生成&#xff1a;路徑搜索和枚舉、選出最優執行計劃 查詢執行&#xff1a;基于優化器生成的物理執行計劃對數據進行獲取和計算2 解析器和優化器S…

grpc 1.45.2 在ubuntu中的編譯

要在 Ubuntu 上編譯 gRPC 1.45.2&#xff0c;需要按照以下步驟操作。以下指南基于 gRPC 官方文檔和相關資源&#xff0c;確保環境配置正確并成功編譯。請確保你有管理員權限&#xff08;sudo&#xff09;以安裝依賴項和執行相關命令。 1. 準備環境 確保你的 Ubuntu 系統已安裝…

lesson45:Linux基礎入門指南:從內核到實踐操作全解析

目錄 一、Linux簡介與核心概念 1.1 Linux的起源與發展 1.2 內核與發行版的關系 二、Linux內核版本解析 2.1 內核版本命名規則 2.2 2025年主流內核版本 三、主流Linux發行版對比 3.1 桌面用戶首選 Ubuntu 24.04 LTS Linux Mint 22 3.2 技術愛好者之選 Fedora 41 Ar…

PCL點云庫入門(第24講)——PCL庫點云特征之NARF特征描述 Normal Aligned Radial Feature(NARF)

一、算法原理 1、NARF 特征概述 NARF(Normal Aligned Radial Feature)是 2011 年由 Bastian Steder 等人在論文 《Point Feature Extraction on 3D Range Scans Taking into Account Object Boundaries》中提出的一種 稀疏局部 3D 特征描述子。 核心目標是提取具有“邊界意…

使用 eventpp 構建跨 RT-Thread 與 ARM-Linux 的輕量級 Active Object(AO)事件驅動框架

0. 引言 本文展示一個實踐路徑&#xff1a;以輕量級 C 事件庫 eventpp 為核心&#xff0c;設計并實現一個面向嵌入式的、可移植的 Active Object&#xff08;AO&#xff09;事件驅動架構。該架構滿足以下目標&#xff1a; 跨平臺兼容&#xff1a;單套代碼在 RT-Thread&#xff…

【python實用小腳本-193】Python全能PDF小助手:剪切/合并/旋轉/加密一條龍——再也不用開會員

Python全能PDF小助手&#xff1a;剪切/合并/旋轉/加密一條龍——再也不用開會員 PDF編輯, 本地處理, 零會員費, 多功能腳本, 瑞士軍刀 故事開場&#xff1a;一把瑞士軍刀救了周五下班的你 周五 17:55&#xff0c;老板甩來一堆 PDF&#xff1a; “把第 3、7 頁刪掉”“再和合同合…

Ubuntu根分區擴容

目錄 1.先查看/dev/sda 整塊磁盤設備的分區占用情況&#xff1a; 2.在VMware中編輯虛擬機&#xff1a; 3.進入虛擬機&#xff0c;進入disk應用程序&#xff1a; 4.擴容文件系統 5.最后通過df-h lsblk或通過可視化GParted進行驗證。 1.先查看/dev/sda 整塊磁盤設備的分區占…

智慧城市SaaS平臺/市政設施運行監測系統之空氣質量監測系統、VOC氣體監測系統、污水水質監測系統及環衛車輛定位調度系統架構內容

1. 空氣質量監測系統1) 監測點管理 a) 監測點基本信息 支持記錄空氣質量監測點的名稱、位置、類型、設備配置等信息。 b) 監測點分布地圖 支持通過GIS地圖展示監測點的分布情況&#xff0c;支持地圖查詢和導航。 2) 空氣質量監測 a) 實時數據采集 支持實時采集空氣質量數據&…

PiscCode迅速集成YOLO-Pose 實現姿態關鍵點軌跡跟蹤應用

在計算機視覺領域&#xff0c;人體姿態檢測與軌跡跟蹤是很多應用場景的核心技術&#xff0c;例如運動分析、行為識別、智能監控等。本文將介紹如何在 PiscCode 平臺上&#xff0c;利用 YOLO-Pose 模型進行姿態估計&#xff0c;并實現多人關鍵點軌跡跟蹤。 一、什么是 PiscCode …

HTTP的狀態碼有哪些,并用例子說明一下

問題HTTP的狀態碼有哪些&#xff0c;并用例子說明一下我的回答HTTP狀態碼是服務器對客戶端請求的響應碼&#xff0c;它們按照不同的功能被分為五大類。我來介紹一下主要的狀態碼及其實際應用場景&#xff1a;1xx&#xff08;信息性狀態碼&#xff09;&#xff1a;表示請求已接收…

【51單片機】【protues仿真】基于51單片機寵物投食器系統

目錄 一、主要功能 二、使用步驟 三、硬件資源 四、軟件設計 五、實驗現象 一、主要功能 1、LCD1602液晶顯示當前時間 2、按鍵設置時間&#xff0c;5個定時投喂時間? 3、可以通過手動按鍵進行投喂食物 4、步進電機模擬投喂食物 二、使用步驟 基于51單片機的寵物自動投…