系列目录:java
Spring Cloud的服务发现有2种实现方式,一个是Euraka服务,一个是基于Consul的服务。本文先讲讲Eureka的服务发现实现。web
Spring Cloud Eureka 模块提供的功能是被动式的服务发现。 spring cloud eureka 分为两部分:spring
** 什么是服务发现?** 服务发现就像聊天室一个,每一个用户来的时候去服务器上注册,这样他的好友们就能看到你,你同时也将获取好友的上线列表. 在微服务中,服务就至关于聊天室的用户,而服务注册中心就像聊天室服务器同样,目前服务发现的解决方案有Eureka , Consul ,Etcd , Zookeeper ,SmartStack ,等等。 本文就来说讲Eureka,如图所示,Eureka Client经过HTTP(或者TCP,UDP)去Eureka Server注册和获取服务列表,为了高可用通常会有多个Eureka Server组成集群。Eureka会移除那些心跳检查未到达的服务。apache
<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> <groupId>com.zrx</groupId> <artifactId>minaret-eureka-server</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>minaret-eureka-server</name> <description>Eureka注册中心</description> <!-- org.springframework.booot 父类 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.2.RELEASE</version> </parent> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Dalston.SR1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <!-- 属性配置文件 --> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.8</java.version> <spring.boot.admin.server>1.5.0</spring.boot.admin.server> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- 服务发现 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency> <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-client</artifactId> <version>${spring.boot.admin.server}</version> </dependency> </dependencies> <build> <finalName>${project.artifactId}</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
启动应用Application.javasegmentfault
@SpringBootApplication @EnableEurekaServer public class EurekaApplication { public static void main(String[] args) throws Exception { SpringApplication.run(EurekaApplication.class, args); } }
配置application.yml服务器
server: port: 8761 spring: application: name: eureka-service eureka: client: registerWithEureka: false # 禁止 注册中心,注册本身做为服务,默认是能够的 fetchRegistry: false # 禁止 注册中心,注册本身做为服务,默认是能够的,本地是单点so,设置为false server: waitTimeInMsWhenSyncEmpty: 0 evictionIntervalTimerInMs: 4000 instance: hostname: peer1 #对应的hostname metadataMap: instanceId: ${spring.application.name}:${spring.application.instance_id:${random.value}}
创建Eureka Client 端,例如user-microservice , 这是用户服务。app
<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> <groupId>com.zrx</groupId> <artifactId>minaret-sys-provider-user</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>minaret-sys-provider-user</name> <description>minaret-sys-provider-user</description> <!-- org.springframework.booot 父类 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.2.RELEASE</version> </parent> <properties> <spring.boot.admin.server>1.5.0</spring.boot.admin.server> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- Euraka --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <!-- end --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.16</version> </dependency> <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-client</artifactId> <version>${spring.boot.admin.server}</version> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Brixton.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <finalName>${project.artifactId}</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
Application.classdom
@EnableDiscoveryClient @SpringBootApplication public class SysUserApplication { public static void main(String[] args) { new SpringApplicationBuilder(SysUserApplication.class).web(true).run(args); } }
server: port: 3333 spring: application.name: user-microservice-service # z指定注册中心的位置 eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/