# 《高性能Polaris网关》通用模型-第09节:网关上下文属性顶层接口与抽象类设计

作者:冰河
星球:http://m6z.cn/6aeFbs (opens new window)
博客:https://binghe.gitcode.host (opens new window)
文章汇总:https://binghe.gitcode.host/md/all/all.html (opens new window)
源码获取地址:https://t.zsxq.com/0dhvFs5oR (opens new window)

沉淀,成长,突破,帮助他人,成就自我。

  • 本章难度:★★☆☆☆
  • 本节重点:对高性能Polaris网关的上下文属性的顶层接口和抽象类进行设计,从全局角度掌握高性能Polaris网关上下文属性顶层接口和抽象类的设计。重点掌握整体调用链路的设计思路和设计方法,并能够将其灵活应用到自身实际项目中。

大家好,我是冰河~~

在网关的整体设计中,上下文可以说是网关的重要组成部分,通过上下文,可以获取到网关在处理请求和响应时的各种状态,也能够获取和透传各种数据。在设计网关的上下文中,为了更好的提升网关的可扩展性。在上下文的整体设计中,单独对上下文的属性进行了详细的设计。

# 一、前言

在前面的文章中,已经对高性能Polaris网关的请求与响应模型的顶层接口和实现进行了设计,对调用链路的顶层接口与抽象类模型进行了设计和实现,随后,又对网关服务的定义与实例模型和服务配置的缓存接口与实现类进行了设计。接下来,从网关上下文的角度,对网关上下文的顶层接口和抽象类进行设计。

# 二、本节诉求

对高性能Polaris网关的上下文属性的顶层接口和抽象类进行设计,从全局角度掌握高性能Polaris网关上下文属性顶层接口和抽象类的设计。重点掌握整体调用链路的设计思路和设计方法,并能够将其灵活应用到自身实际项目中。

# 三、类结构设计

为了在保证网关高性能的同时,进一步提升网关的可扩展性,对网关的上下文属性进行设计。上下文属性的顶层接口和抽象类的类图如图9-1所示。


在网关的属性接口设计上,主要设计了PolarisKey接口和AttributeKey抽象类,其中,PolarisKey是顶层接口,AttributeKey是实现了PolarisKey的抽象类。两个接口中定义的方法含义如下所示。

(1)PolarisKey接口

  • cast()方法:将Object类型的对象转换成指定的泛型类型。

(2)AttributeKey抽象类

  • valueOf()方法:根据转入的名称返回AttributeKey对象。
  • NAMED_ATTRIBUTE常量:存储自定义名称与AttributeKey的映射关系。
  • HTTP_INVOKER常量:与HttpInvoker对象对应的AttributeKey属性。
  • RPC_INVOKER常量:与RpcInvoker对象对应的AttributeKey属性。
  • WEBSOCKET_INVOKER常量:与WebSocketInvoker对象对应的AttributeKey属性。
  • MATCH_INSTANCES常量:缓存匹配到的所有服务实例列表,主要用于负载均衡。
  • LOAD_INSTANCE常量:通过负载均衡后获取到的服务实例
  • ATTACHMENT常量:获取透传的参数。
  • create()方法:创建AttributeKey方法。
  • getAttributeKey()方法:获取指定名称的AttributeKey对象。

# 四、编码实现

接下来,就对网关上下文属性顶层接口进行编码实现。

# 查看完整文章

加入冰河技术 (opens new window)知识星球,解锁完整技术文章、小册、视频与完整代码