当前位置: 首页 > news >正文

【微服务】Spring Cloud中如何使用Eureka

文章目录

      • 强烈推荐
      • 引言
      • 主要功能
      • Eureka 的架构
      • 使用示例
        • Eureka Server 配置
        • Eureka Client 配置
        • 示例服务
        • 服务发现调用示例
      • Spring Cloud如何实现服务的注册?
        • 1. 搭建 Eureka 服务注册中心
        • 2. 配置服务注册到 Eureka
        • 3. 验证服务注册
      • 总结
      • 应用场景
        • 1. 动态服务发现
        • 2. 负载均衡
        • 3. 服务治理
        • 4. 服务调用
        • 5. 灰度发布和蓝绿部署
        • 6. 多数据中心支持
      • 强烈推荐
      • 专栏集锦
      • 写在最后

579a429daf314744b995f37351b46548

强烈推荐

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站:人工智能

b004071ozy_05_amzn


引言

Eureka 是 Netflix 开源的一个服务发现组件,它在微服务架构中扮演着重要的角色。

Eureka 主要分为 Eureka Server 和 Eureka Client 两部分。

Eureka Server 作为服务注册中心,维护所有可用服务实例的信息。Eureka Client 作为服务提供者或消费者,负责向 Eureka Server 注册服务和获取其他服务的位置信息。


主要功能

  1. 服务注册

    服务提供者在启动时,会将自己的信息(如 IP 地址、端口、服务名称等)注册到 Eureka Server 上。

  2. 服务发现

    服务消费者从 Eureka Server 获取可用服务实例列表,并根据负载均衡策略调用具体的服务实例。

  3. 故障检测

    Eureka 定期发送心跳检测服务实例的健康状况。如果某个服务实例未能按时响应心跳,Eureka 会将其标记为不可用。

  4. 动态扩展

    Eureka 支持动态扩展和缩减服务实例。当服务实例上线或下线时,Eureka Server 会自动更新服务实例列表。


Eureka 的架构

  • Eureka Server

    服务注册中心,维护所有服务实例的信息。

  • Eureka Client

    服务提供者或消费者,负责注册服务和发现服务。


使用示例

Eureka Server 配置

首先,创建一个 Spring Boot 应用并添加以下依赖:

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

然后,在应用主类中添加 @EnableEurekaServer 注解:

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

最后,在 application.yml 中进行配置:

server:port: 8761eureka:client:register-with-eureka: falsefetch-registry: false
Eureka Client 配置

创建一个服务提供者或消费者应用,添加以下依赖:

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

在应用主类中添加 @EnableEurekaClient 注解:

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

application.yml 中进行配置:

server:port: 8080eureka:client:service-url:defaultZone: http://localhost:8761/eureka/
示例服务
@RestController
public class HelloController {@GetMapping("/hello")public String hello() {return "Hello from Eureka Client!";}
}
服务发现调用示例

使用 Feign 和 Ribbon 从 Eureka 注册中心获取服务实例并进行调用:

@FeignClient(name = "eureka-client")
public interface HelloClient {@GetMapping("/hello")String hello();
}@RestController
public class HelloController {@Autowiredprivate HelloClient helloClient;@GetMapping("/call")public String call() {return helloClient.hello();}
}

通过上述配置和代码示例,Eureka Server 维护所有服务实例的信息,Eureka Client 可以从 Eureka Server 获取服务实例列表,并通过 Feign 和 Ribbon 进行负载均衡和服务调用。

这种方式在微服务架构中极大地简化了服务注册与发现的过程,提高了系统的扩展性和容错能力。


Spring Cloud如何实现服务的注册?

Spring Cloud 通过服务注册中心(Service Registry)实现服务的注册和发现。Eureka 是 Spring Cloud Netflix 提供的一个常见的服务注册和发现组件。以下是使用 Spring Cloud 和 Eureka 实现服务注册的基本步骤:

1. 搭建 Eureka 服务注册中心

首先,需要创建一个 Eureka 服务注册中心。

