Eureka 服务注册与发现

2024-06-23 21:28
文章标签 发现 eureka 服务注册

本文主要是介绍Eureka 服务注册与发现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

前言

注册中心

CAP 理论

常⻅的注册中心

CAP理论对比

Eureka

搭建 Eureka Server

引⼊ eureka-server 依赖

完善启动类

编写配置⽂件

启动服务

服务注册

引⼊ eureka-client 依赖

完善配置⽂件

启动服务

服务发现

引⼊依赖

完善配置⽂件

远程调⽤

启动服务


前言

        在微服务开发中,一个服务通常由一个微服务集群提供,在代码中两个服务之间的服务器是不可能绑定死的,是 n 对 n 的关系,所以对微服务进行管理是很有必要的。

        比如当订单服务需要用到商品信息时就需要发送请求给商品服务,我们要如何找到商品服务呢?可以通过 Eureka 来找到该服务。

        在微服务开发中:

        服务启动/变更时,向注册中⼼报道,注册中⼼记录应⽤和 IP 的关系.

        调⽤⽅调⽤时,先去注册中⼼获取服务⽅的 IP ,再去服务⽅进⾏调⽤.

注册中心

        在最初的架构体系中,集群的概念还不那么流⾏,且机器数量也⽐较少,此时直接使⽤DNS + Nginx 就可以满⾜⼏乎所有服务的发现.相关的注册信息直接配置在 Nginx.但是随着微服务的流⾏与流量的激增,机器规模逐渐变⼤,并且机器会有频繁的上下线⾏为,这种时候需要运维⼿动地去维护这个配置信息是 ⼀个很⿇烦的操作.

        所以开发者们开始希望有这么⼀个东西,它能维护⼀个服务列表,哪个机器上线了,哪个机器宕机了,这些信息都会⾃动更新到服务列表上,客户端拿到这个列表,直接找到服务进⾏服务调⽤即可.这个就是注册中⼼.

        注册中⼼主要有三种⻆⾊:

服务提供者(Server):⼀次业务中,被其它微服务调⽤的服务.也就是提供接给其它微服务. 

服务消费者(Client):⼀次业务中,调⽤其它微服务的服务.也就是调⽤其它微服务提供的接⼝.

 • 服务注册中⼼(Registry):⽤于保存 Server 的注册信息,当 Server节点发⽣变更时, Registry 会同步 变更.服务与注册中⼼使⽤⼀定机制通信,如果注册中⼼与某服务⻓时间⽆法通信,就会注销该实例.

        他们之间的关系以及⼯作内容,可以通过两个概念来描述:

        服务注册:服务提供者在启动时,向 Registry 注册⾃⾝服务,并向 Registry定期发送⼼跳汇报存活状态. 

        服务发现:服务消费者从注册中⼼查询服务提供者的地址,并通过该地址调⽤服务提供者的接⼝.服务发现的⼀个重要作⽤就是提供给服务消费者⼀个可⽤的服务列表.

CAP 理论

        谈到注册中⼼,就避不开 CA P理论.CAP 理论是分布式系统设计中最基础,也是最为关键的理论.

• ⼀致性(Consistency) CAP 理论中的⼀致性,指的是强⼀致性.所有节点在同⼀时间具有相同的数据

 • 可⽤性(Availability) 保证每个请求都有响应(响应结果可能不对)

 • 分区容错性(Partition Tolerance) 当出现⽹络分区后,系统仍然能够对外提供服务

        CAP 理论告诉我们:⼀个分布式系统不可能同时满⾜数据⼀致性,服务可⽤性和分区容错性这三个基本需求,最多只能同时满⾜其中的两个.

        在分布式系统中,系统间的⽹络不能100%保证健康,服务⼜必须对外保证服务.因此 Partition Tolerance不可避免.那就只能在C和A中选择⼀个.也就是 CP 或者 AP 架构

正常情况:

⽹络异常:

CP 架构:为了保证分布式系统对外的数据⼀致性,于是选择不返回任何数据

AP 架构:为了保证分布式系统的可⽤性,节点2返回 V0 版本的数据(即使这个数据不正确)

常⻅的注册中心

1. Zookeeper

         Zookeeper的官⽅并没有说它是⼀个注册中⼼,但是国内 Java 体系,⼤部分的集群环境都是依赖 Zookeeper 来完成注册中⼼的功能.

2. Eureka

        Eureka是 Netflix 开发的基于 REST 的服务发现框架,主要⽤于服务注册,管理,负载均衡和服务故障转移.官⽅声明在 Eureka2.0 版本停⽌维护,不建议使⽤.但是 Eureka 是 SpringCloud 服务注册/发现的默认实现(以前),所以⽬前还是有很多公司在使⽤.

