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

这篇具有很好参考价值的文章主要介绍了【SpringCloud】深入探究Eureka:构建微服务架构中的高效服务发现系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【SpringCloud】深入探究Eureka:构建微服务架构中的高效服务发现系统,spring cloud,eureka,微服务,java,后端

👨‍💻博主主页:小尘要自信
在现代的软件开发中,微服务架构已经成为了一个热门的话题。微服务架构的一个关键组成部分就是服务发现。而在服务发现领域,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)

【SpringCloud】深入探究Eureka:构建微服务架构中的高效服务发现系统,spring cloud,eureka,微服务,java,后端

Eureka实战:

单机Eureka构建步骤:

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

  • 1.建module
    cloud-eureka-server7001
  • 改pom:引入Eureka的相关依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

  • 3.写yml
server:
  port: 7001

eureka:
  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
@EnableEurekaServer
public class EurekaMain7001 {
    public static void main(String[] args) {
        SpringApplication.run(EurekaMain7001.class, args);
    }
}
  • 4.测试
http://localhost:7001/
  • 5.将服务注册进Eureka成为提供者
dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
  • 6.改yml
server:
  port: 80

spring:
  application:
    name: cloud-order-service

eureka:
  client:
    #表示是否将自己注册进EurekaServer默认为true。
    register-with-eureka: true
    #是否从EurekaServer抓取已有的注册信息,默认为true。单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡
    fetchRegistry: true
    service-url:
      defaultZone: http://localhost:7001/eureka
  • 7.主启动
@SpringBootApplication
@EnableEurekaClient
public class MainApp80 {
    public static void main(String[] args) {
        SpringApplication.run(MainApp80.class, args);
    }
}
  • 8.注意事项:

【SpringCloud】深入探究Eureka:构建微服务架构中的高效服务发现系统,spring cloud,eureka,微服务,java,后端

集群Eureka构建步骤:

【SpringCloud】深入探究Eureka:构建微服务架构中的高效服务发现系统,spring cloud,eureka,微服务,java,后端

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

  • 127.0.0.1 eureka7001.com
  • 127.0.0.1 eureka7002.com
server:
  port: 7001

eureka:
  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注册进去

4.主启动

package com.atguigu.springcloud;

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

5.服务如集群

# 集群版
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";

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

package com.atguigu.springcloud.config;

@Configuration
public 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:
加上

@Resource
private DiscoveryClient discoveryClient;

@GetMapping(value = "/discovery")
public Object discovery() {
    List<String> services = discoveryClient.getServices();
    for (String service : services) {
        log.info("service:{}", service);
    }
    List<ServiceInstance> 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://www.toymoban.com/news/detail-630205.html

到了这里,关于【SpringCloud】深入探究Eureka:构建微服务架构中的高效服务发现系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringCloud Alibaba 深入源码 - Nacos 和 Eureka 的区别(健康检测、服务的拉取和订阅)

    目录 一、Nacos 和 Eureka 的区别 1.1、以 Nacos 注册流程来解析区别 a)首先,我们的服务启动时。都会把自己的信息提交给注册中心,然后注册中心就会把信息保存下来. 注册的信息实际上就是一个嵌套 Map,结构为 MapString, MapString, Service,第一层 key 就是 namespace_id,起到环境隔

    2024年01月22日
    浏览(36)
  • 【SpringCloud】通过Redis手动更新Ribbon缓存来解决Eureka微服务架构中服务下线感知的问题

    在上文的基础上,通过压测的结果可以看出,使用DiscoveryManager下线服务之后进行压测是不会出现异常情况的,但唯一缺点就是下线服务的方式是取消注册与续约,之后并没有结束进程。也就 使得在调用api下线后的服务其实是还存在处理请求的能力的 。加之eureka三种级别的缓

    2024年02月05日
    浏览(33)
  • springcloud微服务架构(eureka、nacos、ribbon、feign、gateway等组件的详细介绍和使用)

    目录 一、微服务演变 1、单体架构(Monolithic Architecture) 2、分布式架构  3、微服务 4、 总结 5、微服务架构 5.1、 微服务技术对比 5.2、企业需求 二、spring cloud  springCloud与SpringBoot的版本兼容关系 1、服务拆分及远程调用 1.1、服务拆分 1.1.1、服务拆分注意事项 1.1.2、项目实战

    2024年02月08日
    浏览(32)
  • 微服务springcloud 02 创建项目中的三个service子系统,springcloud中注册中心Eureka介绍和把三个系统注册到Eureka中

    item service项目 01.使用springboot创建项目 02.选择依懒项 在这里插入代码片 spring web 03.添加sp01-commons依赖 在pom.xml文件中 04.修改application.yml ItemServiceImpl 05.创建接口实现类和controller类 ItemController 注:Spring MVC接受参数的几个注解,controller类中使用的参数注解 注解@GetMapping()=@

    2024年02月09日
    浏览(35)
  • 15年大牛用140多个实战案例深入讲解Java微服务架构实战:SpringBoot +SpringCloud +Docker +RabbitMQ

    第一部分,springboot篇; 第1章SpringBoot编程起步; 1.SpringBoot提倡的是一种简洁的开发模式,可保证用户不被大量的配置文件和依赖关系所困扰。 2.SpringBoot开发需要Maven或 Gradle构建工具支持。 3.SpringBoot使用一系列的注解来简化开发过程。 第2章SpringBoot程序开发; 1. SpringBoot的依赖

    2024年04月09日
    浏览(39)
  • 【SpringCloud】Eureka原理分析、搭建Eureka服务、服务注册、服务发现

    🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaEE 操作系统 Redis 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 当有两个服务,第一个服务需要远程调用第二个服务,采用的方式是发起一次HTTP请求,在之前的代码中是将服务提供者的ip和端口号硬编码到

    2024年02月07日
    浏览(34)
  • 关于SpringCloud的中的Eureka使用方法

    首先创建一个空项目: 创建父工程 shop_parent 在 IDEA 中创建父工程 shop_parent 并引入坐标  : 继续创建微服务模块也就是子模块: product_service 、order_service 搭建maven项目: 要注意一定要指向父模块:没有的需要自己配置  实现代码中的实体类: 编写dao:采用的是SpringBoot和My

    2024年02月02日
    浏览(26)
  • 【SpringCloud微服务--Eureka服务注册中心】

    gitee仓库 内容:SpringCloud + SpringCloud alibaba 技术栈:Java8+maven+git,github+Nginx+RabbitMQ+SpringBoot2.0 微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的 进程 中,服务与服务间采用

    2024年02月09日
    浏览(25)
  • SpringCloud:Eureka服务注册中心

    Eureka是一个服务治理组件,它主要包括服务注册和服务发现,主要用来搭建服务注册中心。 在搭建微服务项目时遇到的三个问题: 服务消费者该如何获取服务提供者的地址信息? 如果有多个服务提供者,消费者该如何选择? 消费者如何得知服务提供者的健康状态? Eureka的作

    2024年01月20日
    浏览(24)
  • SpringCloud之Eureka 服务注册中心

    5 Eureka 服务注册中心 5.1什么是 Eureka Netflix在涉及Eureka时,遵循的就是API原则. Eureka是Netflix的有个子模块,也是核心模块之一。Eureka是基于REST的服务,用于定位服务,以实现云端中间件层服务发现和故障转移,服务注册与发现对于微服务来说是非常重要的,有了服务注册与发

    2024年02月04日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包