步骤:

  1. 创建一个新的 Spring Boot 项目,并添加以下依赖项:

    <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
    
  2. application.propertiesapplication.yml 中配置 Eureka 服务器:

    server:port: 8761eureka:client:register-with-eureka: falsefetch-registry: false
    
  3. 在主应用类中添加 @EnableEurekaServer 注解:

    @SpringBootApplication
    @EnableEurekaServer
    public class EurekaServerApplication {public static void main(String[] args) {SpringApplication.run(EurekaServerApplication.class, args);}
    }
    
2. 配置服务注册到 Eureka

接下来,需要配置客户端服务将自己注册到 Eureka 服务注册中心。

步骤:

  1. 创建一个新的 Spring Boot 项目,并添加以下依赖项:

    <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    
  2. application.propertiesapplication.yml 中配置 Eureka 客户端:

    eureka:client:service-url:defaultZone: http://localhost:8761/eureka/
    spring:application:name: my-service
    
  3. 在主应用类中添加 @EnableEurekaClient 注解:

    @SpringBootApplication
    @EnableEurekaClient
    public class MyServiceApplication {public static void main(String[] args) {SpringApplication.run(MyServiceApplication.class, args);}
    }
    
3. 验证服务注册

启动 Eureka 服务注册中心和服务客户端,访问 http://localhost:8761 可以看到注册到 Eureka 服务注册中心的服务列表。

总结

通过以上步骤,我们使用 Spring Cloud 和 Eureka 实现了基本的服务注册和发现机制。

Eureka 服务注册中心负责管理和协调服务的注册与发现,而各个微服务通过 Eureka 客户端与注册中心进行交互,实现服务的动态注册和发现。


应用场景

Spring Cloud 和 Eureka 的服务注册和发现机制在微服务架构中有广泛的应用场景,以下是一些典型的应用场景:

image-20240710003016350
1. 动态服务发现

在微服务架构中,各个服务实例可能会动态地加入和退出。Eureka 允许服务自动注册和注销,使得客户端可以动态地发现和调用可用的服务实例。

应用场景:

  • 微服务自动扩展:在高峰期自动增加服务实例,在低谷期自动减少实例。

  • 服务自愈:当某个服务实例故障时,Eureka 可以自动从服务注册列表中移除该实例,并通过健康检查确保其他实例的正常运行。

2. 负载均衡

Eureka 可以与负载均衡器(如 Spring Cloud Ribbon)结合使用,客户端可以从注册中心获取可用服务实例列表,然后进行负载均衡调用。

应用场景:

  • 流量分配:将流量均匀分配到多个服务实例,避免单个实例过载。

  • 故障转移:当某个实例不可用时,自动切换到其他可用实例。

3. 服务治理

通过 Eureka,微服务架构中的各个服务可以进行统一的管理和监控,简化了服务的部署和维护。

应用场景:

  • 服务监控:实时监控服务的健康状态和可用性。

  • 配置管理:通过配置中心(如 Spring Cloud Config)进行集中化配置管理,动态更新服务配置。

4. 服务调用

Eureka 与客户端负载均衡器(如 Ribbon)和声明式 HTTP 客户端(如 Feign)结合,简化了服务之间的调用。

应用场景:

  • 简化调用:使用 Feign 客户端通过接口调用远程服务,无需手动编写 HTTP 请求。

  • 动态路由:根据 Eureka 的注册信息动态选择调用目标,避免硬编码服务地址。

5. 灰度发布和蓝绿部署

Eureka 可以帮助实现灰度发布和蓝绿部署,通过注册不同版本的服务实例,实现流量的分级和分段管理。

应用场景:

  • 灰度发布:逐步将新版本服务发布给一部分用户进行测试,确保稳定后再全量发布。

  • 蓝绿部署:在不影响现有服务的情况下,部署新版本服务进行切换,确保发布的平滑过渡。

6. 多数据中心支持

Eureka 支持多数据中心的服务注册和发现,可以跨数据中心进行服务调用,提升系统的容灾和高可用性。

应用场景:

  • 跨数据中心调用:实现不同数据中心之间的服务互通,提高系统的容灾能力。
  • 全局负载均衡:在全球范围内分配流量,提高系统的响应速度和稳定性。

