RpcContext:试一次请求的零时的上下文记录器,内部的实现是一个 ThreadLocal,我们看一下内部实现
private static final ThreadLocal<RpcContext> LOCAL = new ThreadLocal<RpcContext>() {
@Override
protected RpcContext initialValue() {
return new RpcContext();
}
};
在之前的Filter文章中,其实有提到过这个,在ConsumerContextFilter中,我们会创建RpcContext并且初始化一些数据,然后在后续的业务中我们可以给RpcContext里面添加attachments属性,进行属性的传递,在ContextFilter中接收设置的attachments属性值。
我们看一下ConsumerContextFilter:初始化了RpcContext并且设置了一些参数的值
RpcContext.getContext()
.setInvoker(invoker)
.setInvocation(invocation)
.setLocalAddress(NetUtils.getLocalHost(), 0)
.setRemoteAddress(invoker.getUrl().getHost(),
invoker.getUrl().getPort());
这个时候我们在业务里面就可