3. Nacos

        Nacos 是 Spring Cloud Alibaba 架构中重要的组件,除了服务注册,服务发现功能之外,Nacos还⽀持配置管理,流量管理,DNS,动态 DNS 等多种特性.

CAP理论对比

        在分布式环境中,即使拿到⼀个错误的数据,也胜过⽆法提供实例信息⽽造成请求失败要好(⽐如淘宝 11.11,京东 618 都是谨遵 AP 原则)

Eureka

        Eureka 是 Netflix OSS 套件中关于服务注册和发现的解决⽅案.Spring Cloud 对 Eureka 进⾏了集成,并作为优先推荐⽅案进⾏宣传,虽然⽬前 Eureka 2.0 已经停⽌维护,新的微服务架构设计中,也不再建议使⽤,但是⽬前依然有⼤量公司的微服务系统使⽤ Eureka 作为注册中⼼.

        Eureka 主要分为两个部分:

         • Eureka Server: 作为注册中⼼ Server 端,向微服务应⽤程序提供服务注册,发现,健康检查等能⼒.

        • Eureka Client: 服务提供者,服务启动时,会向 Eureka Server 注册⾃⼰的信息(IP,端⼝,服务信息 等),Eureka Server 会存储这些信息。服务请求者,会去  Eureka Server 拉取服务列表,知道服务位置后,去获取服务

搭建 Eureka Server

引⼊ eureka-server 依赖

    <dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>

完善启动类

//开启 Eureka 注册中心服务
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {public static void main(String[] args) {SpringApplication.run(EurekaServerApplication.class, args);}
}

编写配置⽂件

# Eureka相关配置
# Eureka 服务
server:port: 10010
# Eureka 项目名称
spring:application:name: eureka-server
# Eureka 主机名称
eureka:instance:hostname: localhostclient:fetch-registry: false # 表示是否从Eureka Server获取注册信息,默认为true.因为这是一个单点的Eureka Server,不需要同步其他的Eureka Server节点的数据,这里设置为falseregister-with-eureka: false # 表示是否将自己注册到Eureka Server,默认为true.由于当前应用就是Eureka Server,故而设置为false.service-url:# 设置与Eureka Server的地址,查询服务和注册服务都需要依赖这个地址defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

启动服务

访问注册中⼼:http://127.0.0.1:10010

可以看到 eureka-server 已经启动成功了

服务注册

        接下来我们把 product-service 注册到 eureka-server 中

引⼊ eureka-client 依赖

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

完善配置⽂件

        添加服务名称和 eureka 地址

spring:application:name: product-service
eureka:client:service-url:defaultZone: http://127.0.0.1:10010/eureka/

启动服务

刷新注册中⼼:http://127.0.0.1:10010

可以看到 product-service 已经注册到 eureka 上了

服务发现

引⼊依赖

        服务注册和服务发现都封装在 eureka-client 依赖中,所以服务发现时,也是引⼊ eureka-client 依赖

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

完善配置⽂件

spring:application:name: order-server
eureka:client:service-url:defaultZone: http://127.0.0.1:10010/eureka/

        服务发现也需要知道 eureka 地址,因此配置内容依然与服务注册⼀致,都是配置 eureka 信息

远程调⽤

        远程调⽤时,我们需要从 eureka-server 中获取 product-service 的列表(可能存在多个服务),并选择其中 ⼀个进⾏调⽤

核心代码:

@Service
public class OrderService {@Autowiredprivate OrderMapper orderMapper;@Autowiredprivate RestTemplate restTemplate;//注入 DiscoveryClient 对象,来从注册中心拉取服务列表@Autowiredprivate DiscoveryClient discoveryClient;public OrderInfo selectOrderById(Integer orderId){OrderInfo orderInfo = orderMapper.selectOrderById(orderId);//从 eureka 注册中心获取服务列表List<ServiceInstance> instances = discoveryClient.getInstances("product-service");//由于此时服务中心只有一个 product-service 服务,直接获取即可,获取到了 product-service 服务的 IP 地址和端口号String uri = instances.get(0).getUri().toString();String url=uri+"/product/info/"+orderInfo.getProductId();//String url = "http://127.0.0.1:9090/product/info/"+orderInfo.getProductId();//通过 restTemplate 发送 HTTP 请求到指定的接口,并将响应数据封装成对象ProductInfo productInfo = restTemplate.getForObject(url, ProductInfo.class);orderInfo.setProductInfo(productInfo);return orderInfo;}
}

启动服务

