二、Eureka服务注册与发现
1. 概念
SpringCloud封装了Netflix公司开发的Eureka模块来实现服务注册与发现(类似于Dubbo的注册中心,如Zookeeper)。
服务的注册与发现对于微服务架构来说非常重要,有了服务发现与注册功能,只需要使用服务的标识符,就可以访问到服务,而不需要修改服务调用的配置文件了。
2. 基本架构
Eureka采用了C-S的设计架构,包含两个组件,分别是
Eureka Server和Eureka Client
。
Eureka Server
:作为服务注册功能的服务器,它是服务注册中心。各节点启动后,会在Eureka Server中进行注册,这样Eureka Server的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可在界面中直观的看到。
Eureka Client
:是一个Java客户端,用于简化与Eureka Server的交互,客户端同时也具备一个内置的、使用轮询负载算法(round-robin)的负载均衡器。在应用启动后,将会向Eureka Server发送心跳(默认周期为30秒)。如果Eureka Server在多个心跳周期内未接收到某个节点的心跳,Eureka Server将会从服务注册表中将这个服务移除(默认90秒)。
一般情况下,实现服务间的调用,需要搭建注册中心即Eureka Server,各个微服务作为Eureka Client,服务提供者连接Eureka Server注册服务并维持心跳连接,服务调用者从Eureka Server拉取服务注册表,完成目标服务的调用,示意图如下:
Eureka Server
:提供服务注册与发现
Service Consumer
:服务消费方从Eureka获取注册服务列表,从而能够消费服务
Service Provider
:服务提供方将自身服务注册到Eureka,从而使服务消费方能够找到
3. 服务注册入门案例
3.1 搭建注册中心(Eureka Server)
3.1.1 新建工程spring-cloud-demo
1)首先创建一个Maven工程,名为spring-cloud-demo,如下图:
2)下一步确认工程信息,点击完成:
3.1.2 添加工程Maven依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.2.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.RC1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
这里注意SpringCloud的版本以地铁站名称命名,本案例中cloud版本选用的是Dalston.RC1,根据SpringCloud官网,与之匹配的boot版本选用的是1.5.2.RELEASE。
3.1.3 新建模块eureka-server-8888
点击工程名称spring-cloud-demo,右键新建一个maven module,名称为eureka-server-8888。该服务访问端口为8888,为了方便后面我们添加Eureka Server的服务集群,名称加上端口8888的后缀。