服务注册中心Eureka

news2024/11/17 11:34:20

服务注册中心Eureka

  • Eureka介绍
  • Eureka 环境搭建
  • Eureka 集群配置
  • Eureka 的自我保护模式
  • Eureka 架构图

Eureka介绍

在微服务架构中,有着许许多多的微服务,微服务之间需要彼此进行远程调用,需要知道彼此的地址,通过人工的方式去管理这些地址是不现实的。于是就有了服务注册中心,每一个微服务都将自己的地址告诉注册中心,在需要进行远程调用的时候,也通过注册中心去找到需要调用的服务地址。
注册中心可以说是服务的通讯录,它记录了服务和服务地址的映射关系。

Eureka是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移。服务注册与发现对于微服务架构来说是非常重要的,有了服务发现与注册,只需要使用服务的标识符,就可以访问到服务,而不需要修改服务调用的配置文件了。

Eureka采用了C-S的设计架构,包含两个组件:Eureka Server 和 Eureka Client。
Eureka Server 作为服务注册功能的服务器,它是服务注册中心。
Eureka Client 是一个Java客户端,用于简化Eureka Server的交互。
各个节点启动后,会在Eureka Server中进行注册,在 Eureka Server中的服务注册表中将会存储所有可用服务节点的信息。服务节点的信息可以在界面中直观的看到。

在微服务的调用关系中,服务分为两个角色,服务的提供者和消费者。
服务提供者:一次业务中,被其它微服务调用的服务。(提供接口给其它微服务)
服务消费者:一次业务中,调用其它微服务的服务。(调用其它微服务提供的接口)
服务提供者和服务消费者的角色是相对的。一个服务可以同时为消费者和提供者。

服务的提供者需要在 Eureka Server 注册。使用 Eureka Client 与 Eureka Server 进行交互。并且定时的发送心跳以确保EurekaServer注册中心指导这个服务是正常的。如果Eureka Server 在多个心跳周期内没有接收到某个节点的心跳,EurekaServer将会从服务注册表中把这个服务节点移除(默认90秒)。

服务的消费者根据服务提供者的服务名去到注册中心去获取服务提供者的ip和端口号,然后进行远程调用。
在这里插入图片描述

Eureka 环境搭建

创建项目,引入 spring-cloud-starter-netflix-eureka-server 依赖。

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

在启动类上添加 @EnableEurekaServer 注解。

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

在配置文件中进行如下配置

server:
  port: 1000
spring:
  application:
    name: eurekaServer # eureka的服务名称
eureka:
  client:
    register-with-eureka: false #是否将自己注册到注册中心去 默认是为true
    fetch-registry: false #是从注册中心获取自己的信息, 默认是true
    service-url:
      defaultZone: http://localhost:1000/eureka/  #定义服务中心的地址

Eureka 注册中心配置就完成了。启动项目,访问服务中心的地址。

在这里插入图片描述
服务提供者需要将自身的信息注入到注册中心。
在pom文件中引入依赖

<!--eureka客户端依赖-->
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

配置文件中进行配置

spring:
  application:
    name: provider
server:
  port: 8888
#eureka 的服务注册中心服务的提供者
eureka:
  instance:
    prefer-ip-address: true # 注册服务的时候使用服务的ip地址
  client:
    service-url:
      defaultZone: http://localhost:1000/eureka/ #将服务注册到服务中心去

启动项目,就会自动将服务提供者的信息注入到 Eureka 注册中心去。
服务的消费者需要从注册中心中定时的拉去注册中心的注册的服务信息。方便进行远程的服务调用。

服务的消费者同样需要配置Eureka的客户端依赖。

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

在配置文件中进行配置。

server:
  port: 8001
spring:
  application:
    name: consumer
eureka:
  client:
    #是否将自己注册到注册中心,默认为 true
    register-with-eureka: false
    #表示 Eureka Client 间隔多久去服务器拉取注册信息,默认为 30 秒
    registry-fetch-interval-seconds: 10
    #设置服务注册中心地址
    service-url:
      defaultZone: http://localhost:1000/eureka/

通过以上的配置,在消费者中,就可以根据服务提供者的服务名,去进行远程调用。

调用示例

@Autowired
private RestTemplate restTemplate;
public Order queryOrderById(Long orderId) {
	// 1.查询订单
    Order order = orderMapper.findById(orderId);
    // 2.利用RestTemplate发起http请求,查询用户
    // 2.1.url路径
    String url = "http://provider/user/" + order.getUserId();
    // 2.2.发送http请求,实现远程调用
    User user = restTemplate.getForObject(url, User.class);
    // 3.封装user到Order
    order.setUser(user);
    // 4.返回
    return order;
}

