Eureka 與 Feign(一)

Eureka 與 Feign 知識解析

1. Eureka

Spring Cloud Eureka 是服務發現組件,包含:

  • Eureka Server:注冊中心,管理服務實例
  • Eureka Client:服務實例,向注冊中心注冊/獲取服務信息

核心功能:

  • 服務注冊與發現
  • 心跳檢測(默認30秒)
  • 服務故障自動剔除
  • 客戶端緩存注冊信息
2. OpenFeign

聲明式 HTTP 客戶端工具,核心特性:

  • 基于接口的聲明式調用
  • 整合 Ribbon 實現負載均衡
  • 整合 Hystrix 實現熔斷(需額外配置)
  • 自動處理 HTTP 請求/響應序列化
依賴關系
<!-- Eureka Server -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency><!-- Eureka Client + OpenFeign -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

完整示例代碼

1. Eureka Server (服務注冊中心)

application.yml

server:port: 8761
eureka:client:register-with-eureka: falsefetch-registry: false

EurekaServerApplication.java

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {public static void main(String[] args) {SpringApplication.run(EurekaServerApplication.class, args);}
}
2. Service Provider (服務提供者)

application.yml

server:port: 8081
spring:application:name: user-service
eureka:client:service-url:defaultZone: http://localhost:8761/eureka/

UserController.java

@RestController
@RequestMapping("/users")
public class UserController {@GetMapping("/{id}")public User getUser(@PathVariable Long id) {return new User(id, "用戶" + id, "user" + id + "@example.com");}
}// 實體類
public class User {private Long id;private String name;private String email;// 構造方法/getters/setters
}
3. Service Consumer (服務消費者)

application.yml

server:port: 8080
spring:application:name: order-service
eureka:client:service-url:defaultZone: http://localhost:8761/eureka/

Feign Client 接口

@FeignClient(name = "user-service")
public interface UserServiceClient {@GetMapping("/users/{id}")User getUserById(@PathVariable("id") Long userId);// 請求參數示例@GetMapping("/users/search")User searchUser(@RequestParam("name") String name);
}

OrderController.java

@RestController
@RequestMapping("/orders")
public class OrderController {@Autowiredprivate UserServiceClient userServiceClient;@GetMapping("/{orderId}/user")public User getOrderUser(@PathVariable Long orderId) {// 通過Feign調用用戶服務Long userId = orderId * 10; // 模擬用戶IDreturn userServiceClient.getUserById(userId);}
}

啟用Feign (主類)

@SpringBootApplication
@EnableFeignClients
public class OrderServiceApplication {public static void main(String[] args) {SpringApplication.run(OrderServiceApplication.class, args);}
}
4. 高級配置

自定義Feign配置

@Configuration
public class FeignConfig {@BeanLogger.Level feignLoggerLevel() {return Logger.Level.FULL; // 詳細日志}@Beanpublic RequestInterceptor authInterceptor() {return template -> template.header("Authorization", "Bearer token123");}
}

使用配置

@FeignClient(name = "user-service",configuration = FeignConfig.class,fallback = UserServiceFallback.class // 熔斷回退
)
public interface UserServiceClient { ... }

熔斷回退實現

@Component
public class UserServiceFallback implements UserServiceClient {@Overridepublic User getUserById(Long userId) {return new User(0L, "備用用戶", "fallback@example.com");}
}

日志配置 (application.yml)

logging:level:org.springframework.cloud.openfeign: DEBUG

測試流程

  1. 啟動 Eureka Server (8761端口)
  2. 啟動 User Service (8081端口)
  3. 啟動 Order Service (8080端口)
  4. 訪問測試:http://localhost:8080/orders/123/user

關鍵概念總結

