在进行分析EurekaClient和EurekaServer之间通信的源码之前,我们首先需要熟悉一下几个实体类

InstanceInfo

这个类代表着EurekaClient实例,客户端向服务端请求注册时就会携带着这个实例,这个实例中包含了当前客户端的一些基本信息:

    private volatile String instanceId;

    private volatile String appName;
@Auto
private volatile String appGroupName; private volatile String ipAddr; private static final String SID_DEFAULT = "na";
@Deprecated
private volatile String sid = SID_DEFAULT; private volatile int port = DEFAULT_PORT;
private volatile int securePort = DEFAULT_SECURE_PORT; @Auto
private volatile String homePageUrl;
@Auto
private volatile String statusPageUrl;
@Auto
private volatile String healthCheckUrl;
@Auto
private volatile String secureHealthCheckUrl;
@Auto
private volatile String vipAddress;
@Auto
private volatile String secureVipAddress;
@XStreamOmitField
private String statusPageRelativeUrl;
@XStreamOmitField
private String statusPageExplicitUrl;
@XStreamOmitField
private String healthCheckRelativeUrl;
@XStreamOmitField
private String healthCheckSecureExplicitUrl;
@XStreamOmitField
private String vipAddressUnresolved;
@XStreamOmitField
private String secureVipAddressUnresolved;
@XStreamOmitField
private String healthCheckExplicitUrl;
@Deprecated
private volatile int countryId = DEFAULT_COUNTRY_ID; // Defaults to US
private volatile boolean isSecurePortEnabled = false;
private volatile boolean isUnsecurePortEnabled = true;
private volatile DataCenterInfo dataCenterInfo;
private volatile String hostName;
private volatile InstanceStatus status = InstanceStatus.UP;
private volatile InstanceStatus overriddenStatus = InstanceStatus.UNKNOWN;
@XStreamOmitField
private volatile boolean isInstanceInfoDirty = false;
private volatile LeaseInfo leaseInfo;
@Auto
private volatile Boolean isCoordinatingDiscoveryServer = Boolean.FALSE;
@XStreamAlias("metadata")
private volatile Map<String, String> metadata;
@Auto
private volatile Long lastUpdatedTimestamp;
@Auto
private volatile Long lastDirtyTimestamp;
@Auto
private volatile ActionType actionType;
@Auto
private volatile String asgName;
private String version = VERSION_UNKNOWN;
InstanceStatus

这个枚举中包含了客户端可能存在的状态

        UP,
DOWN,
STARTING,
OUT_OF_SERVICE,
UNKNOWN;
Lease

这个类是服务端用来保存客户端的租约信息的,其中holder中持有的就是InstanceInfo对象

// 租约过期时间
public static final int DEFAULT_DURATION_IN_SECS = 90;
//客户端实例
private T holder;
//服务下线时间
private long evictionTimestamp;
//注册起始时间
private long registrationTimestamp;
//取消注册时间
private long serviceUpTimestamp;
// 最后更新时间
private volatile long lastUpdateTimestamp;
//租约持续时间
private long duration;
PeerEurekaNode

这个对象代表着集群节点信息

 /**
* 服务地址
*/
private final String serviceUrl;
/**
* Eureka-Server 配置
*/
private final EurekaServerConfig config;
/**
* 批任务同步最大延迟
*/
private final long maxProcessingDelayMs;
/**
* 应用实例注册表
*/
private final PeerAwareInstanceRegistry registry;
/**
* 目标 host
*/
private final String targetHost;
/**
* 集群 EurekaHttpClient
*/
private final HttpReplicationClient replicationClient; /**
* 批量任务分发器
*/
private final TaskDispatcher<String, ReplicationTask> batchingDispatcher;
/**
* 单任务分发器
*/
private final TaskDispatcher<String, ReplicationTask> nonBatchingDispatcher;
EurekaHttpClient

这个是Eureka客户端与服务端通信的接口

public interface EurekaHttpClient {

    EurekaHttpResponse<Void> register(InstanceInfo info);

    EurekaHttpResponse<Void> cancel(String appName, String id);

    EurekaHttpResponse<InstanceInfo> sendHeartBeat(String appName, String id, InstanceInfo info, InstanceStatus overriddenStatus);

    EurekaHttpResponse<Void> statusUpdate(String appName, String id, InstanceStatus newStatus, InstanceInfo info);

    EurekaHttpResponse<Void> deleteStatusOverride(String appName, String id, InstanceInfo info);

    EurekaHttpResponse<Applications> getApplications(String... regions);

    EurekaHttpResponse<Applications> getDelta(String... regions);

    EurekaHttpResponse<Applications> getVip(String vipAddress, String... regions);

    EurekaHttpResponse<Applications> getSecureVip(String secureVipAddress, String... regions);

