《Spring Cloud微服务架构实战》-- 注册中心--Eureka

本书使用的Spring Cloud版本为Dalston.SRl,相关的技术版本如下所示。

> spring-cloud-commons:公共模块,版本为 1.2.2.RELEASE。

> spring-cloud-config:配置管理模块,版本为 1.3.1.RELEASE。

> spring-cloud-netflix: Spring Cloud的核心模块,用于提供服务管理、负载均衡等功 能,版本为 1.3.1.RELEASE。

> spring-cloud-sleuth:服务跟踪模块,版本为 1.2.1.RELEASE。

> spring-cloud-stream:用于构建消息驱动微服务的模块,版本为Chelsea.SR2。

> spring-cloud-bus:消息总线模块,对应版本为1.3.1.RELEASE。

> spring-boot: Spring Cloud 基于 Spring Boot 快速搭建,使用的 Spring Boot 版本为 1.5.3.RELEASEo

3.0 服务与发现中心: Eureka

Spring Cloud 集成了 Netflix OSS 的多个项目,形成了 spring-cloud-netflix 项目。该项目 包含多个子模块,这些子模块对集成的Netflix旗下的框架进行了封装,

本节将讲述其中一 个较为重要的服务管理框架:Eureka

3.1.1 关于 Eureka

Eureka提供基于REST的服务,在集群中主要用于服务管理。Eureka提供了基于Java 语言的客户端组件,客户端组件实现了负载均衡的功能,为业务组件的集群部署创造了条 件。

使用该框架,可以将业务组件注册到Eureka容器中,这些组件可进行集群部署,Eureka 主要维护这些服务的列表并自动检査它们的状态。

3.1.2 Eureka 架构

一个简单的Eureka集群,需要一个Eureka服务器、若干个服务提供者。我们可以将 业务组件注册到Eureka服务器中,其他客户端组件可以向服务器获取服务并且进行远程调 用。图3-1所示为Eureka的架构图。

《Spring Cloud微服务架构实战》-- 注册中心--Eureka_第1张图片

图3-1中有两个服务器,服务器支持集群部署,每个服务器也可以作为对方服务器的 客户端进行相互注册与复制。图3-1中所示的三个Eureka客户端,两个用于发布服务,另 一个用于调用服务。不管是服务器还是客户端,都可以部署多个实例,如此一来,就很容 易构建高可用的服务集群。

3.1.3服务器端

对于注册到服务器端的服务组件,Eureka服务器并没有提供后台的存储,这些注册的 服务实例被保存在内存的注册中心,它们通过心跳来保持其最新状态,这些操作都可以在 内存中完成。客户端存在着相同的机制,同样在内存中保存了注册表信息,这样的机制提 升了 Eureka组件的性能,每次服务的请求都不必经过服务器端的注册中心。

3.1.4服务提供者

  作为Eureka客户端存在的服务提供者,主要进行以下工作:第一,向服务器注册服务; 第二,发送心跳给服务器;第三,向服务器端获取注册列表。当客户端注册到服务器时, 它将会提供一些关于自己的信息给服务器端,例如自己的主机、端口、健康检测连接等。

3.1.5服务调用者

  对于发布到Eureka服务器的服务,服务调用者可对其进行服务查找与调用,服务调用 者也是作为客户端存在的,但其职责主要是发现与调用服务。在实际情况中,有可能出现 本身既是服务提供者,又是服务调用者的情况,例如在传统的企业应用三层架构中,服务 层会调用数据访问层的接口进行数据操作,它本身也会提供服务给控制层使用。

本节对Eureka进行了介绍,读者大概了解Eureka架构及各个角色的作用即可;

3.2 第一个Eureka应用

 3.2.1构建服务器

先创建一个名称为first-ek-server的Maven项目作为服务器,在pom.xml文件中加入

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

  

    

      org.springframework.cloud

      spring-cloud-dependencies

      Dalston.SRl

      pom

      import

    

  

  

    org.springframework.cloud

    spring-cloud-starter-eureka-server
  

  加入的 spring-cloud-starter-eureka-server 会自动引入 spring-boot-starter-web因此只需 加入该依赖,我们的项目就具有Web容器的功能了。

接下来,编写一个最简单的启动类, 启动我们的Eureka服务器,启动类如代码清单:

1

2

3

4

5

6

@SpringBootApplication

@EnableEurekaServer

public class FirstServer {

  public static void main(String[] arg§) (

    new SpringApplicationBuilder(FirstServer.class).run(args);

  }
}

  

启动类几乎与前面章节中介绍的Spring Boot项目一致,只是加入了@EnableEurekaServer, 声明这是一个Eureka服务器。直接运行FirstServer即可启动Eureka服务器需要注意的是,

本例中并没有配置服务器端口,因此默认端口为8080,我们将端口配置为8761;

在 src/main/resources目录下创建application.yml配置文件,内容如下:

1

2

server:

    port: 8761

 

运行FirstServer的main方法后,可以看到控制台的 输出如下:

1

2

3

4

5

6

2017-08-04 15:35:58.900 INFO 4028 —— [  main]

s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8761 
2017-08-04 15:35:58.901 INFO 4028 —— [   main]

.s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 8761

2017-08-04 15:35:58.906 INFO 4028 —— [  main]

org.crazyit.cloud.FirstServer   : Started FirstServer in 12.361 seconds JVM running for 12.891

2017-08-04 15:35:59.488 INFO 4028 —— [nio-8761-exec-l]
o.a.c.c.C.[Tomcat] . [localhost].[/] : Initializing Spring FrameworkServlet * dispatcherServlet *

  

成功启动后,打开浏览器,输入http://localhost:8761,可以看到Eureka 服务器控制台,如图3-2所示。

 

《Spring Cloud微服务架构实战》-- 注册中心--Eureka_第2张图片

   在图3-2的下方,可以看到服务的实例列表,目前我们并没有注册服务,因此列表 为空。

3.2.2服务器注册开关

在启动Eureka服务器时,会在控制台看到以下两个异常信息:

1

java.net.ConnectException: Connection refused:
connect com.netflix.discovery.shared.transport.TransportException:
Cannot execute request on any known server

  

这是由于在服务器启动时,服务器会把自己当作一个客户端,去注册Eureka服务器, 并且会到Eureka服务器抓取注册信息,它自己本身只是一个服务器,而不是服务的提供者 (客户端),

因此可以修改application.yml文件,修改以下两个配置:

1

2

3

4

eureka:

  client:

    registerWithEureka: false

    fetchRegistry: false

  

以上配置中的eureka.client.registerWithEureka属性,声明是否将自己的信息注册到 Eureka服务器,默认值为true。属性eureka.client.fetchRegistry则表示,是否到Eureka服务 器中抓取注册信息。

将这两个属性设置为false,启动时不会出现异常信息。

3.2.3编写服务提供者

在前面搭建环境章节,我们使用Spring Boot来建立一个简单的Web工程,并且在里 面编写了一个REST服务,本例中的服务提供者,与该案例类似。

建立名称为 first-ek-service-provider的项目在pom.xml中加入依赖,如下所示:

1

2

3

4

5

6

7

  org.springframework.cloud
  spring-cloud-starter-config

  org.springframework.cloud

  spring-cloud-starter-eureka

  

在src/main/resources目录中建立application.yml配置文件,文件内容如代码清单:

1

2

3

4

5

6

7

8

9

spring:

  application:

    name: first-service-provider

eureka:

  instance:

<

你可能感兴趣的:(spring,cloud,eureka,spring,cloud)