  1. 服務注冊:Provider 啟動時向 Eureka 注冊信息
  2. 服務發現:Consumer 通過服務名發現 Provider
  3. 負載均衡:Feign 自動實現多實例輪詢
  4. 聲明式調用:定義接口即完成遠程調用
  5. 熔斷機制:快速失敗 + 服務降級

:當前 Spring Cloud 版本默認使用 LoadBalancer 替代 Ribbon,最新版 OpenFeign 已內置負載均衡能力。

通過這個完整示例,可以清晰看到Eureka實現服務治理、Feign簡化服務調用的協作過程,是構建微服務架構的基礎設施。

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

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

相關文章

AN動畫軟件|Animate 2025百度云下載與安裝教程指南

如大家所了解的&#xff0c;?Animate全稱Adobe Animate&#xff0c;常常也被簡稱為AN。它是一款2D動畫制作軟件?&#xff0c;其前身為Flash Professional CC&#xff0c;2016年更名為Animate CC&#xff0c;支持Flash SWF文件及HTML5動畫創作&#xff0c;廣泛應用于網頁交互、…

提示詞工程中常見協議框架應用實例

一、生成式診斷催化協議(Generative Diagnosis Catalysis, GDC) 技術原理:基于神經符號系統的因果推理引擎,融合貝葉斯網絡與強化學習 實施場景: class DiagnosticCatalyst:def __init__(self, domain="醫療診斷"):self.causal_graph

資深Java工程師的面試題目(七)JDK JVM

以下是針對 Java 面試者 的 JVM 和 JDK 相關題目&#xff0c;涵蓋核心知識點、實際應用場景和進階問題&#xff1a; 一、JVM 基礎 1. JVM 內存模型 題目&#xff1a; 請描述 JVM 的內存模型及其組成部分&#xff0c;并說明每個區域的作用。 解析&#xff1a; JVM 內存模型分…

【系統設計【4】】設計一個限流器:從理論到實踐的完整解決方案

文章目錄 第一步&#xff1a;理解問題并確定設計范圍1、為什么需要限流器2、需求澄清的藝術3、需求總結與優先級 第二步&#xff1a;提出高層次設計并獲得認同1. 限流器的部署位置選擇2. 限流算法的選擇與權衡3. 高層架構設計 第三步&#xff1a;深入設計1、限流規則的設計與管…

基于DETR目標檢測項目

DETR見解 DETR&#xff08;Detection Transformer&#xff09;是一種端到端的目標檢測模型&#xff0c;由Facebook AI Research&#xff08;FAIR&#xff09;于2020年提出。DETR采用了Transformer架構&#xff0c;與傳統的基于區域的目標檢測方法有所不同&#xff0c;它通過全…

ZooKeeper 集群部署

ZooKeeper 集群部署 前言安裝部署資源下載JDK 部署Zookeeper 部署 前言 在 Linux 服務器上部署 Zookeeper 之前&#xff0c;需要先安裝 JDK。以下是相關版本及環境信息&#xff1a; JDK 版本 jdk-17_linux-x64_bin.tar.gz Zookeeper 部署的版本 3.5.7 操作系統版本 Red Hat E…

8.TCP Server端實現

1.C/S模型 2.Server 端功能分析 tcp_server.c #include "tcp_server.h" #include "lwip/sockets.h" #include <stdio.h>char ReadBuff[BUFF_SIZE]; /* TCP服務器任務函數 */ void vTcpserver_Task(void) {int sfd, cfd, n, i;struct sockaddr_in…

課設作業圖書管理系統

用戶注冊&#xff0c;登錄 播放地址 課設作業圖書管理系統_嗶哩嗶哩_bilibili 對圖書進行增刪改查 package com.xwr.controller; import com.xwr.entity.Book; import com.xwr.entity.Category; import com.xwr.service.BookService; import com.xwr.service.CategoryServ…

springboot 配置加密

springboot 配置加密 [TOC](springboot 配置加密) 前言一、在配置類賦值之前解密二、修改賦值后加密的配置類 前言 在一些國家項目中經常會要求不能暴露數據庫鏈接和密碼, 所以需要對配置文件里面的一些配置進行加密處理。 解決方法有兩種&#xff1a;一種是在配置加載后還沒給…

【操作系統】macOS軟件提示“已損壞,打不開”的解決方案

macOS軟件提示“已損壞&#xff0c;打不開”的解決方案 在使用 macOS 系統時&#xff0c;不少用戶都遇到過這樣的情況&#xff1a;當嘗試打開某個應用程序時&#xff0c;系統彈出提示“xxx 已損壞&#xff0c;打不開。您應該將它移到廢紙簍”&#xff0c;或者顯示“無法打開‘…

數據庫系統概論(二十)數據庫恢復技術

數據庫系統概論&#xff08;二十&#xff09;數據庫恢復技術 前言一、事務的基本概念1. 什么是事務&#xff1f;2. 事務的兩種"打開方式"2.1 隱式事務2.2 顯式事務&#xff1a;自己動手打包操作 3. 事務的四大"鐵律3.1 原子性3.2 一致性3.3 隔離性3.4 持久性 4.…

java將pdf文件轉換為圖片工具類

一、相關依賴 <!-- PDFBox for PDF processing --><dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.27</version></dependency>二、工具類 import org.apache.pdfbox.p…

零門檻探索國產數據庫硬核實力 —— 金倉數據庫在線體驗平臺體驗記

1、 金倉數據庫在線體驗平臺 最近&#xff0c;我發現了一個超棒的數據庫寶藏 —— 金倉數據庫在線體驗平臺。它在金倉社區上線后&#xff0c;憑借 “零門檻體驗 多場景交互” 的特點&#xff0c;迅速吸引了眾多數據庫愛好者的目光&#xff0c;我也忍不住去體驗了一番。 2、 …

Linux基本操作指令和vim編譯器

基本指令 查看日期與日歷 data 指令 顯示日期 用法1&#xff1a;data CST&#xff1a;China Standard Time 時區&#xff0c;中國標準時間 用法2&#xff1a; data 指定格式 常用格式&#xff1a; “%Y-%m-%d”(%F): 2025-06-16“%H:%M:%S”(%T): 20:19:45“%F%T”用法3&am…

“從HTTP到TCP/IP的旅程“-----深入淺出Java Web通信

先放結構圖&#xff1a; 一、引言&#xff1a;網絡通信就像寄快遞 想象一下我們在網上買了一本書&#xff0c;整個配送過程是這樣的&#xff1a; 應用層&#xff1a;你在購物網站填好收貨地址&#xff08;HTTP請求&#xff09;傳輸層&#xff1a;快遞公司把包裹打包&#xf…

docker build使用代理以實現構建過程中下載Github源碼等操作

在通過Dockerfile構建docker容器的過程中&#xff0c;經常會需要在構建過程中拉取Github上的代碼。當宿主機配好代理&#xff0c;但容器內是一個隔離的環境&#xff0c;若想在容器內訪問&#xff0c;則需再打通容器和宿主機之間的代理配置。 方法一&#xff1a; 若宿主機上的…

Docker 快速搭建一個基于 GPT-Vis 組件的統計圖表生成服務

以下是對工具簡單介紹&#xff1a; 可以在服務端使用 GPT-Vis 統計圖表組件直接渲染成圖片支持Docker一鍵部署&#xff0c;提供統計圖表渲染生成API接口支持多種GPT-Vis支持的組件&#xff0c;包括折線圖、柱形圖、餅圖、面積圖、條形圖、直方圖、散點圖、詞云圖、雷達圖、思維…

hal庫練習1

要求&#xff1a;一個按鍵實現呼吸燈的控制&#xff0c;一個按鍵控制LED燈的閃爍&#xff0c;串口發送數據控制燈的開關 定時器配置 1.選擇需要的定時器2.配置基礎參數&#xff08;根據時鐘樹給定時器輸入的時鐘&#xff09;3.打開中斷4.在主函數里打開中斷 定時器掃描按鍵 …

java線程(4)

程序(program) 是為完成制定任務,用某種語言編寫的一組指令的集合.簡單的話說:就是我們寫的代碼. 進程 1.進程是指進行中的程序,比如我們使用QQ,就啟動了一個進程,操作系統就會為該進程分配內存空間,當我們使用迅雷,又啟動了一個進程,操作系統將為迅雷分配新的內存空間. 2、…

02《F8Framework》核心入口 FF8.cs

FF8.cs類是 F8Framework的核心入口 采用單例模式 提供對各個功能模塊的全局訪問 【特點】通過靜態類FF8統一訪問所有功能 1.模塊化設計&#xff1a; 每個功能獨立 通過 ModuleCenter 統一管理 2.懶加載機制&#xff1a; …