Eureka 集群配置

所有的服务都要通过服务注册中心来进行信息交换,一旦服务注册中心掉线,会影响到整个系统的稳定性。所以在生产环境中,Eureka 一般都以集群的形式出现的。
Eureka集群,实际上就是启动多个Eureka实例, 多个Eureka实例之间互相注册,互相同步数据,共同组成一个Eureka集群。
在 Eureka Server 集群中,Eureka Server 之间进行数据同步,不同的 EurekaServer 之间不区分主从节点,所有节点都是平等的。

在项目中配置两个服务注册中心,两个注册中心互相注册。然后将服务提供者,注册到两个注册中心,再将服务消费者设置从两个注册中心拉去服务信息,完成集群的搭建。

搭建Eureka集群,如果 eureka.client.service-url.defaultZone = http://192.168.0.81:8761/eureka/ 属性中要使用别名而不是IP地址时,需要修改服务器的hosts文件(C:\Windows\System32\drivers\etc\hosts)

127.0.0.1 eureka-server1.com
127.0.0.1 eureka-server2.com

注册中心1 配置文件
需要向注册中心2中进行注册。

server:
  port: 1001
spring:
  application:
    #该名称在集群模式下应该保持一致
    name: eureka-server
eureka:
  instance:
    #服务注册中心实例的主机名
    hostname: eureka-server1.com
    #是否使用 ip 地址注册
    prefer-ip-address: true
    #该实例注册到服务中心的唯一ID
    instance-id: ${spring.cloud.client.ip-address}:${server.port}
  client:
    #设置服务注册中心地址,指向另一个注册中心(除自己之外所有,多个使用逗号隔开)
    service-url:
      defaultZone: http://localhost:1002/eureka/

注册中心2 配置文件
需要向注册中心1中进行注册

server:
  port: 1002
spring:
  application:
    #该名称在集群模式下应该保持一致
    name: eureka-server
eureka:
  instance:
    #服务注册中心实例的主机名
    hostname: eureka-server2.com
    #是否使用 ip 地址注册
    prefer-ip-address: true
    #该实例注册到服务中心的唯一ID
    instance-id: ${spring.cloud.client.ip-address}:${server.port}
  client:
    #设置服务注册中心地址,指向另一个注册中心(除自己之外所有,多个使用逗号隔开)
    service-url:
      defaultZone: http://localhost:1001/eureka/

修改服务的提供者和服务的消费者,配置多个注册中心。
服务提供者配置文件

spring:
  application:
    name: provider
server:
  port: 8888
#eureka 的服务注册中心服务的提供者
eureka:
  instance:
    prefer-ip-address: true # 注册服务的时候使用服务的ip地址
  client:
    service-url:
      #将服务注册到服务中心去
      defaultZone: http://eureka-server1.com:1001/eureka/,http://eureka-server2.com:1002/eureka/ 

服务消费者配置文件

server:
  port: 8001
spring:
  application:
    name: consumer
eureka:
  client:
    #是否将自己注册到注册中心,默认为 true
    register-with-eureka: false
    #表示 Eureka Client 间隔多久去服务器拉取注册信息,默认为 30 秒
    registry-fetch-interval-seconds: 10
    #设置服务注册中心地址
    service-url:
      defaultZone: http://eureka-server1.com:1001/eureka/,http://eureka-server2.com:1002/eureka/ 

Eureka 的自我保护模式

默认情况下,如果 Eureka Server 在一定时间内没有接收到某个微服务实例的心跳,Eureka Server将 会注销该实例(默认90秒)。
但是当网络分区故障发生时,微服务与Eureka Server之间无法正常通信,就可能把健康状态的微服务错误注销。Eureka 的自我保护模式就是为了避免这种情况的。

Eureka Server 在运行期间会去统计心跳失败比例在 15 分钟之内是否低于 85%,如果低于 85%(短时间丢失过多的客户端,则可能出现网络故障,进入自我保护模式),Eureka Server 会将这些实例保护起来,让这些实例不会过期,同时提示一个警告,这种算法叫做 Eureka Server 的自我保护模式,这种自我保护模式默认开启。

自我保护模式关闭

eureka:
  server:
    #true:开启自我保护模式,false:关闭自我保护模式,默认开启
    enable-self-preservation: false

当人为的关闭一个服务时,并且不想触发 Eureka 自我保护机制,想要注册中心剔除这个下线的服务。这种关闭方式叫做优雅停服
优雅停服需要在想要关闭的服务提供中进行配置。

