Ribbon架构解析之IClient请求客户端

IClient Ribbon发送请求的抽象接口,我们先来看看接口定义
在这里插入图片描述
传入一个 ClientRequest 和 一个 IClientConfig 返回一个 IResponse很简单.
再来看看UML
在这里插入图片描述
ClientRequest
表示适用于所有通信协议的通用客户端请求对象。该对象是immutable不可变的。

public class ClientRequest implements Cloneable {

	// 请求的URI
    protected URI uri;
    protected Object loadBalancerKey = null;
    // 是否是可重试。true:该请求可重试   false:该请求不可重试
    protected Boolean isRetriable = null;
    // 外部传进来的配置,可以覆盖内置的IClientConfig配置哦
    protected IClientConfig overrideConfig;
    
	... // 省略各种构造器
	... // 生路各种get方法。注意:没有set方法,因为该实例不可变

	// 判断该请求是否可以重试(重要)
    public boolean isRetriable() {
        return (Boolean.TRUE.equals(isRetriable));
    }
    
    ...
	
	// 使用新的URI创建一个**新的**ClientRequest
	// 它会先用clone方法去克隆一个,若抛错那就new ClientRequest(this) new一个实例
	// 推荐子类复写此方法,提供更多、更有效的实施。
    public ClientRequest replaceUri(URI newURI) {
        ClientRequest req;
        try {
            req = (ClientRequest) this.clone();
        } catch (CloneNotSupportedException e) {
            req = new ClientRequest(this);
        }
        req.uri = newURI;
        return req;
    }
}

我们看看 ClientRequest UML 图
在这里插入图片描述
IResponse

public interface IResponse extends Closeable {

	// 从响应中获得实体。若是Http协议,那就是Body体
	// 因为和协议无关,所以这里只能取名叫Payload
	public Object getPayload() throws ClientException;
	public boolean hasPayload();
	
	// 如果认为响应成功,则为真,例如,http协议的200个响应代码。
	public boolean isSuccess();
	public URI getRequestedURI();
	// 响应头们
	public Map<String, ?> getHeaders();  
}

在这里插入图片描述

最简单的demo
  1. IResponse
    在这里插入图片描述
  2. IClient
    在这里插入图片描述
  3. 测试
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值