Eureka 是Netflix公司开源的一个产品,它提供了服务注册和服务发现的功能。是springcloud系统中的核心组件之一。这里需要说明一点,在基于springcloud的微服务系统中并不是只能使用Eureka作为注册中心。spring所做的工作是先制定一套统一的接口,我们都是基于这一套接口来进行编程。至于Eureka,spring对开源的Eureka进行了进一步封装去适配他规定的那套接口。所以,使用springcloud开发微服务的一个好处就是不用关心具体的底层组件是什么,假如以后想要使用其他的组件作为注册中心,只需要修改一下依赖或者相关配置,然后封装一下你要用的其他组件使其适配springcloud的那套接口(通常都会有现成的封装)。这正是spring最擅长的。
关于服务注册中心的简单介绍
微服务架构简单来说就是将原来一个完整的单体应用拆分成多个不同的服务,每个服务都是一个能够独立部署、独立维护、独立扩展的应用,各个服务之间通过RESTful API的方式互相调用。
由于微服务架构是有多个各自独立的服务构成的,如果各个服务之间直接互相调用,那么随着系统中服务的个数增加,它们之间的调用关系会变得错综复杂,难以维护。所以需要服务注册中心来统一管理系统中的所有服务,将每个服务都注册到注册中心,调用时也从注册中心获取到需要的服务提供方的信息,这样耦合度就会大大降低,系统也会变得易于维护。
Eureka的架构简单介绍
Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务注册和发现。Eureka 采用了 C-S 的设计架构。Eureka Server 作为服务注册功能的服务器,它是服务注册中心。而系统中的其他微服务,使用 Eureka 的客户端连接到 Eureka Server,并维持心跳连接。这样系统的维护人员就可以通过 Eureka Server 来监控系统中各个微服务是否正常运行。Spring Cloud 的一些其他模块(比如Zuul)就可以通过 Eureka Server 来发现系统中的其他微服务,并执行相关的逻辑。
Eureka由两个组件组成:Eureka服务器和Eureka客户端。Eureka服务器用作服务注册服务器。Eureka客户端是一个java客户端,用来简化与服务器的交互、作为轮询负载均衡器,并提供服务的故障切换支持。Netflix在其生产环境中使用的是另外的客户端,它提供基于流量、资源利用率以及出错状态的加权负载均衡
下面是Eureka的一张架构示意图:
从这张图中可以清晰地看出来,Eureka主要由以下三个角色构成:
-
Eureka Server
提供服务注册和服务发现
-
Service Provider
服务提供方,将自己注册到Eureka Server,从而使得服务消费方能够找到自己
-
Service Consumer
服务消费方,从Eureka Server中获取注册了的服务列表,从而可以调用服务提供方
使用spring cloud Eureka实现服务注册中心
前面已经说过,spring cloud对Eureka进行了封装,提供了开箱即用的支持。我们只需要进行简单的配置就可以实现一个注册中心。
首先创建一个springboot项目,在pom中引入依赖:
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter</artifactId>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
pom中添加以上两个依赖后可能会报错,提示缺失版本号之类的错误,这时需要在pom中添加以下代码:
<dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Finchley.RELEASE</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>
然后在项目的启动类上添加@EnableEurekaServer
注解:
@SpringBootApplication
@EnableEurekaServer
public class EurekaDemoApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaDemoApplication.class, args);}
}
修改application.properties配置文件,添加以下配置:
spring.application.name=spring-cloud-eureka
server.port=8000
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/
各个参数的含义:
spring.application.name:应用的名称,在后续的调用中我们可以直接通过这个名称代替IP和端口来进行调用。
server.port:服务占用的端口号。
eureka.client.serviceUrl.defaultZone:指定服务注册中心的位置。
启动项目,访问:localhost:8000/,就可以看到Eureka的管理页面了,这样我们就实现了一个服务注册中心。