为什么是 Go
Apache APISIX 允许用户通过插件的方式来拓展功能,如鉴权、限流、请求改写等核心功能都是通过插件的方式实现的。虽然 Apache APISIX 核心代码是使用 Lua 编写的,但是 Apache APISIX 支持多语言开发插件,比如 Go 、Java。
这篇文章将详细讲解如何用 Go 来开发 Apache APISIX 插件。通过拥抱 Go 的生态圈,为 Apache APISIX 开创一片新天地,希望 Go 能让 Apache APISIX 如虎添翼!
安装
采用库的方式来使用 Go Runner,apisix-go-plugin-runner 中的 cmd/go-runner
官方给出的例子,展示该如何使用 Go Runner SDK。未来也会支持通过 Go Plugin 的机制加载预先编译好的插件。
开发
使用 Go Runner SDK 进行开发
$ tree cmd/go-runner
cmd/go-runner
├── main.go
├── main_test.go
├── plugins
│ ├── say.go
│ └── say_test.go
└── version.go
上面是官方示例的目录结构。main.go
是入口,其中最关键的部分在于:
cfg := runner.RunnerConfig{}
...
runner.Run(cfg)
RunnerConfig
可以用来控制日志等级和日志输出位置。
runner.Run
会让应用监听目标位置,接收请求并执行注册好的插件。应用会一直处于这一状态直到退出。
打开 plugins/say.go
:
func init() {
err := plugin.RegisterPlugin(&Say{})
if err != nil {
log.Fatalf("failed to register plugin say: %s", err)
}
}
由于 main.go
导入了 plugins 包,
import (
...
_ "github.com/apache/apisix-go-plugin-runner/c