前言:

众所周知,在微服务里面,业务系统之间有复杂的调用关系,他们之间需要有一个注册中心来管理。也就是服务发现代理,它应该能起到如下作用:

普通服务能使用服务发现代理进行注册。
服务客户端能通过服务发现代理查找所需的服务信息。
多个服务发现代理间能共享服务的注册信息。
服务发现代理能检测服务的健康信息。
在Spring Cloud中,有多个组件可以起到服务发现代理的作用,但一般比较常用、较专业、可用性较高的是Eureka,Eureka分为Server和Client,Server是注册中心,Client是注册/调用方。

服务注册管理器原理如下图所示:

SpringCloud之eureka服务注册与发现_服务发现

1、建立eureka服务器

@EnableEurekaServer注解就可以让应用变为Eureka服务器,为其它微服务提供一个服务注册中心;

@SpringBootApplication
@EnableEurekaServer
public class EurekaServer {
   public static void main(String[] args) {
     SpringApplication.run(EurekaServer.class, args);
  }
}

在application.properties配置文件中使用如下配置:

server.port=8761
eureka.instance.hostname=localhost
eureka.client.registerWithEureka=false
eureka.client.fetchRegistry=false
eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/

其中server.port配置eureka服务器端口号;
Eureka的配置属性都在开源项目spring-cloud-netflix-master中定义,在这个项目中有两个类EurekaInstanceConfigBean 和EurekaClientConfigBean,分别含有eureka.instance和eureka.client相关属性的解释和定义。从中可以看到,registerWithEureka表示是否注册自身到eureka服务器,因为当前这个应用就是eureka服务器,没必要注册自身,所以这里是false。fetchRegistry表示是否从eureka服务器获取注册信息,同上,这里不需要。defaultZone就比较重要了,是设置eureka服务器所在的地址,查询服务和注册服务都需要依赖这个地址。

2、建立eureka服务器

让服务使用eureka服务器,只需添加@EnableDiscoveryClient注解就可以了。在main方法所在的Application类中,添加@EnableDiscoveryClient注解.

eureka.client.serviceUrl.defaultZone=http\://localhost\:8761/eureka/
spring.application.name=simple-service

其中defaultZone是指定eureka服务器的地址,无论是注册还是发现服务都需要这个地址。application.name是指定进行服务注册时该服务的名称。这个名称就是后面调用服务时的服务标识符。

Eureka服务器间的心跳可以参见:http://www.dongcoder.com/detail-15233.html和http://www.jianshu.com/p/1eaa7b16a82d