配置依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

修改配置文件

#度量指标监控与健康检查
management:
  endpoints:
    web:
      exposure:
        #开启 shutdown 端点访问
        include: shutdown
  endpoint:
    #开启 shutdown 实现优雅停服
    shutdown:
      enabled: true

访问 http://服务地址:服务端口/actuator/shutdown 即可实现优雅停服。

Eureka 架构图

请添加图片描述

  • Register(服务注册):把自己的 IP 和端口注册给 Eureka。
  • Renew(服务续约):发送心跳包,每 30 秒发送一次,告诉 Eureka 自己还活着。如果 90 秒还未发送心跳,宕机。
  • Cancel(服务下线):当 Provider 关闭时会向 Eureka 发送消息,把自己从服务列表中删除,防止 Consumer 调用到不存在的服务。
  • Get Registry(获取服务注册列表):获取其他服务列表。
  • Replicate(集群中数据同步):Eureka 集群中的数据复制与同步。
  • Make Remote Call(远程调用):完成服务的远程调用。

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

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

相关文章

C++算法:加权连通图的最小生成树(Prim)

文章目录 前言一、Prim算法原理二、算法实现1、生成图2、Prim 总结原创文章&#xff0c;未经许可&#xff0c;严禁转载 前言 在前文加权连通图的最小生成树(Kruskal)中已经用以边找点的方式实现最小生成树的生成。Prim算法也是一种常用的最小生成树算法&#xff0c;和Kruskal不…

python 妙笔生花

1.学习编程好处 最主要的好处就是,思考问题的方式变得更加具有逻辑性。 日常我们敲代码时,需要思考每一行的代码执行效果,它就需要认真设计每行代码可用性。如果在设计上发生错误,在代码执行时就会报错。还能做到 触类旁通。 古语有云: 有道无术,术可求,有术无道,止于术…

armbian可视化查看系统的使用情况

文章目录 armbian查看系统的使用情况在终端可视化查看方式htop简介htop安装和使用的步骤 在浏览器可视化查看方式 armbian查看系统的使用情况 在终端可视化查看方式 htop简介 htop’是一款任务管理器和系统监视工具&#xff0c;可在Armbian Linux中使用。它提供了比默认任务…

Python使用多线程操作tif影像和HBase数据库

本文介绍使用Python的多线程技术&#xff0c;提高happybase模块和gdal模块的效率&#xff0c;从tif格式的影像文件中读取数据&#xff0c;并将其存储到HBase数据库中。主要步骤包括&#xff1a; 准备工作&#xff1a;安装Python环境&#xff0c;安装happybase模块和gdal模块&a…

windows安装jdk1.8

1.下载jdk8 https://www.oracle.com/java/technologies/downloads/#java8-windows 百度网盘&#xff1a; 链接: https://pan.baidu.com/s/1qtVZ3Rsa1_n9XsFcXj07rA 提取码: yhwc 2.双击以后进行JDK的安装 操作前先在D盘保存java文件夹&#xff0c;里面新建jdk1.8.0_241文件…

AntDB 替换某省电信大数据平台的案例分享

亚信自研分布式数据库AntDB落地某省电信的案例分享 整体介绍 某省电信大数据分析平台&#xff0c;需要对BSS的三户、订单、实例等近10TB级的数据进行快速分析统计&#xff0c;每次分析的数据量最高达到5亿级别&#xff0c;同时需要向其它厂商开放这种实时的数据分析能力&…

Java-API简析_java.util.Currency类(基于 Latest JDK)(浅析源码)

【版权声明】未经博主同意&#xff0c;谢绝转载&#xff01;&#xff08;请尊重原创&#xff0c;博主保留追究权&#xff09; https://blog.csdn.net/m0_69908381/article/details/131255544 出自【进步*于辰的博客】 其实我的【Java-API】专栏内的博文对大家来说意义是不大的。…

对象实例化空指针处理

1 问题 如何解决对象实例化空指针异常&#xff1f; 2 方法 首先创建一个package包&#xff0c;将其Menu类及相关代码放入其中&#xff0c;并在该package包下创建另一个类MenuItem&#xff0c;然后通过构造函数&#xff0c;写入需要运行的对象信息&#xff0c;最后在Menu类中用n…

leetcode 151. 反转字符串中的单词

2023.6.14 这道题全面考察了字符串的一些操作&#xff0c;这里我的思路是&#xff1a; 先对字符串进行空格去除操作&#xff0c;这里要注意一个细节&#xff1a;先用for循环去除连续空格&#xff0c;再用if判断开头和结尾的空格。再对没有异常空格的s 做一个反转操作。再对每一…

