spring-cloud系列-Eureka

来源:互联网 发布:xshell mysql中文乱码 编辑:程序博客网 时间:2024/06/05 04:43

一、Eureka介绍与使用

服务注册与发现对于微服务系统来说非常重要。有了服务发现与注册,你就不需要整天改服务调用的配置文件了,你只需要使用服务的标识符,就可以访问到服务。

  • 代码可参考:https://github.com/amazingWu/Spring-Cloud-AG-Admin/tree/master/ace-center

  服务注册管理器原理如下图所示:

        

  所有的服务端及访问服务的客户端都需要连接到注册管理器(eureka服务器)。服务在启动时会自动注册自己到eureka服务器,每一个服务都有一个名字,这个名字会被注册到eureka服务器。使用服务的一方只需要使用该名字加上方法名就可以调用到服务。

  Spring cloud的服务注册及发现,不仅仅只有eureka,还支持Zookeeper和Consul。默认情况下是eureka,spring 封装了eureka,使其非常简单易用,只需要比传统应用增加一行代码就可以使用了,这一行代码就是一个注解。我们按以下步骤实现服务注册和发现功能。

  1)首选需要建立eureka服务器

  创建spring cloud eureka服务器和创建之前那个配置文件服务器类似,你只需要创建一个空的maven工程,并引入spring boot的相关starter即可,然后创建一个近乎空的执行类,工程如下图:

 

  在EurekaServer类中我们加入如下代码:

  @SpringBootApplication

  @EnableEurekaServer

  public class EurekaServer {

    public static void main(String[] args) {

    SpringApplication.run(EurekaServer.class, args);

      }

  }

  可以看到只需要使用@EnableEurekaServer注解就可以让应用变为Eureka服务器,这是因为spring boot封装了Eureka Server,让你可以嵌入到应用中直接使用。至于真正的EurekaServer是Netflix公司的开源项目,也是可以单独下载使用的。

  在application.properties配置文件中使用如下配置:

  server.port=8761

  eureka.instance.hostname=localhost

  eureka.client.registerWithEureka=false

  eureka.client.fetchRegistry=false

  eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/

  其中server.port配置eureka服务器端口号。Eureka的配置属性都在开源项目spring-cloud-netflix-master中定义(spring boot连文档都没有,只能看源码了),在这个项目中有两个类EurekaInstanceConfigBean 和EurekaClientConfigBean,分别含有eureka.instance和eureka.client相关属性的解释和定义。从中可以看到,registerWithEureka表示是否注册自身到eureka服务器,因为当前这个应用就是eureka服务器,没必要注册自身,所以这里是false。fetchRegistry表示是否从eureka服务器获取注册信息,同上,这里不需要。defaultZone就比较重要了,是设置eureka服务器所在的地址,查询服务和注册服务都需要依赖这个地址。

  做完这些后当然,还要改一下pom文件,增加eureka-server的starter即可:

  <dependency>

                            <groupId>org.springframework.cloud</groupId>

                            <artifactId>spring-cloud-starter-eureka-server</artifactId>

  </dependency>

  如此eureka服务器就完成了,在命令行启动就可以了。

  2)让服务使用eureka服务器

  让服务使用eureka服务器,只需添加@EnableDiscoveryClient注解就可以了。回到我们在上篇文章中实现的cloud-simple-service微服务应用。在main方法所在的Application类中,添加@EnableDiscoveryClient注解。然后在配置文件中添加:

  eureka.client.serviceUrl.defaultZone=http\://localhost\:8761/eureka/

  spring.application.name=cloud-simple-service

  其中defaultZone是指定eureka服务器的地址,无论是注册还是发现服务都需要这个地址。application.name是指定进行服务注册时该服务的名称。这个名称就是后面调用服务时的服务标识符(这是服务发现的功能,我们在后面章节具体介绍)。当然,pom文件也需要增加:

  <dependency>

    <groupId>org.springframework.cloud</groupId>

    <artifactId>spring-cloud-starter-eureka</artifactId>

  </dependency>


二、Eureka的高可用

在微服务的架构中,我们考虑发生故障的情况,所以在生产环境中我们需要对服务中各个组件进行高可用部署。

Eureka Server 的高可用实际上就是将自己作为服务想其它服务注册中心注册自己,这样就形成了一组互相注册的服务中心,

以实现服务清单 的互相同步,达到高可用的效果。

 

1. 创建 application-peer1.properties ,作为peer1服务中心的配置,并将serviceUrl 指向 peer2

spring.application.name=eureka-serverserver.port=1111eureka.instance.hostname=peer1eureka.client.serviceUrl.defaultZone=http://peer2:1112/eureka/

 

2. 创建 application-pee2.properties , 作为peer2服务中心的配置,比将serviceUrl 指向 peer1

spring.application.name=eureka-serverserver.port=1112eureka.instance.hostname=peer2eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/

 

3. 在本地HOST文件中添加配置,让上面配置的host形式的serviceUrl能在本地正确访问到

127.0.0.1 peer1  127.0.0.1 peer2

 

4. 通过spring.profiles.active 属性来分别启动peer1, peer2

java -jar eureka-server-0.0.1.jar --spring.profiles.active=peer1java -jar eureka-server-0.0.1.jar --spring.profiles.active=peer2

 

5. 启动完成

6. 访问 http://peer1:1111/ 截图如下:

 

 

7. 访问 http://peer2:1112/ 截图如下:

 

 

8. 如果我们停掉一个服务,我们会发现这个服务会变成这个状态 unavailable-replicas 状态

 

9. 向服务中心注册服务,需要同时向多个我们搭建的高可用服务注册中心注册服务,如下所示的application.properties 文件,配置了两个eureka服务器地址:

 

# 指定应用名称spring.application.name= hello-service# 构建服务中心的地址eureka.client.serviceUrl.defaultZone= http://peer1:1111/eureka/,http://peer2:1112/eureka/

 

10. 启动之后,就可以在服务注册中心看到我们注册上的服务了,截图如下:

http://peer1:1111 结果:

 

 http://peer2:1112结果:

 


原创粉丝点击