前面已经简单的介绍了 Eureka 注册中心的使用以及查看。下面将继续进行 Eureka 的说明以及应用。java
在实际生产项目中,为了保证服务的可用性,连续性,通常来讲,都会去搭建应用的集群来保证服务高可用。Eureka 是天生集群的,搭建配置至关简单:不论你有多少的机器部署,只要相互之间指定对方的注册中心地址就能够了。无需更多的配置项,方便,快捷。web
有几台机器部署 Eureka,就相互注册下关系,多个 Eureka Server 之间经过复制的方式完成注册服务的同步。本文中使用两个节点来进行模拟使用,若是三台或者更多机器的话,同理可配置。spring
一、建立配置文件安全
Eureka 注册中心的项目搭建,以前文中已经搭建并可使用。新增配置文件:application-ha02.properties、application-ha03.properties服务器
application-ha02.properties 配置以下app
server.port=8082 spring.application.name=nativeEureka eureka.environment=ha02 eureka.instance.hostname=server2 #是否将本身做为客户端注册到注册中心:false-不注册。默认为true。集群搭建中,设置true eureka.client.register-with-eureka=true #是否须要从注册中心检索获取服务的注册信息。默认值为true #单机版的可设置成false,集群版的因为须要同步其余节点的服务注册数据,故设成true。 eureka.client.fetch-registry=true #是否开启自我保护模式,默认值true #eureka server默认在运行期间会去统计心跳失败比例在 15 分钟以内是否低于 85%,若是低于 85%,Eureka Server 会将这些实例保护起来,让这些实例不会过时, #可是在保护期内若是服务恰好这个服务提供者非正常下线了,此时服务消费者就会拿到一个无效的服务实例,此时会调用失败 eureka.server.enable-self-preservation=false #扫描失效服务的间隔时间,单位毫秒,默认值 60 * 1000 eureka.server.eviction-interval-timer-in-ms=10000 #服务地址 eureka.client.service-url.defaultZone= http://server3:8083/eureka/
application-ha03.properties 配置以下ide
server.port=8083 spring.application.name=nativeEureka eureka.environment=ha03 eureka.instance.hostname=server3 #是否将本身做为客户端注册到注册中心:false-不注册。默认为true。集群搭建中,设置true eureka.client.register-with-eureka=true #是否须要从注册中心检索获取服务的注册信息。默认值为true #单机版的可设置成false,集群版的因为须要同步其余节点的服务注册数据,故设成true。 eureka.client.fetch-registry=true #是否开启自我保护模式,默认值true #eureka server默认在运行期间会去统计心跳失败比例在 15 分钟以内是否低于 85%,若是低于 85%,Eureka Server 会将这些实例保护起来,让这些实例不会过时, #可是在保护期内若是服务恰好这个服务提供者非正常下线了,此时服务消费者就会拿到一个无效的服务实例,此时会调用失败 eureka.server.enable-self-preservation=false #扫描失效服务的间隔时间,单位毫秒,默认值 60 * 1000 eureka.server.eviction-interval-timer-in-ms=10000 #服务地址 eureka.client.service-url.defaultZone= http://server2:8082/eureka/
其中,server二、server3 为修改本地 hosts 文件。spring-boot
二、分别启动服务fetch
启动类 NativeEurekaApplication 中,修改加载配置文件,分别应用 ha02 、ha03 配置文件,组建高可用:ui
package com.cfang; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; import org.springframework.context.annotation.Profile; @SpringBootApplication @EnableEurekaServer public class NativeEurekaApplication { public static void main(String[] args) { // SpringApplication.run(NativeEurekaApplication.class, args); SpringApplication application = new SpringApplication(NativeEurekaApplication.class); // application.setAdditionalProfiles("ha02"); application.setAdditionalProfiles("ha03"); application.run(args); } }
上面代码中,两次分别启动 ha02 和 ha03,启动两个 Eureka 注册中心。
在单节点启动的时候,会持续报错 Cannot execute request on any known server、Caused by: java.net.ConnectException: Connection refused: connect。此类异常消息,是由于向集群中其余 Eureka 注册服务时候,由于未开启而报错。正常可忽略,待后续逐步启动了全部 Eureka 服务后,此异常会解决消失。
三、控制台查看
启动好后,在 Eureka 控制台中可查看,分别访问:http://server2:8082/、http://server3:8083/
从上面能够看出,DS Replicas、registered-replicas、available-replicas分别有了其余 Eureka 的地址,即:相互Replicate、相互注册,则说明Eureka集群成功。
四、客户端使用
客户端使用过程当中,只须要修改配置文件中的注册中心地址就好了:
eureka.client.service-url.defaultZone= http://server2:8082/eureka/,http://server3:8083/eureka/
有几个 Eureka 提供服务,就在后面加上就好了。重启服务,则在全部的 Eureka 上都能查看到服务注册信息。
Eureka 能够增长使用 用户名 和 密码 的方式进行安全访问验证。有点相似 ActiveMQ 的用户名密码认证。
一、开启认证
Eureka 注册中心项目 nativeEureka 中,增长 pom 依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
新增config
package com.cfang.configuration; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; @EnableWebSecurity @Configuration public class WebSecurityConfig extends WebSecurityConfigurerAdapter{ @Override protected void configure(HttpSecurity http) throws Exception { super.configure(http); http.csrf().disable(); //关闭csrf过滤 http.authorizeRequests().anyRequest().authenticated().and().httpBasic(); } }
修改配置文件 application.properties
server.port=8081 spring.application.name=nativeEureka eureka.instance.hostname= server1 #是否将本身做为客户端注册到注册中心:false-不注册。默认为true。 eureka.client.register-with-eureka=false #是否须要从注册中心检索获取服务的注册信息。默认值为true #单机版的可设置成false,集群版的因为须要同步其余节点的服务注册数据,故设成true。 eureka.client.fetch-registry=false #是否开启自我保护模式,默认值true #eureka server默认在运行期间会去统计心跳失败比例在 15 分钟以内是否低于 85%,若是低于 85%,Eureka Server 会将这些实例保护起来,让这些实例不会过时, #可是在保护期内若是服务恰好这个服务提供者非正常下线了,此时服务消费者就会拿到一个无效的服务实例,此时会调用失败 eureka.server.enable-self-preservation=false #扫描失效服务的间隔时间,单位毫秒,默认值 60 * 1000 eureka.server.eviction-interval-timer-in-ms=10000 #安全认证信息 security.basic.enabled=true spring.security.user.name=root spring.security.user.password=123456 #服务地址 eureka.client.service-url.defaultZone= http://${spring.security.user.name}:${spring.security.user.password}@server1:8081/eureka/
主要修改增长安全认证信息。
完成以上几个步骤后,启动 Eureka 注册中心,访问 http://server1:8081/。会弹出输入用户名、密码:
输入配置文件中配置的用户名、密码后,登入 Eureka 控制台。
二、Eureka client 端修改
client 端,只须要修改配置文件,在注册的时候的地址信息就行了,带上认证信息:
server.port=8701 spring.application.name=nativefshService #是否将本身做为客户端注册到注册中心:false-不注册 eureka.client.register-with-eureka=true #安全认证信息 spring.security.user.name=root spring.security.user.password=123456 #服务地址 #eureka.client.service-url.defaultZone= http://server2:8082/eureka/,http://server3:8083/eureka/ eureka.client.service-url.defaultZone= http://${spring.security.user.name}:${spring.security.user.password}@server1:8081/eureka/
若是用户名、密码配置不正确的话,服务注册失败,会报错:com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server 。
一、通用配置
spring.application.name=xxxxxxxxxxxxx :应用名称配置,将会出如今 Eureka 注册中心 Application 列
server.port=8701 :应用端口,默认值为 8761
eureka.instance.hostname= server1 :服务注册中心应用实例主机名
eureka.instance.ip-address=127.0.0.1 :应用实例ip
eureka.instance.prefer-ip-address=false :客户端向注册中心注册时,相较于 hostname 是否有限使用 ip。在服务中心注册后,鼠标放到服务的 Status 列的连接上,无需点击,左下角能看出配置的变化。
eureka.instance.environment=dev :该实例的环境配置
eureka.client.register-with-eureka=false :是否将本身注册到 Eureka 注册中心。单机状况下的 Eureka Server 不须要注册,集群的 Eureka Server 以及 Eureka Client 须要注册。默认值 true
eureka.client.fetch-registry=false :是否须要从注册中心检索获取服务的注册信息。单机状况下的 Eureka Server 不须要获取。集群的 Eureka Server 以及 Eureka Client 须要获取。默认值 true
eureka.client.service-url.defaultZone= http://${spring.security.user.name}:${spring.security.user.password}@server1:8081/eureka/ :Eureka 服务的地址信息,中间的占位符为安全认证开启时使用,若是 Eureka Server 为集群状态,则逗号分隔,依次书写便可。
二、Eureka Server 配置
eureka.server.enable-self-preservation = false :是否开启自我保护模式,eureka server默认在运行期间会去统计心跳失败比例在 15 分钟以内是否低于 85%,若是低于 85%,Eureka Server 会将这些实例保护起来,让这些实例不会过时,可是在保护期内若是服务恰好这个服务提供者非正常下线了,此时服务消费者就会拿到一个无效的服务实例,此时会调用失败。默认 true
eureka.server.eviction-interval-timer-in-ms=10000 :扫描失效服务的时间间隔。单位 毫秒。 默认值 60 * 1000
security.basic.enabled=true :开启 Eureka 安全认证
spring.security.user.name=root :安全认证用户名
spring.security.user.password=123456 :安全认证密码
三、Eureka Client 配置
eureka.client.registry-fetch-interval-seconds=30 :客户端获取服务注册信息时间间隔,单位 秒。默认 30
eureka.instance.appname=eureka-client :服务名,默认取 spring.application.name 配置值,若是没有则为 unknown
eureka.instance.lease-expiration-duration-in-seconds=90 :服务的失效时间,失效的服务将被注册中心删除。时间间隔为最后一次注册中心接收到的心跳时间。单位 秒,默认 90
eureka.instance.lease-renewal-interval-in-seconds=30 :应用实例给注册中心发送心跳的间隔时间,用于代表该服务实例可用。单位 秒。默认30
eureka.client.eureka-server-connect-timeout-seconds=5 :client 链接 Eureka 注册中心的超时时间,单位 秒,默认 5
eureka.client.eureka-server-read-timeout-seconds=8 :client 对 Eureka 服务器读取信息的超时时间,单位 秒,默认 8
eureka.client.eureka-connection-idle-timeout-seconds=30 :client 链接 Eureka 服务端后空闲等待时间,单位 秒,默认 30
eureka.client.eureka-server-total-connections=200 :client 到 全部Eureka 服务端的链接总数,默认 200
eureka.client.eureka-server-total-connections-per-host=50 :client 到 Eureka 单服务端的链接总数,默认 50