计算机网络基础知识(九)—— 什么是TelnetS?Telnet Over TLS

文章目录 01 | TelnetS02 | OpenSSL03 | 实现思路服务器处理流程客户端处理流程 04 | 代码实现服务端代码客户端代码编译过程 & 执行结果 前面学习了什么是HTTPS协议&#xff0c;了解了HTTPS的工作原理以及具体的工作流程&#xff0c;了解了HTTP协议和HTTPS协议之间的区别。…

SSM框架搭建

SSM环境搭建 1 IDE的话&#xff0c;我用的MyEcplise&#xff0c;如果用Ecplise的话&#xff0c;需要自行配置服务器。 首先&#xff0c;建一个Dynamic工程&#xff0c;需要注意的是一定要勾选上web.xml。 将Spring框架包、jstl包、standard包、common-logging包、aopallian…

系列十三、MongoDB聚合查询

一、概述 MongoDB聚合框架&#xff08;Aggregation Framework&#xff09;是一个计算框架&#xff0c;它可以&#xff1a; ①&#xff1a;作用在一个或者几个集合上; ②&#xff1a;对集合中的数据进行一系列的运算; ③&#xff1a;将这些数据转化为期望的形式; 从效果而言…

AIGC技术研究与应用 ---- 下一代人工智能:新范式!新生产力!(5 - AIGC 未来展望)

文章大纲 不可避免的职业替代AI 对人类思维的影响AIGC 的风险人工智能对齐 -- 价值学习 鲁棒适应参考文献与学习路径GPT 系列模型解析前序文章模型进化券商研报陆奇演讲多模态据预测,未来五年10%-30%的图片内容由AI参与生成,考虑到下一代互联网对内容需求的迅速提升,2030年A…

计算机网络管理 实验4(一) SNMP报文分析之验证SNMP协议的工作过程以及分析SNMP数据单元的格式

⬜⬜⬜ &#x1f430;&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea;(*^▽^*)欢迎光临 &#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea;&#x1f430;⬜⬜⬜ ✏️write in front✏️ &#x1f4dd;个人主页&#xff1a;陈丹宇jmu &am…

FPGA基础知识-门级建模

目录 学习目标 学习内容 1.门的类型 2.门延迟 学习时间 学习小结 学习目标 学习Verilog 提供的门级原语 理解门的实例引用、门的符号以及andor&#xff0c;bufnot类型的门的真值表 学习如何根据电路的逻辑图来生成verilog描述 讲述门级设计中的上升、下降和关断延迟 …

【论文解读系列】Blip-2:引导语言图像预训练具有冻结图像编码器和大型语言模型

Blip-2 BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models BLIP-2&#xff1a;引导语言图像预训练具有冻结图像编码器和大型语言模型 (0) 总结&实测 总结&#xff1a;blip-2 最大的贡献在于&#xff0c;提出了…

跨境电商社交媒体:选择合适的平台

正如您在使用社交媒体的九种方法中了解到的那样&#xff0c;跨境电商优先考虑社交媒体营销可能会更有利可图。有数十个平台可供选择&#xff0c;每个平台都迎合了具有不同兴趣、特征和位置的独特受众。 那么您应该关注哪个社交媒体平台以及如何以最大效率工作&#xff1f; 目…

【Vue全家桶高仿小米商城】——(三)VueCli4.0安装和使用

文章目录 第三章&#xff1a;VueCli4.0安装和使用一、VueCli4.0安装&#xff1a;二、创建Vue项目方式一 使用脚本搭建方式二 使用UI界面搭建 三、安装依赖方式一 Vue脚手架图形界面安装方式二、命令行安装 四、Vue DevTools安装使用两种安装方式&#xff1a; 第三章&#xff1a…

Linux权限解析

一、Linux用户分类 Linux下有两种用户&#xff1a;超级用户&#xff08;root&#xff09;、普通用户 超级用户&#xff1a;可以再linux系统下做任何事情&#xff0c;不受限制 普通用户&#xff1a;在linux下做有限的事情。 超级用户的命令提示符是“#”&#xff0c;普通用户的…

6.6面向对象继承

2. 面向对象特征二&#xff1a;继承(Inheritance) 2.1 继承的概述 说到继承我们会想到什么 在Java面向对象程序设计中的继承&#xff0c;多个类中存在相同属性和行为时&#xff0c;将这些相同的内容抽取到单独一个类&#xff08;父类&#xff09;中&#xff0c;然后所有的类继…