Spring Cloud 之 Eureka 服务注册与发现


Eureka介绍

    Eureka是一个基于REST(Representational State Transfer)的服务,主要用于AWS cloud, 提供服务定位(locating services)、负载均衡(load balancing)、故障转移(failover of middle-tier servers)。我们把它叫做Eureka Server. Eureka也提供了基于Java的客户端组件,Eureka Client,内置的负载均衡器可以实现基本的round-robin负载均衡能力。在Netflix,一个基于Eureka的更复杂的负载均衡器针对多种因素(如流量、资源利用率、错误状态等)提供加权负载均衡,以实现高可用(superior resiliency)。

Eureka架构


      上面的架构图描述了Eureka是如何在Netflix部署的,这也是Eureka集群的运行方式。在每个区域(region)都有一个eureka集群,它只知道该区域内的实例信息。每个分区(zone)至少有一个eureka服务器来处理本分区故障。

     服务注册在Eureka上并且每30秒发送心跳来续租。如果一个客户端在几次内没有刷新心跳,它将在大约90秒内被移出服务器注册表。注册信息和更新信息会在整个eureka集群的节点进行复制。任何分区的客户端都可查找注册中心信息(每30秒发生一次)来定位他们的服务(可能会在任何分区)并进行远程调用。

部署注册中心 Eureka Server

一、新建Idea项目

微服务中的每一个组件都要向注册中心进行注册,再由网关进行统一调用

1、打开idea新建项目registry,进行依赖添加时,勾选Eureka Server,创建项目



创建完成后,可以看见pom.xml文件中可以看到spring-cloud-starter-netflix-eureka-server 

 <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
 </dependency>
2、 然后在项目的main方法所在的类中添加@EnableEurekaServer 启用注册中心

package vip.ablog.registry;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer   
public class RegistryApplication {
    public static void main(String[] args) {
        SpringApplication.run(RegistryApplication.class, args);
    }
}
3、修改项目的application.yml文件,添加配置,这里使用Eureka默认的端口8761,spring.application.name为该应用的名称,也代表这个Eureka Server的id
spring:
  application:
    name: registry
server:
  port: 8761
4、配置完成后,打开浏览器,输入http://localhost:8761 即可今日注册管理界面
下图标红的部分为 【显示所有在注册中心登记的服务】这里可以看到,对于Eureka来说,自己既是服务器又是客户端,所以我们的项目registry,在下面注册中心自动注册


5、默认Eureka的端口为8761,假设修改eureka server的端口,那么eureka client相应的端口也应进行相关的调节,则在配置文件进行修改即可,这里我们将端口修改为9000

【解析】可以看到,下面配置信息的server.port修改为9000,则还需要相应的配置eureka client的url,这里的eureka.client.server-url:表示客户端要连接哪个eureka server的地址,这里的defaultZone 表示的是默认连接,然后地址后面的/eureka为约定,照写即可

在默认配置下,Eureka Server会将自己也作为客户端来尝试注册自己,我们需要禁用它的客户端禁用行为。

在配置文件中添加 eureks.client.register-with-eureka: false  即可禁用自注册

spring:
  application:
    name: registry
server:
  port: 9000
eureka:
  client:
    service-url:
      defaultZone: http://localhost:9000/eureka


Eureka Client 注册微服务

一、新建idea项目client

1、这里我们选择Web,因为client是一个Web项目,然后选择Eureka Discovery 设置为Eureka客户端



二、创建完成后,打开pom.xml文件:

1、会发现spring-cloud-starter-netflix-eureka-client ,即代表这是一个Eureka客户端


    <dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
2、在项目的main方法所在的类添加注解  @EnableEurekaClient  及代表开启Eureka客户端

package vip.ablog.client;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication
@EnableEurekaClient
public class ClientApplication {

    public static void main(String[] args) {
        SpringApplication.run(ClientApplication.class, args);
    }
}
3、修改配置文件application.yml文件
这里的defaultZone配置的时连接的上文的那个服务器
spring:
  application:
    name: client
eureka:
  client:
    service-url:
      defaultZone: http://localhost:9000/eureka/
4、配置完后,我们修改下程序的运行端口,然后8000端口启动一个,8001端口启动一个,以便测试



5、启动完成后我们可以看到Eureka Server的控制中心页面,Eureka Client 已经自动注册微服务,正如上面所说,Eureka的底层采用轮询的方式,每隔30S发送心跳包自动检测服务的注册或撤销,实现动态刷新。




Eureka高可用与客户端负载均衡

一、什么是注册服务中心高可用

      考虑到发生故障的情况,服务注册中心发生故障必将会造成整个系统的瘫痪,因此需要保证服务注册中心的高可用。

        Eureka Server在设计的时候就考虑了高可用设计,在Eureka服务治理设计中,所有节点既是服务的提供方,也是服务的消费方,服务注册中心也不例外。

       Eureka Server的高可用实际上就是将自己做为服务向其他服务注册中心注册自己,这样就可以形成一组互相注册的服务注册中心,以实现服务清单的互相同步,达到高可用的效果。

二、构建服务注册中心集群
        Eureka Server的同步遵循着一个非常简单的原则:只要有一条边将节点连接,就可以进行信息传播与同步。可以采用两两注册的方式实现集群中节点完全对等的效果,实现最高可用性集群,任何一台注册中心故障都不会影响服务的注册与发现

三、开始注册中心高可用配置
1、开始配置,首先,将上面的注册中心registry,复制一份启动程序,修改端口号为9001,这样就有了9000和9001两个注册中心了(歌词请忽略)


2、然后修改配置文件application.yml

reg:9000 的配置文件,将注册时的客户端指向9001端口

spring:
  application:
    name: registry
server:
  port: 9000
eureka:
  client:
    service-url:
      defaultZone: http://localhost:9001/eureka
    register-with-eureka: false

reg:9001的配置文件,将端口指向9000

spring:
  application:
    name: registry
server:
  port: 9001
eureka:
  client:
    service-url:
      defaultZone: http://localhost:9000/eureka
    register-with-eureka: false
这样就完成了eureka的相互注册,接下来我们打开这两个server的控制中心:

就可以发现,两个eureka注册中心完成了相互注册,共享客户端信息,这样就完成了Eureka的注册中心【高可用配置】




四、Eureka客户端的负载均衡配置

上面虽然注册中心的高可用配置完成了,但是我们现在的客户端只注册了一个注册中心的地址,假如这个注册中心崩了,客户端一样无法使用,现在我们就要进行Eureka客户端的负载均衡设置

1、打开client的application.yml配置文件,进行修改

在defaultZone中进行多注册中心url配置,这样客户端会选择可用的注册中心进行连接

spring:
  application:
    name: client
eureka:
  client:
    service-url:
    #在客户端注册多个Eureka服务器地址,用逗号隔开,运行时Eureka会自动选择可用的服务器
    #在运行时,由客户端选择注册中心的机制,被称为客户端负载均衡
      defaultZone: http://localhost:9000/eureka/,http://localhost:9001/eureka/





猜你喜欢

转载自blog.csdn.net/Allan_Bst/article/details/80943825