SpringCloud-Eureka服务注册与发现(单机版)

154 阅读3分钟

Eureka基础知识

前面我们没有服务注册中心,也可以服务间调用,为什么还要服务注册?

当服务很多时,单靠代码手动管理是很麻烦的,需要一个公共组件,统一管理多服务之间的相互调用。

Eureka用于服务注册,目前官网已经停止更新。

什么是服务治理

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

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

n个生产者和n个消费者之间相互调用。

什么是服务注册与发现

如果你的服务注册中心只有一台机器,那么只要它一宕机,就会产生单点故障。
所以一般服务注册中心能配多个就配多个,主要就是为了避免单点故障。

Eureka的两个组件

1.  Eureka Server:提供服务注册的服务。

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

2.  Eureka Client:微服务通过其和Eureka Server保持通信。

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

单机Eureka构建步骤

image.png

改pom

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

添加依赖

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

写yml

    Eureka服务器 请求地址:
    http://${eureka.instance.hostname}:${server.port}/eureka/
    http:/localhost:7001/eureka/
server:
  port: 7001

eureka:
  instance:
    hostname: localhost
  client:
    # false表示不向注册中心注册自己(中介不用注册了)
    register-with-eureka: false
    # false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
    fetch-registry: false

    service-url: 
      # 设置Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

主启动类

注意开启注解:@EnableEurekaServer
指明该模块作为Eureka注册中心的服务器。
    @EnableEurekaServer
    @SpringBootApplication
    public class EurekaMain7001 {
        public static void main(String[] args) {
            SpringApplication.run(EurekaMain7001.class, args);
        }
    }

测试

启动,发送http://localhost:7001/ 请求

image.png image.png

微服务注册

3.1 生产者微服务8001注册EurekaServer

1改POM

添加一个Eureka-Client依赖:
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

2. 改yml:添加如下配置

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

3. 修改主启动类

3.  修改主启动类

添加注解:@EnableEurekaClient。
指明这是一个Eureka客户端,要注册进EurekaServer中。
    @SpringBootApplication
    @EnableEurekaClient
    public class PaymentMain8001 {
        public static void main(String[] args) {
            SpringApplication.run(PaymentMain8001.class, args);
        }
    }

4. 测试

启动Payment8001模块:

image.png

发现我们的8001服务注册进来了。

红色字体是Eureka的自我保护机制,后面再详细说。

注意:注册进来的服务名,就是我们在该服务yml文件中配置的微服务名