spring cloud为互联企业构建微服务提供了一整套的技术组件,其中Eureka是Spring Cloud体系中的核心。Netfix不是一个技术概念,它本来是国外一个视频网站的名称。这个视频网站的技术团队在微服务方向作了大量实践,并提供了不少的技术组件,Eureka就是其中之一。笔者也是Spring Cloud初学者,本文从建立项目工程开始,一步一步开始讲解如何建立eureka服务端和客户端,一块儿学习,共同进步。 java
本文来源于个人技术博客:http://51think.netgit
咱们常常看到一些互联网企业在描述其技术架构时会使用到Eureka一词,也据说过Eureka用于服务注册发现,并不清楚它是如何整合到应用层的。从代码结构上来看,Eureka就是一个大jar包集合,maven引入这个jar包集合,并在应用层作简单配置便可实现服务发现功能。也就是说,Spring Cloud已经将相关功能封装的很好了,直接引用就好了,这也符合各类流行框架的宗旨,最大程度的下降非业务性的工做量,让程序员更加专一实现本身的业务功能。Eureka这个组件是不能单独运行的,须要以Springboot做为应用载体,真正的部署到虚机上面才能运行。程序员
注册中心,顾名思义,相似于zookeeper同样,提供服务注册发现功能,即服务端的服务地址经过注册中心所有暴露给客户端,由客户端实现负载均衡。下面咱们使用idea工具建立相关项目。
一、建立一个maven主工程
二、在主工程下建立一个model,本例中命名为spring-cloud-eureka github
三、填写Group和Artifact web
四、勾选Eureka Server spring
五、建立完成以后的pom文件apache
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.6.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>spring-cloud-eureka</artifactId> <version>0.0.1-SNAPSHOT</version> <name>spring-cloud-eureka</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> <spring-cloud.version>Greenwich.SR2</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</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> </project>
pom文件中只有一个关键的spring-cloud-starter-netflix-eureka-server包,其实这个包下面依赖了不少子包,以下图: 浏览器
六、找到Springboot的启动类,加上@EnableEurekaServer注解
@EnableEurekaServer表明这个springboot应用是一个注册中心。springboot
@EnableEurekaServer @SpringBootApplication public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } }
七、配置application.yml架构
server: port: 8010 eureka: instance: hostname: localhost client: registerWithEureka: false fetchRegistry: false serviceUrl: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
其中两个属性registerWithEureka: false fetchRegistry: false代表这个应用是Eureka Server端,而不是Client端。defaultZone用来申明这个注册中心的地址,后面建立Eureka Client端时也要申明这个地址,以便向注册中心注册。
这里咱们要建立一个springboot应用做为服务的生产者,而且可以将服务注册到注册中心。对于整个系统而言,咱们建立的是一个服务端应用供客户端调用,对于Eureka注册中心而言,除了注册中心是Server角色,其余都是Eureka Client角色。具体过程以下:
一、建立model过程与建立Eureka Server相似,名称为spring-cloud-eureka-myservice
二、pom文件
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.6.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>spring-cloud-eureka-myservice</artifactId> <version>0.0.1-SNAPSHOT</version> <name>spring-cloud-eureka-myservice</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> <spring-cloud.version>Greenwich.SR2</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</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> </project>
你们能够比较一下这个pom文件与以前的pom文件的差异,spring-cloud-starter-netflix-eureka-clien组件和以前注册中心pom文件中的spring-cloud-starter-netflix-eureka-server相对应。spring-boot-starter-web组件用来提供web访问能力,咱们能够经过浏览器来访问后台服务。
三、使用@EnableEurekaClient来标注本身的身份
@EnableEurekaClient @SpringBootApplication public class MyServiceApplication { public static void main(String[] args) { SpringApplication.run(MyServiceApplication.class, args); } }
四、配置application.yml
eureka: client: serviceUrl: defaultZone: http://localhost:8010/eureka/ server: port: 8011 spring: application: name: myservice
这个配置项spring.application.name很重要,代表这个应用在微服务架构中的应用名称,后面的案例中咱们能够经过这个名称来访问这个服务。
五、启动注册中心应用spring-cloud-eureka
六、启动服务生产者应用spring-cloud-eureka-myservice
七、访问Eureka面板
Eureka提供一个web访问页面,经过这个页面咱们能够看到已注册的服务列表以及注册中心应用的状态。浏览器访问http://localhost:8010,会展示以下页面:
红框标注的部分即咱们刚刚启动的spring-cloud-eureka-myservice应用,服务名称为myservice。
至此,Eureka Server端和Client端已经部署成功。