Eureka服务注册与发现中心

简介

Spring Cloud封装了Netflix 公司开发的Eureka模块来实现服务治理

在传统的RPC远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,管理比较复杂,所以需要使用服务治理,管理服务于服务之间依赖关系,可以实现服务调用、负载均衡、容错等,实现服务发现与注册。

Eureka包含两个组件:Eureka Server和Eureka Client

Eureka Server提供服务注册服务

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

EurekaClient通过注册中心进行访问

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

Eureka Server :服务注册发现中心

pom文件:

<dependencies><!--eureka-server--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency><!--boot web actuator--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!--一般通用配置--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId></dependency></dependencies>

application.yml:

server:port: 7001eureka:instance:hostname: locathost #eureka服务端的实例名称client:#false表示不向注册中心注册自己。register-with-eureka: false#false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务fetch-registry: falseservice-url:#设置与Eureka server交互的地址查询服务和注册服务都需要依赖这个地址。defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

启动类:需要在上面加入@EnableEurekaServer

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

完成后启动浏览器访问 localhost:7001,如果访问到如下界面则启动成功。
在这里插入图片描述

Eureka Client:服务提供者、服务消费者

pom文件加入:

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

application.yml文件中加入:

eureka:client:#表示是否将自己注册进Eurekaserver默认为true。register-with-eureka: true#是否从EurekaServer抓取已有的注册信息,默认为true。单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡fetchRegistry: trueservice-url:defaultZone: http://localhost:7001/eureka

在启动类上加入@EnableEurekaClient注解

Eureka集群部署

多Eureka Server

创建两个不同的Eureka Server:7001、7002

7001在application中配置:
url :7001指向7002,7002指向7001.

server:port: 7001eureka:instance:hostname: eureka7001 #eureka服务端的实例名称client:#false表示不向注册中心注册自己。register-with-eureka: false#false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务fetch-registry: falseservice-url:#设置与Eureka server交互的地址查询服务和注册服务都需要依赖这个地址。defaultZone: http://localhost:7002/eureka/

7002配置同理。
将消费者、服务者的application.yml中的url改为两个Eureka Server的地址:

      service-url:defaultZone: http://localhost:7001/eureka,http://localhost:7002/eureka

多服务提供者(provider)

创建新的provider程序,修改application中的端口号为不同的端口,服务名相同。
在Eureka管理界面上可以看到存在两个服务提供者。
在这里插入图片描述
接着更改服务消费者的代码,通过服务名作为网址来调用服务。
修改url:

public static final String PAYMENT_URL="http://CLOUD-PAYMENT-SERVICE";//这里之前是localhost!!@GetMapping("/consumer/payment/create")public CommonResult<Payment> create(Payment payment){return restTemplate.postForObject(PAYMENT_URL+"/payment/create",payment, CommonResult.class);}@GetMapping("/consumer/payment/get/{id}")public CommonResult<Payment> getPayment(@PathVariable Long id){return restTemplate.getForObject(PAYMENT_URL+"/payment/get/"+id, CommonResult.class);}

在RestTemplate配置类中声明负载平衡注解:

@Configuration
public class ApplicationContextConfig {@Bean@LoadBalancedRestTemplate getRestTemplate(){return new RestTemplate();}
}

服务发现

