微服务的发现与注册--Eureka

服务提供者、服务消费者、服务发现组件三者之间的关系

1)各个微服务在启动时,将自己的网络地址等信息注册到服务发现组件中,服务发现组件会存储这些信息
2)服务消费者可以从服务发现组件查询服务提供者的网络地址,并使用该地址调用服务提供者的接口
3)各个微服务与服务发现组件使用一定机制(例如心跳)通信。服务发现组件如长时间无法与某微服务实例通信,就会注销该实例。

微服务的发现与注册--Eureka


4)微服务网络地址发生变更(如实例增减或者IP端口发生变化等)时,会重新注册到服务发现组件。使用这种方式,服务消费者就无须人工修改提供者的网络地址了。

Eureka 简介

Eureka是Netflix开源的服务发现组件,本身是一个基于REST的服务。它包含Server和Client两部分。
Spring Clound将它集成在子项目Spring Cloud Netflix中,从而实现微服务的注册与发现。

Eureka的Github地址:https://github.com/Netflix/Eureka

Eureka Server

提供服务发现的能力,各个微服务启动时,会向Eureka Server注册自己的信息(例如IP,端口,微服务名称等),Eureka Server会存储这些信息

Eureka Client

Eureka Client是一个java客户端,用于简化与Eureka Server的交互。微服务启动后,会周期性(默认30秒)地向Eureka Server发送心跳以续约自己的“租期”。
如果Eureka Server在一定时间内没有接收到某个微服务实例的心跳,Eureka Server将会注销该实例(默认90秒)

编写Eureka Server

1)创建一个ArtifacId是Maven工程,添加以下依赖

<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency> </dependencies>

2)编写启动类,在启动类上添加@EnableEurekaServer注解,声明这是一个Eureka Server

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

3)在配置文件application.yml中添加以下内容

server: port: 9999 eureka: instance: hostname: 127.0.0.1 client: registerWithEureka: false fetchRegistry: false serviceUrl: defaultZone: ${eureka.instance.hostname}:${server.port}/eureka/

说明:
registerWithEureka:表示是否将自己注册到Eureka Server,默认为true.
fetchRegistry:表示是否从Eureka Server获取注册信息,默认为true.因为这是一个单点的Eureka Server,不需要同步其他的Eureka Server的数据,故设为false.
defaultZone:设置与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址。多个地址可用,分隔。

这样一个Eureka Server就编写完成了。

将微服务注册到Eureka Server

1)在微服务项目里pom.xml添加以下依赖

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

2)配置文件aplication.yml中添加以下配置

spring: application: name: microservice-provider-user # 应用名 eureka: client: service-url: defaultZone: :9999/eureka instance: prefer-ip-address: true

3)编写启动类,添加@EnableDiscoveryClient注解声明这是一个Eureka Client.

@EnableDiscoveryClient @SpringBootApplication public class ProviderUserApplication { public static void main(String[] args) { SpringApplication.run(LicenseApplication.class, args); } } 关注公众号githubcn,免费获取更多学习视频教程

微服务的发现与注册--Eureka

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzzfwy.html