Spring Cloud的注册中心能够由Eureka、Consul、Zookeeper、ETCD等来实现,这里推荐使用Spring Cloud Eureka来实现注册中心,它基于Netfilix的Eureka作了二次封装,完成分布式服务中服务治理的功能,微服务系统中的服务注册与发现都经过这个注册中心来进行管理。spring
以前的文章基础上加入Spring Cloud的依赖,如今再加入注册中心Eureka Server的依赖。服务器
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency> </dependencies>
在包根目录下加入启动类:微信
@EnableEurekaServer @SpringBootApplication public class RegisterApplication { public static void main(String[] args) { new SpringApplicationBuilder(RegisterApplication.class).bannerMode(Banner.Mode.LOG) .run(args); } }
@EnableEurekaServer
注解即开启注册中心服务器的功能。网络
在application.yml中加入以下配置:app
spring: application: name: register-center profiles: active: register-center1 eureka: instance: prefer-ip-address: true instance-id: ${spring.cloud.client.ipAddress}:${server.port} lease-expiration-duration-in-seconds: ${lease-expiration-duration-in-seconds} lease-renewal-interval-in-seconds: ${lease-renewal-interval-in-seconds} server: enable-self-preservation: ${enable-self-preservation} eviction-interval-timer-in-ms: ${eviction-interval-timer-in-ms} client: register-with-eureka: true fetch-registry: true serviceUrl: defaultZone: ${register-center.urls} --- spring: profiles: register-center1 server: port: ${register-center1.server.port} --- spring: profiles: register-center2 server: port: ${register-center2.server.port}
这里作了两台注册中心的高可用配置register-center1,register-center2,也能够作多台,既然是高可用,每一个注册中心都向别的注册中心注册本身。maven
${}里面的配置由maven resource filter来打包进行控制,不一样的环境使用不一样的配置文件。分布式
如filter-dev.properties的配置参考以下:spring-boot
#url register-center1.server.ip=192.168.1.22 register-center2.server.ip=192.168.1.23 register-center.urls=http://${register-center1.server.ip}:${register-center1.server.port}/eureka/,http://${register-center2.server.ip}:${register-center2.server.port}/eureka/ #port register-center1.server.port=7001 register-center2.server.port=7002 #config enable-self-preservation=false eviction-interval-timer-in-ms=5000 lease-expiration-duration-in-seconds=20 lease-renewal-interval-in-seconds=6
Spring Boot的配置参考Spring Boot系列文章,这里只对Spring Cloud用到的配置解释。微服务
spring.application.name
:配置应用名称,在注册中心中显示的服务注册名称。fetch
spring.cloud.client.ipAddress
:获取客户端的IP地址。
eureka.instance.prefer-ip-address
:配置为true为喜欢IP,即链接注册中心使用IP地址形式,也可使用HOSTNAME,但生产环境不推荐。
eureka.instance.instance-id
:配置在注册中心注册的惟一实例ID。
eureka.instance.lease-expiration-duration-in-seconds
:指示eureka服务器在接收到最后一个心跳以后等待的时间(秒),而后才能今后视图中删除此实例,并禁止此实例的流量。将此值设置得太长可能意味着流量能够路由到实例,即便实例不存在。设置此值过小可能意味着,因为临时网络故障,实例可能会被取消流量。此值将设置为至少高于lease-renewal-interval-in-seconds中指定的值。
eureka.instance.lease-renewal-interval-in-seconds
:指示eureka客户端须要向eureka服务器发送心跳以指示它仍然存在的频率(以秒为单位)。若是在lease-expiration-duration-in-seconds中指定的时间段内未收到心跳线,则eureka服务器将从其视图中删除该实例,所以不容许此实例的流量。请注意,若是该实例实现HealthCheckCallback,而后决定使其自己不可用,则该实例仍然可能没法访问流量。
eureka.server.enable-self-preservation
:配置注册中心是否开启服务的自我保护功能。
eureka.server.eviction-interval-timer-in-ms
:配置注册中心清理无效节点的时间间隔,默认60000毫秒,即60秒。
eureka.client.register-with-eureka
:配置为true指示此实例将其信息注册到eureka服务器以供其余人发现。在某些状况下,您不但愿发现实例,而您只想发现其余实例配置为false。
eureka.client.fetch-registry
:指示该客户端是否应从eureka服务器获取eureka注册表信息。。
eureka.client.serviceUrl.defaultZone
:Eureka服务器地址。
这样一个两个注册心的Eureka Server就搭好了,启动的时候使用不一样的Profile来指定不一样的端口。
spring-boot:run -Drun.profiles=register-center1 -P dev spring-boot:run -Drun.profiles=register-center2 -P dev
扫描关注咱们的微信公众号,干货天天更新。