SpringCloud(一) 注册中心Eureka配置
Eureka是Netflix提供的开源产品,用于服务注册和发现的注册中心。是SpringCloud体系的重要核心组件。
背景
注册中心是管理各种服务的一个服务模块 ,在一个分布式微服务系统中,通过注册中心对其他服务进行注册、发现、熔断、负载、降级等处理,以实现整个分布式微服务系统的平稳、高效的运行。
服务A调用服务B
普通系统服务间调用:
注册中心系统中调用:
服务A 调用服务B ,服务B调用服务C
普通系统服务间调用:
注册中心系统中调用:
原理
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的基本架构:
1、Eureka Server :提供服务注册和发现;
2、Service Provider:提供服务,将自身注册到Eureka,便于消费都调用;
3、Service Consumer:消费服务,从Eureka获取服务列表,以调用服务;
案例
1. eureka项目结构:
2. pom.xml文件如下:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4 <modelVersion>4.0.0</modelVersion> 5 6 <groupId>com.wei</groupId> 7 <artifactId>CloudEurekaServer</artifactId> 8 <version>0.0.1-SNAPSHOT</version> 9 <packaging>jar</packaging> 10 11 <name>CloudEurekaServer</name> 12 <description>Demo project for Spring Boot</description> 13 14 <parent> 15 <groupId>org.springframework.boot</groupId> 16 <artifactId>spring-boot-starter-parent</artifactId> 17 <version>2.0.1.RELEASE</version> 18 <relativePath /> <!-- lookup parent from repository --> 19 </parent> 20 21 <properties> 22 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 23 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 24 <java.version>1.8</java.version> 25 <spring-cloud.version>Finchley.M9</spring-cloud.version> 26 </properties> 27 28 <dependencies> 29 <dependency> 30 <groupId>org.springframework.cloud</groupId> 31 <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> 32 </dependency> 33 34 <dependency> 35 <groupId>org.springframework.boot</groupId> 36 <artifactId>spring-boot-starter-test</artifactId> 37 <scope>test</scope> 38 </dependency> 39 </dependencies> 40 41 <dependencyManagement> 42 <dependencies> 43 <dependency> 44 <groupId>org.springframework.cloud</groupId> 45 <artifactId>spring-cloud-dependencies</artifactId> 46 <version>${spring-cloud.version}</version> 47 <type>pom</type> 48 <scope>import</scope> 49 </dependency> 50 </dependencies> 51 </dependencyManagement> 52 53 <build> 54 <plugins> 55 <plugin> 56 <groupId>org.springframework.boot</groupId> 57 <artifactId>spring-boot-maven-plugin</artifactId> 58 </plugin> 59 </plugins> 60 </build> 61 62 <repositories> 63 <repository> 64 <id>spring-milestones</id> 65 <name>Spring Milestones</name> 66 <url>https://repo.spring.io/milestone</url> 67 <snapshots> 68 <enabled>false</enabled> 69 </snapshots> 70 </repository> 71 </repositories> 72 73 </project>
3. application.properties(可以采用yml形式)配置如下:
1 # 服务名 2 spring.application.name=cloud-eureka-server 3 # 服务端口 4 server.port=9000 5 6 # 指示此实例是否应将其信息注册到eureka服务器以供其他人发现。在某些情况下,您不希望发现实例,而您只想发现其他实例。 7 eureka.client.register-with-eureka=false 8 # 指示该客户端是否应从eureka服务器获取eureka注册表信息。 9 eureka.client.fetch-registry=false 10 11 eureka.client.service-url.defaultZone=http://localhost:${server.port}/eureka/ 12 13 # 关闭服务保护机制 14 eureka.server.enable-self-preservation=false 15 # 清理无效节点时间间隔(单位毫秒,默认是60*1000) 16 eureka.server.eviction-interval-timer-in-ms=30000
4.项目主类CloudEurekaServerApplication.java的内容:
package com.wei; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; /** * cloud系统 Eureka注册中心 * * @author wgm * @date 2018年8月24日 */ @SpringBootApplication @EnableEurekaServer public class CloudEurekaServerApplication { public static void main(String[] args) { SpringApplication.run(CloudEurekaServerApplication.class, args); } }
5.运行项目后,在本地浏览器访问:http://localhost:9000/eureka/ 即可看到注册中心页面,至此,最简单的eureka注册中心完成。