    EurekaHttpResponse<Application> getApplication(String appName);

    EurekaHttpResponse<InstanceInfo> getInstance(String appName, String id);

    EurekaHttpResponse<InstanceInfo> getInstance(String id);

    void shutdown();
}

本文由博客一文多发平台 OpenWrite 发布!

Eureka重要对象简介的更多相关文章

  1. Connection 对象简介 方法解读 JDBC简介(四)

    通过驱动管理器DriverManager的getConnection方法,可以创建到指定URL的连接     Connection conn = DriverManager.getConnection ...

  2. 五 js对象简介

    对象简介 js中没有"类"的概念,只有对象. A:对象声明方式有三种 ------------1.调用Object函数创建对象: var person = new Object; ...

  3. Javascript Proxy对象 简介

    Javascript Proxy对象 简介 Javascript Proxy对象 改变你操作对象的方式 Proxies 是Javasript对象的中间件 ...或者说至少是那种很早的版本. ES6 中 ...

  4. JS对象简介

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. cb25a_c++_函数对象简介

    cb25a_c++_函数对象简介预定义的函数对象https://blog.csdn.net/txwtech/article/details/104382505negate<type>()p ...

  6. JavaScript课程——Day07(对象简介、Math对象、时间对象、字符串对象)

    1.对象简介 在javaScipt中,一切皆为对象或者皆可以被用作对象 宿主对象:window,document 内置对象:Number  String  Boolean  Array数组  Obje ...

  7. Android开发——xml知识之xml可绘制对象简介

    引言:摘录Android用户界面设计 Android支持各类xml可绘制对象,其中一些可绘制对象可用于实现让一个资源使用多个图片文件,另外一些则允许你在xml中真正地指定颜色,还有一些你从来都不会用到 ...

  8. ADO.NET 核心对象简介

    ADO.NET是.NET中一组用于和数据源进行交互的面向对象类库,提供了数据访问的高层接口. ADO.NOT类库在System.Data命名空间内,根据我们访问的不同数据库选择命名空间,System. ...

  9. C#-WebForm-★内置对象简介★Request-获取请求对象、Response相应请求对象、Session全局变量(私有)、Cookie全局变量(私有)、Application全局公共变量、ViewState

    内置对象: 1.Request - 获取请求对象 用法:接收传值 protected void Page_Load(object sender, EventArgs e) { TextBox1.Tex ...

随机推荐

  1. MNIST数据集上卷积神经网络的简单实现(使用PyTorch)

    设计的CNN模型包括一个输入层,输入的是MNIST数据集中28*28*1的灰度图 两个卷积层, 第一层卷积层使用6个3*3的kernel进行filter,步长为1,填充1.这样得到的尺寸是(28+1* ...

  2. E07【餐厅】What would you recommend?

    核心句型 What would you recommend? 你有什么推荐吗? 场景对话: A:What do  you  want  to  eat? 你想吃点什么? B:I don't know. ...

  3. Python 函数小程序初解

    目录 作业 ==程序代码自上往下运行,建议自上而下的完成下列任务== 作业 文件a.txt内容:每一行内容分别为商品名字,价钱,个数,求出本次购物花费的总钱数 sum = 0 f = open('a. ...

  4. day16_7.18 常用模块

    一.collections collections模块中提供了除了dict,list,str等数据类型之外的其他数据类型:Counter.deque.defaultdict.namedtuple和Or ...

  5. djang小项目过程中的小问题 01(django中的configrarion配置、django自带命名规范)

    不知道为什么,明明照着做,但是我就会遇到一些错误问题,但是我觉着自己生下来就是解决问题的. ##1. 第一个是在django运行时,没有配置configration, 这个时候我添加一个django ...

  6. DRL强化学习:

    IT博客网 热点推荐 推荐博客 编程语言 数据库 前端 IT博客网 > 域名隐私保护 免费 DRL前沿之:Hierarchical Deep Reinforcement Learning 来源: ...

  7. [LeetCode] 344. Reverse String 翻转字符串

    Write a function that reverses a string. The input string is given as an array of characters char[]. ...

  8. Intellij IDEA通过Plugins导入vue.js

    最近再写vue.js的程序,刚开始使用Intellij IDEA没有导入插件,结果所有vue文件都是文本方式显示,无法使用开发工具的辅助功能,导入vue.js插件后即可. 路径是Setting-> ...

  9. find square root

    public class Solution { public static void main(String[] args) { Scanner ip = new Scanner(System.in) ...

  10. tomcat 指定(自定义)JDK路径的两种方式

      1.情景展示 tomcat7使用jdk1.7:tomcat8使用jdk1.8.两个tomcat在一台机器下同时启动,你会发现这两个tomcat使用的是一个版本的jdk, 那就是你配置过的JAVA_ ...