在启动类上加入注解@EnableDiscoveryClient,即可通过DiscoveryClient获取位于Eureka注册中心的服务名,以及服务名对应的相关信息如IP端口。

	@Resourceprivate DiscoveryClient discoveryClient;@GetMapping("/payment/discovery")public Object discovery(){//获取所有服务名List<String> services = discoveryClient.getServices();for(String service:services){System.out.println(service);}//获取提供指定服务的所有提供者List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");instances.stream().forEach((instance->{System.out.println(instance.getServiceId()+" "+instance.getHost()+":"+instance.getPort());}));return this.discoveryClient;}

保护模式

在Eureka服务端90s内丢失了大量的心跳包(大量服务失联),会进入保护模式,不再注销服务实例。

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

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

相关文章

自动化测试之等待方式详解

在自动化测试中&#xff0c;等待是一个重要的技术&#xff0c;用于处理页面加载、元素定位、元素状态改变等延迟问题。 等待能够确保在条件满足后再进行后续操作&#xff0c;提高自动化测试的稳定性以及可靠性。 等待方式&#xff1a;显示等待、隐式等待、线程睡眠 1. 显式等…

TCP_可靠数据传输原理

引言 在网络通信中&#xff0c;TCP是确保数据可靠传输的关键协议。但在我们深入研究TCP拥塞控制技术之前&#xff0c;让我们先探索可靠数据传输的原理&#xff0c;特别是TCP头部中一些重要字段的作用。 网络层提供了点对点的通信服务&#xff0c;努力交付数据报&#xff0c;但…

鸿蒙OpenHarmony开发实战-0开始做游戏渲染引擎

首先实现了一个通用的画廊组件来作为练手项目&#xff0c;它主要使用了四个基础组件和容器组件&#xff1a; 我们放置一个按钮来触发 showGallery 方法&#xff0c;该方法控制 panel 弹出式组件的显示和隐藏&#xff0c;这里的 div 和 button 标签就是 hml 内置的组件&#xf…

docker安装postgresql15或者PG15

1. 查询版本 docker search postgresql docker pull postgres:15.3 # 也可以拉取其他版本2.运行容器并挂载数据卷 mkdir -p /data/postgresql docker run --name postgres \--restartalways \-e POSTGRES_PASSWORDpostgresql \-p 5433:5432 \-v /data/postgresql:/var/lib/p…

防火墙未开端口导致zookeeper集群异常,kafka起不来

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 问题描述&#xff1a; 主机信息&#xff1a; IPhostname10.0.0.10host1010.0.0.12host1210.0.0.13host13 在这三台主机上部署…

clickhouseSQL日期相关

1. 毫秒级时间戳转日期/小时 --13位时间戳转具体时间 toDateTime(report_time / 1000) as _c00 -- 获取时间戳对应的时间点整点(结果&#xff1a;%Y-%m-%d %H:00:00.0) eg&#xff1a;2022-09-28 23:00:00.0 toStartOfHour(toDateTime(report_time / 1000)) AS _10-- 获取时间…

认识SpringBoot项目中的Starter

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 循序渐进学SpringBoot ✨特色专栏&…

基于 EigenFaces 的人脸检测

EigenFaces概述 EigenFaces 人脸检测是一种从主成分分析&#xff08;Principal Component Analysis&#xff0c;PCA&#xff09;中导出的人脸识别和描述技术。 特征脸方法就是从大量的人脸图像中&#xff0c;寻找出人脸的共性。将眼睛、面颊、下颌样板采集协方差矩阵的特征向…

从零开始 - 在Python中构建和训练生成对抗网络(GAN)模型

生成对抗网络&#xff08;GANs&#xff09;是一种强大的生成模型&#xff0c;可以合成新的逼真图像。通过完整的实现过程&#xff0c;读者将对GANs在幕后的工作原理有深刻的理解。本教程首先导入必要的库并加载将用于训练GAN的Fashion-MNIST数据集。然后&#xff0c;提供了构建…

一文了解VR全景技术如何运用在景区旅游宣传

引言&#xff1a; 随着科技的飞速发展&#xff0c;虚拟现实全景技术&#xff08;VR全景&#xff09;正在逐步改变我们的生活。这种技术以其独特的优势&#xff0c;逐步渗透到各个领域&#xff0c;尤其在景区宣传方面&#xff0c;VR全景技术拥有很强的应用潜力。 一、了解VR全景…

vr眼镜和AR眼镜的区别有哪些?哪些产品可以支持VR应用?

vr眼镜怎么连接手机 要将VR眼镜连接到手机上&#xff0c;您可以按照以下步骤进行&#xff1a; 1. 确保您的手机支持VR应用程序&#xff1a;首先&#xff0c;确保您的手机具备运行VR应用程序的硬件和软件条件。一些VR应用程序可能对设备有特定的要求&#xff0c;如处理器性能、操…

Linux安装rabbitMq RPM安装 以及带延迟插件

rabbitmq安装 文档中rabbitmq下载链接 以及延迟插件 网盘下载 目前下载文件中版本已经过多个服务器安装测试 完全成功 1.安装执行 rpm -ivh openssl-libs-1.0.2k-19.el7.x86_64.rpm --force --nodeps rpm -ivh libnsl-2.34-28.el9_0.x86_64.rpm --force --nodeps rpm -ivh e…