刷新注册中⼼:http://127.0.0.1:10010

        可以看到服务的请求者和提供者都被记录到注册中心

        访问订单服务接口,获取订单信息:

        可以看到订单服务成功通过注册中心获得了订单服务的 IP 地址以及端口号,发送请求给了商品服务获得了商品信息。 

这篇关于Eureka 服务注册与发现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1088316

相关文章

golang实现nacos获取配置和服务注册-支持集群详解

《golang实现nacos获取配置和服务注册-支持集群详解》文章介绍了如何在Go语言中使用Nacos获取配置和服务注册,支持集群初始化,客户端结构体中的IpAddresses可以配置多个地址,新客户... 目录golang nacos获取配置和服务注册-支持集群初始化客户端可选参数配置new一个客户端 支

SpringCloud之consul服务注册与发现、配置管理、配置持久化方式

《SpringCloud之consul服务注册与发现、配置管理、配置持久化方式》:本文主要介绍SpringCloud之consul服务注册与发现、配置管理、配置持久化方式,具有很好的参考价值,希望... 目录前言一、consul是什么?二、安装运行consul三、使用1、服务发现2、配置管理四、数据持久化总

【微服务】Ribbon(负载均衡,服务调用)+ OpenFeign(服务发现,远程调用)【详解】

文章目录 1.Ribbon(负载均衡,服务调用)1.1问题引出1.2 Ribbon负载均衡1.3 RestTemplate整合Ribbon1.4 指定Ribbon负载均衡策略1.4.1 配置文件1.4.2 配置类1.4.3 定义Ribbon客户端配置1.4.4 自定义负载均衡策略 2.OpenFeign面向接口的服务调用(服务发现,远程调用)2.1 OpenFeign的使用2.1 .1创建

升级kali系统 进入后发现一直蓝屏

因为要出去晚饭 结果回来重启发现 一直蓝屏 感觉可能是升级过程中 什么软件的安装或者配置出了问题 就直接长按电源重启进入恢复模式 选择最新版的recovery Mode 然后输入  dpkg --configure -a 之后reboot重启  一切正常!

涉密电脑插U盘会不会被发现?如何禁止涉密电脑插U盘?30秒读懂!

在涉密电脑插U盘的那一瞬间,你是否也好奇会不会被发现?涉密电脑的安全监控可是滴水不漏的!想知道如何彻底禁止涉密电脑插U盘?简单几招搞定,轻松锁死外部设备,信息安全无懈可击! 涉密电脑插U盘会不会被发现? 涉密电脑是否会在插入U盘时被发现,需要根据具体情况来判断。在一些情况下,涉密电脑可能没有安装任何监控软件或安全工具,插入U盘可能不会立即触发警告。然而,随着信息安全管理的不断升级,越来越多

API安全 | 发现API的5个小tips

在安全测试目标时,最有趣的测试部分是它的 API。API 是动态的,它们比应用程序的其他部分更新得更频繁,并且负责许多后端繁重的工作。在现代应用程序中,我们通常会看到 REST API,但也会看到其他形式,例如 GraphQL 甚至 SOAP。 当我们第一次对某个目标进行安全测试时,我们需要做大量研究,以了解其主要功能以及它们在幕后如何工作。建议花一些时间来阅读有关目标及其服务的信息。例如,如果

spring cloud eureka注册中心搭建

1、创建maven项目,在pom.xml 中加入相应jar包 2、在src/main/resources中创建application.properties文件,内容为 spring.application.name=eureka-server   // 注册中心服务名称 server.port=8761 // 注册中心服务端口 # 本身注册中心是一个服务但是不需要注册自己 eureka.c

微服务注册中心都有哪些

在微服务架构中,注册中心扮演着至关重要的角色,用于服务的注册与发现。以下是一些常见的注册中心:   Eureka:   Eureka是Netflix开发的服务发现框架,后来贡献给了Spring Cloud。它主要用于AWS云,但也可以在其他环境中运行。 Eureka包含Eureka Server和Eureka Client两部分。Server提供服务的注册与发现,而Client则负责将服

【系统搭建】Feign + Ribbon + Eureka

感谢阅读,下次再见。ヾ( ̄▽ ̄)ByeBye!

linux 使用ffpmeg 发现转化目标必须是一个路径

一直有个疑惑  就是使用ffpmeg转码时,源文件和目标文件到底可以传URL地址还是必须为路径    下面就将实验 请看如下代码: 当源文件为一个URL地址时 ,目录为地址时  转码不成功 /usr/local/ffmpeg/bin/ffmpeg --ss 00:00:00 -t 0.01 -i http://www.baidu.com/1.mp4 -y -q:v 2 -f image2 h