【微服务】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.properties 或 application.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.properties 或 application.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,备注毕设

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.tpcf.cn/diannao/44111.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android C++系列:Linux进程间关系

1. 终端 在UNIX系统中,用户通过终端登录系统后得到一个Shell进程,这个终端成为Shell进 程的控制终端(Controlling Terminal),在前面文章我们说过,控制终端是保存在PCB中的信 息,而我们知道fork会复制PCB中的信息,因此由Shell进程启动的其它进程的控制终端也是 这个终端。…

OpenCV进行视频分析(光流、目标跟踪)----20240710

一、OpenCV进行光流分析 # 光流分析蚂蚁轨迹 import numpy as np import cv2if __name__ == __main__:cap = cv2.VideoCapture(./pictures/ant.mp4)# ShiTomasi 角点检测参数feature_params = dict(maxCorners=100

基于Java中的SSM框架实现水稻朔源信息系统项目【项目源码】

基于Java中的SSM框架实现水稻朔源信息系统演示 SSM框架 SSM框架是基于Spring、SpringMVC以及Mybatis实现的针对JAVA WEB端应用的开发框架&#xff0c;通过SSM框架结构可以实现以上三种框架的优点集合&#xff0c;从而实现更加高效便捷的系统开发和呈现。该框架结构通过Spring框…

PolarisMesh源码系列——服务如何注册

前话 PolarisMesh&#xff08;北极星&#xff09;是腾讯开源的服务治理平台&#xff0c;致力于解决分布式和微服务架构中的服务管理、流量管理、配置管理、故障容错和可观测性问题&#xff0c;针对不同的技术栈和环境提供服务治理的标准方案和最佳实践。 PolarisMesh 官网&am…

main.cpp程序执行流程图

当然&#xff0c;我会为你绘制一个程序执行流程图&#xff0c;并用中文注释来解释 main.cpp 的代码逻辑思想和执行流程。 程序执行流程图 开始|V 初始化|V 打开摄像头 (VideoCapture cap(0))|V 进入主循环 (while (true))|V 捕获图像 (cap >> srcImage)|V 图像是否为空…

280个地级市金融集聚水平数据(2006-2022年)

2006年-2022年280个地级市金融集聚水平数据整理资源-CSDN文库 金融集聚水平&#xff1a;衡量地级市金融发展的新维度 金融集聚水平是衡量一个地区金融发展程度的重要指标&#xff0c;它反映了金融机构、金融资源、金融服务在特定时间和空间的集中程度。这一指标的评估可以从多…

根据H在有限域GF(2^m)上求解生成矩阵G

原理 有时间再补充。 注1&#xff1a;使用高斯消去法。如果Py不为单位阵&#xff0c;则说明进行了列置换&#xff0c;此时G不是系统形式。 注2&#xff1a;校验矩阵H必须是行满秩才存在对应的生成矩阵G&#xff0c;且生成矩阵G通常不唯一。 matlab实现&#xff1a;只做列置…

视语坤川大模型智能体平台亮相2024世界人工智能大会

7月4日-7月7日&#xff0c;以“以共商促共享以善治促善智”为主题的2024世界人工智能大会&#xff08;WAIC 2024&#xff09;在上海举办&#xff0c;世界顶级专家学者、知名企业代表、政界人士、高校组织等齐聚上海&#xff0c;共商发展、共话未来。 作为大会的重磅环节——昇…

Python面试题:编写一个 Python 脚本来读取 Excel 文件

要在 Python 中读取 Excel 文件&#xff0c;可以使用 pandas 库&#xff0c;这个库提供了强大的数据处理和分析功能&#xff0c;并且支持读取 Excel 文件。你还需要 openpyxl 库来支持读取 .xlsx 格式的 Excel 文件。以下是如何编写一个脚本来读取 Excel 文件的示例&#xff1a…

git 的cherry-pick选择性提交

git cherry-pick 是 Git 中的一个非常有用的命令&#xff0c;它允许你将一个或多个特定的提交&#xff08;commit&#xff09;从一个分支应用到另一个分支上&#xff0c;而不是合并整个分支。 单个提交的 cherry-pick 假设你有一个 feature 分支&#xff0c;其中有一个提交&a…

