Eureka服务端

本部分主要是对Eureka内部数据结构的维护与集群复制的分析,相比于其它源码分析类文章,本文更像是实验过程,而不是粘一堆代码后得出结论。

搭建环境

配置单机版Host

编辑本机的Hosts(/etc/hosts)

127.0.0.1 peer1
127.0.0.1 peer2
127.0.0.1 peer3 

搭建测试环境

配置如下配置属性,详见High Availability, Zones and Regions,注意defaultZone在Server侧需要写全,在Client侧可以写部分,否则没写的不会收到心跳信息,导致Server报错"Renews threshold"

eureka:
  client:
    serviceUrl:
      defaultZone: http://peer1:8081/eureka/,http://peer2:8082/eureka/,http://peer3:8083/eureka/
  instance:
    appname: eureka-server
---
spring:
  profiles: peer1
eureka:
  instance:
    hostname: peer1
    instance-id: peer-id1
server:
  port: 8081
---
spring:
  profiles: peer2
eureka:
  instance:
    hostname: peer2
    instance-id: peer-id2
server:
  port: 8082
---
spring:
  profiles: peer3
eureka:
  instance:
    hostname: peer3
    instance-id: peer-id3
server:
  port: 8083

然后再加入@EnableEurekaServer注解,就完成搭建一个Server了,依此启动这三个profile的SpringBoot程序

如果搭建成功,应该可以发现下面三个地址可以访问了

http://localhost:8081/
http://localhost:8082/
http://localhost:8083/

在启动过程中,不断刷新如下地址,可以发现apps__hashcode会不断更新

http://localhost:8081/eureka/apps

执行分析

打开Wireshark,分析localhost网卡,进行如下过滤

# 发送与接收
http&&(tcp.port==8081 || tcp.port==8082 || tcp.port==8083)
# 接收
http&&(tcp.dstport==8081 || tcp.dstport==8082 || tcp.dstport==8083)