通过上述应用场景,可以看出 Spring Cloud 和 Eureka 在微服务架构中发挥了重要作用,极大地提高了系统的灵活性、可扩展性和高可用性。


强烈推荐

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站:人工智能

b004071ozy_05_amzn


专栏集锦

大佬们可以收藏以备不时之需:

Spring Boot 专栏:http://t.csdnimg.cn/peKde

ChatGPT 专栏:http://t.csdnimg.cn/cU0na

Java 专栏:http://t.csdnimg.cn/YUz5e

Go 专栏:http://t.csdnimg.cn/Jfryo

Netty 专栏:http://t.csdnimg.cn/0Mp1H

Redis 专栏:http://t.csdnimg.cn/JuTue

Mysql 专栏:http://t.csdnimg.cn/p1zU9

架构之路 专栏:http://t.csdnimg.cn/bXAPS


写在最后

感谢您的支持和鼓励! 😊🙏

如果大家对相关文章感兴趣,可以关注公众号"架构殿堂",会持续更新AIGC,java基础面试题, netty, spring boot, spring cloud等系列文章,一系列干货随时送达!

如果有项目或者毕设合作,请V:fengyelin8866,备注毕设

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 在Visual Studio/Qt Creator 中使用CMake安装和使用vcpkg包
  • 全新在线客服系统源码(pc+h5+uniapp+公众号小程序+抖音)附搭建接入教程
  • 基于RK3568 Android11 移除长按电源按键弹窗的对话框中的 [关机] 和 [紧急呼救] 选项(详细分析)
  • Jenkins 部署Vue项目指引: Vue项目本地跨域代理 、解决ERR_UNSAFE_PORT
  • 轨迹优化 | 基于ESDF的共轭梯度优化算法(附ROS C++/Python仿真)
  • 驾驭企业数字化转型的利器:《TOGAF®标准第10版》
  • qt自定义控件遇到的找不到头文件的问题
  • CentOS的根目录下,/bin 和 /sbin 用途和权限
  • Go语言fmt包中print相关方法
  • Android实时通信:WebSocket与WebRTC的应用与优化
  • 智能合约中重放攻击
  • 【SpringMVC】详细了解SpringMVC中WEB-INF 目录资源,视图解析器和静态资源放行的使用。
  • 从0开始安装一个本地K8s环境
  • sqlalchemy时间范围查询
  • WPF篇(13)-ScrollViewer控件+ScrollBar滚动条+Slider滑动条
  • angular组件开发
  • Apache的基本使用
  • Javascript基础之Array数组API
  • JAVA之继承和多态
  • jquery cookie
  • 初识MongoDB分片
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • ​1:1公有云能力整体输出,腾讯云“七剑”下云端
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​Spring Boot 分片上传文件
  • ​经​纬​恒​润​二​面​​三​七​互​娱​一​面​​元​象​二​面​
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #14vue3生成表单并跳转到外部地址的方式
  • #565. 查找之大编号
  • #pragma pack(1)
  • (C#)获取字符编码的类
  • (C语言)二分查找 超详细
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第1节 (全局数据、栈和堆)
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (六)软件测试分工
  • (七)理解angular中的module和injector,即依赖注入
  • (实战篇)如何缓存数据
  • (四)库存超卖案例实战——优化redis分布式锁
  • (游戏设计草稿) 《外卖员模拟器》 (3D 科幻 角色扮演 开放世界 AI VR)
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • ../depcomp: line 571: exec: g++: not found
  • .gitignore文件---让git自动忽略指定文件
  • .NET Core 2.1路线图
  • .NET 常见的偏门问题
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .net 设置默认首页
  • .NET 中的轻量级线程安全
  • .Net(C#)自定义WinForm控件之小结篇
  • .net开发日常笔记(持续更新)
  • .NET之C#编程:懒汉模式的终结,单例模式的正确打开方式
  • @ComponentScan比较
  • @Responsebody与@RequestBody
  • @Tag和@Operation标签失效问题。SpringDoc 2.2.0(OpenApi 3)和Spring Boot 3.1.1集成
  • [ vulhub漏洞复现篇 ] Grafana任意文件读取漏洞CVE-2021-43798
  • [20171102]视图v$session中process字段含义