【笔记】Android V 应用SDK升级适配和问题

说明 随着Google释放的Android版本,系统升级SDK到35,应用也需要升级上去,不然会报错。 Android Studio Jellyfish | 2023.3.1 | Android Developers Android Studio 预览版中的新功能 | Android Developers 当前版本的Android Studio

Elasticsearch:深度学习与机器学习:了解差异

作者&#xff1a;来自 Elastic Elastic Platform Team 近年来&#xff0c;两项突破性技术一直站在创新的最前沿 —— 机器学习 (machine learning - ML) 和深度学习 (deep learning - DL)。人工智能 (AI) 的这些子集远不止是流行语。它们是推动医疗保健、金融等各行业进步的关键…

Java面试八股之MySQL索引B+树、全文索引、哈希索引

MySQL索引B树、全文索引、哈希索引 注意&#xff1a;B树中B不是代表二叉树&#xff08;binary&#xff09;&#xff0c;而是代表平衡&#xff08;balance&#xff09;&#xff0c;因为B树是从最早的平衡二叉树演化而来&#xff0c;但是B树不是一个二叉树。 B树的高度一般在2~…

es是如何处理索引数据的变动的?

1 概述 es是如何处理索引数据的变动的&#xff1f; 或者说索引数据变动时&#xff0c;es会执行哪些操作&#xff1f; refresh、fsync、merge 和 flush 操作有何作用&#xff1f; es是如何确保即使es发生宕机数据也不丢失的&#xff1f; 在回答上述问题前&#xff0c;可以先…

文件操作和IO流

前言&#x1f440;~ 上一章我们介绍了多线程进阶的相关内容&#xff0c;今天来介绍使用java代码对文件的一些操作 文件&#xff08;file&#xff09; 文件路径&#xff08;Path&#xff09; 文件类型 文件操作 文件系统操作&#xff08;File类&#xff09; 文件内容的读…

leetcode--恢复二叉搜索树

leetcode地址&#xff1a;恢复二叉搜索树 给你二叉搜索树的根节点 root &#xff0c;该树中的 恰好 两个节点的值被错误地交换。请在不改变其结构的情况下&#xff0c;恢复这棵树 。 示例 1&#xff1a; 输入&#xff1a;root [1,3,null,null,2] 输出&#xff1a;[3,1,null…

AirPods Pro新功能前瞻:iOS 18的五大创新亮点

随着科技的不断进步&#xff0c;苹果公司一直在探索如何通过创新提升用户体验。iOS 18的推出&#xff0c;不仅仅是iPhone的一次系统更新&#xff0c;更是苹果生态链中重要一环——AirPods Pro的一次重大升级。 据悉&#xff0c;iOS 18将为AirPods Pro带来五项新功能&#xff0…

设计模式探索:观察者模式

1. 观察者模式 1.1 什么是观察者模式 观察者模式用于建立一种对象与对象之间的依赖关系&#xff0c;当一个对象发生改变时将自动通知其他对象&#xff0c;其他对象会相应地作出反应。 在观察者模式中有如下角色&#xff1a; Subject&#xff08;抽象主题/被观察者&#xf…

【大模型】大规模部署LLM:挑战与对策

大规模部署LLM&#xff1a;挑战与对策 引言一、计算资源的挑战1.1 计算成本1.2 能源消耗与碳足迹 二、维护与更新的挑战2.1 模型更新与版本控制2.2 知识时效性 三、数据隐私与伦理考量3.1 数据隐私保护3.2 伦理与偏见 四、可扩展性与灵活性4.1 系统架构设计4.2 多语言与地域适应…

详细分析@FunctionalInterface的基本知识(附Demo)

目录 前言1. 基本知识2. Demo 前言 Java的基本知识推荐阅读&#xff1a; java框架 零基础从入门到精通的学习路线 附开源项目面经等&#xff08;超全&#xff09;Spring框架从入门到学精&#xff08;全&#xff09; 1. 基本知识 FunctionalInterface 是 Java 8 引入的一个注…