目录
Eureka介绍
Eureka由多个实例组成,这些实例可以分为两种:Eureka Server和Eureka Client。Eureka Server作为服务的注册中心,提供服务注册和发现
在下面的例子中,我们将Eureka Client再分为Provider Client(服务提供者客户端)和Consumer Client(服务消费者客户端)。
Provider Client 作为服务提供方,将自身注册到Eureka,从而使服务消费方Consumer Client能够从注册中心获取到。服务消费方会从Eureka获取注册服务列表,从而能够消费服务。然而在实际的工作中是不会出现某个微服务仅仅只对外提供服务或者说只作为服务消费方。这里仅仅是方便理解而设计成这样。
Eureak注册中心介绍
修改配置host
host文件目录:C:\Windows\System32\drivers\etc
。方便后面配置注册中心高可用集群。
127.0.0.1 www.eurekaServer7000.com
127.0.0.1 www.eurekaServer7001.com
127.0.0.1 www.eurekaServer7002.com
127.0.0.1 www.eurekaServer7003.com
1、部署Eureka Server
1.1 单机部署
1.1.1 引入依赖
<!--eureka-server 服务端 旧版本使用spring-cloud-starter-eureka-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
1.1.2 application.yml中添加配置
server:
port: 7000
servlet:
context-path: /study
#eureka 服务端配置
eureka:
instance:
hostname: 127.0.0.1 #eureka服务端的实例名称
client:
register-with-eureka: false #false表示不向注册中心注册自己。没有做集群不需要自己注册自己
fetch-registry: false #是否从Eureka Server获取注册的服务信息。false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
service-url:
#设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址。
defaultZone: http://${
eureka.instance.hostname}:${
server.port}/study/eureka/ # 单节点配置
server:
enable-self-preservation: true # 关闭自我保护模式(缺省为打开)
eviction-interval-timer-in-ms: 60000 # 续期时间,即扫描失效服务的间隔时间(缺省为60*1000ms)
1.1.4 启动类添加@EnableEurekaServer
注解
添加@EnableEurekaServer
注解,用于启动注册中心。启动成功后,访问http://127.0.0.1:7000/study/
@SpringBootApplication
@EnableEurekaServer // 开启Eureka服务注册中心
public class EurekaServer7000Start {
public static void main(String[] args) {
// 启动之后访问 http://127.0.0.1:7000/study/
SpringApplication.run(EurekaServer7000Start.class,args);
}
}
1.1.3 完整demo地址
gitee地址中的cloud-eureka-server7000
模块
1.2 单机集群部署
1.2.1 在单机的基础上修改application.yml
#eureka 服务端配置
eureka:
instance:
hostname: www.eurekaServer7001.com #eureka服务端的实例名称 修改了hosts文件,单节点直接使用127.0.0.1
client:
register-with-eureka: true #false表示不向注册中心注册自己。没有做集群不需要自己注册自己
fetch-registry: true #是否从Eureka Server获取注册的服务信息。false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
service-url:
#设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址。
# 单节点配置 defaultZone: http://${eureka.instance.hostname}:${server.port}/study/eureka/
# 集群配置从节点的Eureka
defaultZone: http://www.eurekaServer7002.com:7002/study/eureka/,http://www.eurekaServer7003.com:7003/study/eureka/
server:
enable-self-preservation: true # 关闭自我保护模式(缺省为打开)
eviction-interval-timer-in-ms: 60000 # 续期时间,即扫描失效服务的间隔时间(缺省为60*1000ms)
-
与单机部署的差别
eureka.client.register-with-eureka:true
:向注册中心注册自己。
eureka.client.fetch-registry:true
:从Eureka Server获取注册的服务信息设置为true。
eureka.client.service-url.defaultZone
:配置集群中其他机器的地址,用逗号分隔。
例如7001端口的集群,就需要配置7002和7003机器的地址(如果你将本机也配置,也是可以的)。 -
其他事项说明
eureka.client.register-with-eureka
和eureka.client.fetch-registry
即使都设置为false。集群中所有注册中心节点的服务列表也会是一致的。因为当一个Eureka Client在向集群中注册的时候,当前集群会将注册表根据eureka.client.service-url.defaultZone
同步发送到其他的集群,进行信息同步。
只不过eureka.client.register-with-eureka
配置为false。集群的其他节点会出现在该节点的【不可用副本】中:
1.2.2 配置注意事项
注意:必须使用配置的host域名,否则使用127.0.0.1或者是localhost,集群会无法通信。
原因:
public class PeerEurekaNodes {
........省略.......
protected List<String> resolvePeerUrls() {
InstanceInfo myInfo = applicationInfoManager.getInfo();
String zone = InstanceInfo.getZone(clientConfig.getAvailabilityZones(clientConfig.getRegion()), myInfo)</