参考内容:http://blog.didispace.com/spring-cloud-starter-dalston-1/web
服务注册:spring
在服务治理框架中,一般会构建一个注册中心,每一个服务单元向注册中心登记本身提供的服务,将主机与端口号、版本号、通讯协议等一些附加信息告知注册中心,缓存
注册中心按服务名分类组织服务清单,注册中心还以心跳检测的方式去监控清单中的服务是是否可用,若不可用则从服务中剔除,排除故障。app
Eureka 服务端,服务注册中心。支持高可用配置,以集群模式部署,当集群中有分片出现故障,Eureka转入自我保护模式,他容许在分片故障期间继续提供服务的注册和发现,框架
当故障分片恢复运行时,集群中的分片会把他们的状态再次同步回来。spring-boot
Eureka 客户端,主要处理服务的注册和发现,客户端向注册中心注册自身提供的服务并周期性的发送心跳来更新他的服务租约。同时他也能能从服务端查询当前注册的服务信息,微服务
并把他们缓存到本地,并周期性的刷新服务状态。测试
搭建服务中心:fetch
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.4.RELEASE</version> <relativePath/> </parent> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency> </dependencies>
<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>
经过@EnableEurekaServer
注解启动一个服务注册中心提供给其余应用进行对话。这一步很是的简单,只须要在一个普通的Spring Boot应用中添加这个注解就能开启此功能,好比下面的例子:ui
@EnableEurekaServer @SpringBootApplication public class Application { public static void main(String[] args) { new SpringApplicationBuilder(Application.class) .web(true).run(args); } }
在默认设置下,该服务注册中心也会将本身做为客户端来尝试注册它本身,因此咱们须要禁用它的客户端注册行为,只须要在application.properties
配置文件中增长以下信息:
spring.application.name=eureka-server server.port=1001 eureka.instance.hostname=localhost eureka.client.register-with-eureka=false eureka.client.fetch-registry=false
将服务注册中心的端口经过server.port属性设置为1001。启动工程后,访问:http://localhost:1001/,能够看到下面的页面,其中尚未发现任何服务。
建立服务提供方
建立提供服务的客户端,并向服务注册中心注册本身。首先,建立一个基本的Spring Boot应用。命名为eureka-client
,在pom.xml
中,加入以下配置:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.4.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </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>Dalston.SR1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
其次,实现/dc请求处理接口,经过DiscoveryClient对象,在日志中打印出服务实例的相关内容。
@RestController public class DcController { @Autowired DiscoveryClient discoveryClient; @GetMapping("/dc") public String dc() { String services = "Services: " + discoveryClient.getServices(); System.out.println(services); return services; } }
@EnableDiscoveryClient最后在应用主类中经过加上@EnableDiscoveryClient
注解,该注解能激活Eureka中的DiscoveryClient实现,这样才能实现Controller中对服务信息的输出。
@SpringBootApplication public class Application { public static void main(String[] args) { new SpringApplicationBuilder( ComputeServiceApplication.class) .web(true).run(args); } }
spring.application.name=eureka-client咱们在完成了服务内容的实现以后,再继续对application.properties
作一些配置工做,具体以下:
server.port=2001 eureka.client.serviceUrl.defaultZone=http://localhost:1001/eureka/
经过spring.application.name
属性,咱们能够指定微服务的名称后续在调用的时候只须要使用该名称就能够进行服务的访问。eureka.client.serviceUrl.defaultZone
属性对应服务注册中心的配置内容,指定服务注册中心的位置。为了在本机上测试区分服务提供方和服务注册中心,使用server.port
属性设置不一样的端口。
启动该工程后,再次访问:http://localhost:1001/。能够以下图内容,咱们定义的服务被成功注册了。
固然,咱们也能够经过直接访问eureka-client
服务提供的/dc
接口来获取当前的服务清单,只须要访问:http://localhost:2001/dc,咱们能够获得以下输出返回: