三、 网关
1. Apache APISIX
1) 背景
Apache Dubbo是由阿里巴巴开源并捐赠给Apache的微服务开发框架,它提供了RPC通信与微服务治理两大关键能力。不仅经过了阿里电商场景中海量流量的验证,也在国内的技术公司中被广泛落地。
在实际应用场景中,Apache Dubbo一般会作为后端系统间RPC调用的实现框架,当需要提供HTTP接口给到前端时,会通过一个「胶水层」将Dubbo Service包装成HTTP接口,再交付到前端系统。
Apache APISIX是Apache软件基金会的顶级开源项目,也是当前最活跃的开源网关项目。作为一个动态、实时、高性能的开源API网关,Apache APISIX提供了负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。
得益于Apache Dubbo的应用场景优势,Apache APISIX基于开源项目tengine/mod_dubbo模块为Apache Dubbo服务配备了HTTP网关能力。通过dubbo-proxy插件,可以轻松地将Dubbo Service发布为HTTP服务。
2) 如何使用
a) 入门篇:安装使用
注:
这里我们建议使用 Apache APISIX 2.11版本镜像进行安装。该版本的APISIX-Base中已默认编译了Dubbo模块,可直接使用dubbo-proxy插件。
在接下来的操作中,我们将使用dubbo-samples项目进行部分展示。该项目是一些使用Apache Dubbo实现的Demo应用,本文中我们采用其中的一个子模块作为Dubbo Provider。
在进入正式操作前,我们先简单看下Dubbo接口的定义、配置以及相关实现。
接口实现一览
如上所示,Dubbo接口的定义是固定的。即方法参数中Map表示APISIX传递给Dubbo Provider关于HTTP request的一些信息(如:header、body...)。而方法返回值的Map表示Dubbo Provider传递给APISIX要如何返回HTTP response的一些信息。
接口信息配置好之后可通过XML配置方式发布DemoService。
通过上述配置后,Consumer可通过org.apache.dubbo.samples.apisix.DemoService访问其中的apisixDubbo方法。具体接口实现如下:
上述代码中,DemoServiceImpl会打印接收到的httpRequestContext,并通过返回包含有指定Key的Map对象去描述该Dubbo请求的HTTP响应。
操作步骤
• 启动dubbo-samples。
• 在config.yaml文件中进行dubbo-proxy插件启用。
• 创建指向Dubbo Provider的Upstream。
• 为DemoService暴露一个HTTP路由。
• 使用curl命令请求Apache APISIX,并查看返回结果。
注:
上述代码返回中包含了test:123 Header,以及dubbo success字符串作为Body体。这与我们在DemoServiceImpl编码的预期效果一致。
• 查看Dubbo Provider的日志。
注:
通过httpRequestContext可以拿到HTTP请求的Header和Body。其中Header会作为Map元素,而Body中Key值是固定的字符串“body”,Value则代表Byte数组。
《Apache Dubbo微服务开发从入门到精通》——服务治理与生态——三、 网关(2) :https://developer.aliyun.com/article/1223992