Apache APISIX 3.2.0 LTS 正式发布!
APISIX 3.2.0 是 3.0 大版本以来的第一个 LTS 版本。此次发版,是 3.x 时代更替 2.x 时代的一大里程碑。从此之后,新的一系列 patch 版本将会在 3.2 的基础上发布。本次发布一如往常一样带来了许多新的插件和特性,为 APISIX 的使用者带来不一样的新玩法。
新特性:四层上的服务发现
只有少数网关支持服务发现,APISIX 就是其中之一。在 3.2.0 版本中,APISIX 把原来七层上的服务发现的功能也做到了四层上。这样一来,将 APISIX 作为 TCP/UDP 代理时也能享受到服务发现带来的便利性。和在七层上的服务发现一样,要想用上服务发现,我们需要先在 config.yaml
中配置服务发现服务器的地址:
discovery: nacos: host: - "http://192.168.33.1:8848"
然后在具体的 upstream 上配置 discovery_type
和 service_name
:
$ curl http://127.0.0.1:9180/apisix/admin/stream_routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -i -d ' { "remote_addr": "127.0.0.1", "upstream": { "scheme": "tcp", "discovery_type": "nacos", "service_name": "APISIX-NACOS", "type": "roundrobin" } }'
这样访问 stream_routes 时,上游的节点会从 Nacos 的 APISIX-NACOS 服务中获取。
新插件:RESTful 请求转 GraphQL
在 3.2 版本中,APISIX 新增了一个能将 RESTful 请求转成 GraphQL 的插件。假如你有这样的 GraphQL 查询语句:
query($name: String!, $githubAccount: String!) { persons(filter: { name: $name, githubAccount: $githubAccount }) { id name blog githubAccount talks { id title } } }
其中 $name
和 $githubAccount
是两个 GraphQL 变量。
我们可以用如下的配置来暴露出同样的 RESTful 接口:
curl --location --request PUT 'http://localhost:9180/apisix/admin/routes/1' \\ --header 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' \\ --header 'Content-Type: application/json' \\ --data-raw '{ "uri": "/graphql", "upstream": { "type": "roundrobin", "nodes": { "127.0.0.1:8080": 1 } }, "plugins": { "degraphql": { "query": "query($name: String!, $githubAccount: String!) {\\n persons(filter: { name: $name, githubAccount: $githubAccount }) {\\n id\\n name\\n blog\\n githubAccount\\n talks {\\n id\\n title\\n }\\n }\\n}", "variables": [ "name", "githubAccount" ] } } }'
这里 query
是我们要用到的查询语句,variables
是事先声明的变量列表。
接下来就能像 RESTful 接口一样访问它:
curl --location --request POST 'http://localhost:9080/graphql' \\ --header 'Content-Type: application/json' \\ --data-raw '{ "name": "Niek", "githubAccount": "npalm" }'
结果跟直接用对应的 GraphQL 语句访问上游是一样的:
{ "data": { "persons": [ { "id": "7", "name": "Niek", "blog": "https://040code.github.io", "githubAccount": "npalm", "talks": [ { "id": "19", "title": "GraphQL - The Next API Language" }, { "id": "20", "title": "Immutable Infrastructure" } ] } ] } }
你同样能用 GET 请求来访问同样的接口,这时候参数就需要通过 query string 来传递:
curl 'http://localhost:9080/graphql?name=Niek&githubAccount=npalm'
新特性:支持在每个日志插件上设置日志格式
在 3.2 版本,我们整理了 APISIX 现有的十多个 access 日志插件。现在每个插件都支持配置自定义日志格式:
- 在该插件的 plugin metadata 中定义全局的日志格式
- 在具体的路由规则上的该插件的配置中定义当前路由的日志格式
以 clickhouse-logger
为例,下面是定义全局日志格式的做法:
curl http://127.0.0.1:9180/apisix/admin/plugin_metadata/clickhouse-logger \\ -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "log_format": { "host": "$host", "@timestamp": "$time_iso8601", "client_ip": "$remote_addr" } }'
下面则是当前路由的日志格式:
curl http://127.0.0.1:9180/apisix/admin/routes/1 \\ -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "plugins": { "clickhouse-logger": { "log_format": { "host": "$host", "@timestamp": "$time_iso8601", "client_ip": "$remote_addr" }, "user": "default", "password": "a", "database": "default", "logtable": "test", "endpoint_addrs": ["http://127.0.0.1:8123"] } }, "upstream": { "type": "roundrobin", "nodes": { "127.0.0.1:1980": 1 } }, "uri": "/hello" }'
新插件:请求体/响应体转换
你是否在为如何把返回 XML 的古早上游服务介绍给只接受 JSON 的现代客户端而苦恼?3.2.0 版本新增的 body-transformer
插件开源解决这个问题。
body-transformer
插件支持 JSON 和 XML 之间的互相转换。不过这并非是它唯一能做的事。它还支持通过模板配置输入输出的内容的具体格式。举个例子,
假设你有下面的 JSON 模板:{"foo":"{{name .. " world"}}","bar":{{age+10}}}
,并把它配置到 body-transformer
插件的 request.template
字段中:
... "body-transformer": { "request": { "template": "..." } } ...
那么当请求内容为 {"name":"hello","age":20}
,发送给上游的是改写之后的 {"foo":"hello world","bar":30}
。我们采用了 lua-resty-template
来渲染模板,所以你可以在模板中嵌入 Lua 表达式来实现改写逻辑。
对上游输出的改写也是类似的,只是需要配置的是插件的 response.template
字段。
新功能:优化和更多的小功能
除了上面提到的几个大的功能外,此次发布也包含许多值得述说的改动:
error-log-logger
插件支持发送错误日志到 Kafkalimit-count
插件支持返回X-RateLimit-Reset
响应头
等等。
如果你对完整的内容感兴趣,请参考 3.2 发布的 CHANGELOG:https://github.com/apache/apisix/blob/release/3.2/docs/zh/latest/CHANGELOG.md#320

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
LiteFlow 大版本更新,国产超好用的规则引擎,荣耀征途,才刚刚启航
LiteFlow介绍 LiteFlow是一个开源编排式规则引擎,能够让你的系统逻辑任意编排,可选用脚本书写逻辑,支持多达5种脚本语言,支持丰富的第三方存储的支持,所有的逻辑和规则均可热变更。设计系统和重构系统的神器。 LiteFlow是国内优秀的社区驱动型开源项目,开源2年多,目前已经被各大公司应用在核心系统上。特性以及支持度都非常好。 如果你是第一次知道这个项目,可以去官网或相关的主页进行了解: 项目官网: https://liteflow.yomahub.com gitee托管仓库: https://gitee.com/dromara/liteFlow github托管仓库: https://github.com/dromara/liteflow v2.10.0介绍 距离上一个版本2.9.7已经有一个月的时间了。这次我们带来了大版本升级:LiteFlow v2.10.0。 这期间其实没一直在忙LiteFlow,中间断断续续的在做。 本来想把这个版本定为2.9.8的,但是从新增的特性来说,的确是进步非常大的一个版本。所以我们索性把这个版本定位成了大版本升级。不过请放心,2.10.0是...
- 下一篇
一站式微服务治理中台,Water v2.10.2 发布
Water(水孕育万物...) Water 为项目开发、服务治理,提供一站式解决方案(可以理解为微服务架构支持套件)。基于 Solon 框架开发,并支持完整的 Solon Cloud 规范;已在生产环境奔跑了5年。对中小型项目而言,有它便有一切。 功能相当于:consul + rabbitmq + elk + prometheus + openFaas + quartz + 等等,并有机结合在一起。 或者约等于:nacos + rocketmq + PlumeLog + prometheus + magic-api + xxl-job + 等。 对 k8s 友好,支持 ip 漂移、支持 k8s service 映射(通过上游配置,可直接将服务发现为 k8s service 地址)。 本次更新 增加 ak/sk 元信息字段及编辑能力;支持自定义提示配置 增强 faas groovy 脚本执行器能力 solon 升级为: 2.2.5,代码仓库:https://gitee.com/noear/solon snack3 升级为:3.2.61,代码仓库:https://gitee.com/noe...
相关文章
文章评论
共有0条评论来说两句吧...