服务注册与发现-Eureka

1 Eureka简介

1.1 什么是Eureka

Eureka是一个用于服务注册与发现的组件,Eureka是Netflix公司的开源产品,分为Eureka Server和Eureka Client,其中Eureka Server是服务注册中心,Eureka Client是Eureka的客户端。

1.2 Eureka的基本架构

  • Register Service:服务注册中心,它是一个Eureka Server,提供服务注册与发现功能。
  • Provider Service:服务提供者,它是一个Eureka Client,提供服务。
  • Consumer Service:服务消费者,它是一个Eureka Client,消费服务。
    服务消费的基本过程:
    首先需要一个注册中心Eureka Server,服务提供者Eureka Client像服务注册中心Eureka Server注册,将自己的信息(服务名、服务ip、端口等信息)通过RestAPI的形式提交给服务注册中心Eureka Server。服务消费者Eureka Client也需要向服务注册中心注册,同时服务消费者获取一份服务注册列表信息,这个列表包含了所有向服务注册中心注册的服务信息。获取服务注册列表信息后,服务消费者便知道服务提供者的信息,可以通过http远程调用来消费服务提供者的服务。

2 Eureka的基本概念

2.1 服务注册 Register

当Eureka Client向Eureka注册时,Eureka Client需要提供自身的元数据信息。

2.2 服务续约 Renew

默认情况下,Eureka Client会每隔30秒发送一次心跳来进行续约。通过服务续约来告诉Eureka Server该Eureka Client是可用的,没有出现故障。正常情况下,Eureka Server在90秒内没有收到Eureka Client的心跳,Eureka Server会将该Client实例从注册列表中删除。

2.3 获取服务注册列表信息 Fetch Registries

Eureka Server获取注册列表信息后会将其缓存到本地,Eureka Client在注册列表中查找其他服务信息进行远程调用。该注册表信息每隔30秒更新一次。Eureka Server和EurekaClient可以使用JSON和XML数据进行通信,默认情况下Eureka Client使用JSON形式获取服务注册表信息。

2.4 服务下线 Cannel

Eureka Client在程序关闭时可以向Eureka Server发送下线请求。请求发送后,该客户端信息姜葱Server的服务注册表中删除。

2.5 服务剔除

默认情况下,Eureka Client 90秒没有向Server发送续约信息Eureka Server会将该实例从服务注册表中剔除。

3 示例

3.1 创建父工程

demo采用maven的多module结构,先创建一个主工程:spring-cloud-demo。
主工程pom.xml内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <parent>
       <groupId>com.myf.wind</groupId>
       <artifactId>spring-cloud-demo</artifactId>
       <version>1.0-SNAPSHOT</version>
       <relativePath/> <!-- lookup parent from repository -->
   </parent>
   <artifactId>eureka-server</artifactId>
   <version>1.0.0-SNAPSHOT</version>
   <name>eureka-server</name>
   <description>Demo project for Spring Boot</description>

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

   <build>
       <plugins>
           <plugin>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-maven-plugin</artifactId>
           </plugin>
       </plugins>
   </build>
</project>

3.2 创建eureka-server

创建一个module工程:eureka-server,采用Spring Initializr方式构建,作为服务注册中心Eureka Server。
项目结构:
在这里插入图片描述
项目pom.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <parent>
       <groupId>com.myf.wind</groupId>
       <artifactId>spring-cloud-demo</artifactId>
       <version>1.0-SNAPSHOT</version>
       <relativePath/> <!-- lookup parent from repository -->
   </parent>
   <artifactId>eureka-server</artifactId>
   <version>1.0.0-SNAPSHOT</version>
   <name>eureka-server</name>
   <description>Demo project for Spring Boot</description>

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

   <build>
       <plugins>
           <plugin>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-maven-plugin</artifactId>
           </plugin>
       </plugins>
   </build>
</project>

yml配置文件如下:

#注册中心配置
server:
  port: 9000 # 端口号

eureka:
  instance:
    prefer-ip-address: true # 提交ip信息
    hostname: localhost
  client:
    register-with-eureka: false # 是否向注册中心注册自己
    fetch-registry: false  
    service-url:
      defaultZone:  http://${eureka.instance.hostname}:${server.port}/eureka/

在启动类上加注解@EnableEurekaServer,开启Eureka Server的功能。

3.3 创建Eureka Client

创建一个module工程:eureka-client,采用Spring Initializr方式构建,该工程作为Eureka Client想服务注册中心注册。
项目结构:
在这里插入图片描述
项目pom.xml文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <parent>
       <groupId>com.myf.wind</groupId>
       <artifactId>spring-cloud-demo</artifactId>
       <version>1.0-SNAPSHOT</version>
       <relativePath/> <!-- lookup parent from repository -->
   </parent>
   <artifactId>eureka-client</artifactId>
   <version>1.0.0-SNAPSHOT</version>
   <name>eureka-client</name>
   <description>Demo project for Spring Boot</description>

   <dependencies>
       <dependency>
           <groupId>org.springframework.cloud</groupId>
           <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
       </dependency>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-web</artifactId>
       </dependency>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-test</artifactId>
           <scope>test</scope>
       </dependency>
   </dependencies>

   <build>
       <plugins>
           <plugin>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-maven-plugin</artifactId>
           </plugin>
       </plugins>
   </build>
</project>

项目yml配置文件内容:

server:
 port: 9001

spring:
 application:
   name: eureka-client

eureka:
 client:
   service-url:
     defaultZone: http://localhost:9000/eureka/

在启动类上加注解@EnableEurekaClient,开启Eureka Client的功能。

先启动eureka-sever,再启动eureka-client,都启动完成后访问eureka-server服务:http://localhost:9000

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尘风-随手记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值