文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

【SpringCloud】深入探究Eureka:构建微服务架构中的高效服务发现系统

2023-09-07 07:45

关注

在这里插入图片描述

👨‍💻博主主页:小尘要自信
在现代的软件开发中,微服务架构已经成为了一个热门的话题。微服务架构的一个关键组成部分就是服务发现。而在服务发现领域,Eureka无疑是一个备受推崇的解决方案。本篇博客将为您介绍什么是Eureka以及如何在您的微服务架构中应用它。

学习Eureka

Eureka是Netflix开源的一款用于构建弹性、高可用的服务发现系统的工具。在微服务架构中,服务数量庞大,每个服务可能会有多个实例。这时,需要一种机制来让服务能够自动地找到其他服务,以便进行通信。这就是服务发现的任务,而Eureka便是为此而生。
Eureka由两个主要组件组成:Eureka服务器和Eureka客户端。Eureka服务器负责维护所有服务的注册信息,而Eureka客户端则负责向Eureka服务器注册自己,并从服务器获取其他服务的信息,以便进行通信。

服务治理:springcloud封装了Netfix公司开发的Eureka模块来实现服务治理,在传统的pc远程调用框架中,管理每个服务与服务之间的依赖关系比较复杂,所以需要使用服务治理,管理服务之间的依赖关系,可以实现服务调用;负载均衡;容错;实现服务发现与注册。

服务注册与发现

Eureka采用了cs的架构设计,Eureka server作为服务注册功能的服务器,他是服务注册中心,而系统中的其他服务,使用Eureka的客户端连接到Eureka server 并维持心跳连接,这样系统的维护人员就可以通过Eureka server 来监控系统中各个微服务是否正常运行;

在微服务的注册与发现中,有一个注册中心,当服务启动的时候,会把当前自己服务的信息,比如服务地址,通信地址等以别名的方式注册到注册中心上,另一方(消费者服务提供者)以该别名的方式去注册中心上获取到实际的通信地址等信息,然后再实现本地rpc调用rpc远程调用框架核心设计思想,在注册中心,因为使用注册中心管理各个服务与服务之间的一个依赖关系(服务治理概念),在任何rpc框架中都会有一个注册中心(存放服务地址相关信息(接口地址))

  • 简单理解就是外卖平台中的商家与客户在美团上注册了相应的账号 -

两个组件:

Eureka server提供注册:各个微服务节点通过配置启动后,会在Eureka server中进行注册,这样Eureka server 中的服务注册表中将会存储所有可能服务节点的信息,服务节点的信息可以在界面中看到。

Eureka Client通过注册中心进行访问

是一个Java客户端,用于简化Eureka server的交互,客户端同时也是具备一个内置的,使用轮训负载算法的负载均衡器。在应用启动后,将会向Eureka server发送心跳(默认30s)如果Eureka server 在多个心跳周期没有接受到某个节点的心跳。Eureka server会将其从服务注册表中将这个服务节点移除掉(默认90s)

img

单机Eureka构建步骤:

IDEA生成eurekaServer端服务注册中心类似美团平台

    org.springframework.cloud    spring-cloud-starter-netflix-eureka-server
server:  port: 7001eureka:  instance:    hostname: localhost #eureka服务端的实例名称  client:    #false表示不向注册中心注册自己。    register-with-eureka: false    #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务    fetch-registry: false    service-url:    #设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址。      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
@SpringBootApplication@EnableEurekaServerpublic class EurekaMain7001 {    public static void main(String[] args) {        SpringApplication.run(EurekaMain7001.class, args);    }}
http://localhost:7001/
dependency>    org.springframework.cloud    spring-cloud-starter-netflix-eureka-client
server:  port: 80spring:  application:    name: cloud-order-serviceeureka:  client:    #表示是否将自己注册进EurekaServer默认为true。    register-with-eureka: true    #是否从EurekaServer抓取已有的注册信息,默认为true。单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡    fetchRegistry: true    service-url:      defaultZone: http://localhost:7001/eureka
@SpringBootApplication@EnableEurekaClientpublic class MainApp80 {    public static void main(String[] args) {        SpringApplication.run(MainApp80.class, args);    }}

image-20220123122714466

集群Eureka构建步骤:

在这里插入图片描述

建module
参考cloud-eureka-server7001,新建cloud-eureka-server7002
2.改pom
3.改yml
为了区分Eureka,需要改配置文件
找到C:\Windows\System32\drivers\etc路径下的hosts文件,修改映射配置添加进hosts文件

server:  port: 7001eureka:  instance:    hostname: eureka7001.com  #eureka服务端的实例名称  client:    register-with-eureka: false #false表示不向注册中心注册自己。    fetch-registry: false #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务    service-url:      defaultZone: http://eureka7002.com:7002/eureka/

7002中也将7001注册进去

主启动

package com.atguigu.springcloud;@SpringBootApplication@EnableEurekaServerpublic class EurekaMain7002 {    public static void main(String[] args) {        SpringApplication.run(EurekaMain7002.class, args);    }}

服务如集群

# 集群版defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka  

负载均衡
建立两个服务提供者,都注册进Eureka
在每个对应的controller中加入属性:

@Value("${server.port}")private String serverPort;
///不要把地址写死//public static final String PaymentSrv_URL = "http://localhost:8001";// 通过在eureka上注册过的微服务名称调用public static final String PAYMENT_SRV = "http://CLOUD-PAYMENT-SERVICE";

配置一下负载均衡
使用 @LoadBalanced 注解赋予 RestTemplate 负载均衡的能力

package com.atguigu.springcloud.config;@Configurationpublic class ApplicationContextConfig {    @Bean    @LoadBalanced //使用@LoadBalanced注解赋予RestTemplate负载均衡的能力    public RestTemplate restTemplate() {        return new RestTemplate();    }}

actuator微服务信息完善:
主机名称:服务名称修改:

instance:  instance-id: payment8001

访问信息有IP信息提示:

prefer-ip-address: true     #访问路径可以显示IP地址

服务发现Discovery:
对外暴露注册成功的微服务信息
修改Controller:
加上

@Resourceprivate DiscoveryClient discoveryClient;@GetMapping(value = "/discovery")public Object discovery() {    List services = discoveryClient.getServices();    for (String service : services) {        log.info("service:{}", service);    }    List instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");    for (ServiceInstance instance : instances) {        log.info(instance.getServiceId() + "\t" + instance.getHost() + "\t" + instance.getPort() + "\t"                 + instance.getUri());    }    return this.discoveryClient;}@SpringBootApplication@EnableEurekaClient@EnableDiscoveryClient //服务发现public class PaymentMain8001 {    public static void main(String[] args) {        SpringApplication.run(PaymentMain8001.class,args);    }}

通过Eureka,我们可以轻松地构建起一个弹性、高可用的服务发现系统,为微服务架构提供更好的通信机制。本文介绍了Eureka的基本概念以及如何通过示例代码来实现Eureka服务器和客户端。当然,Eureka还有更多高级特性和配置项可以探索,希望本文能够为您提供一个良好的起点。如果您正在考虑构建微服务架构,不妨考虑使用Eureka来实现服务发现的需求。

来源地址:https://blog.csdn.net/qq_54796785/article/details/132136143

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