通过阅读 MOSN 源码解析 - Plugin 机制,知道了 MOSN
的插件机制,具体如何运行起来 examples/codes/plugin/pluginfilter
呢?
- 本文基于 commit id: 50c777ff,把示例插件加入到
MOSN
中。
原理
阅读文档可以知道主要是 MOSN
内部加载的 client
去调用 server
,其中 client
是通过
源码:
func init() {
api.RegisterStream("pluginfilter", CreatePluginFilterFactory)
}
来注册的,server
则是通过
func Register(name string, config *Config) (*Client, error)
来初始化客户端的。
修改代码
client
加入到 MOSN
通过查看代码,可以很容易发现 client
注册的时候实现如下接口
type StreamFilterChainFactory interface {
CreateFilterChain(context context.Context, callbacks StreamFilterChainFactoryCallbacks)
}
在 CreateFileChain
里面调用 Register
来初始化 client
。
once.Do(func() {
var err error
// pluginfilter 是插件名称,和下面编译插件对应
client, err = plugin.Register("pluginfilter", nil)
if err != nil {
log.DefaultLogger.Errorf("plugin