文件结构
插件/random
导包:context,api,rand,time
结构:randomSource:interval seed pattern cancel
方法:Configure(主题名,连接信息的配置文件)
利用配置文件初始化对象的interval,pattern,seed
方法:Open(api.StreamComtext, api.consumefunc, api.error)//线程,方法,异常
每隔interval毫秒触发一次,pattern字典的值加上一个0~seed的随机数,得到一个新的字典,
然后调用consume()方法
如果接收到ctx对象的done方法,会停止
方法:Close(api.StreamComtext)//线程
如果s对象的cancel方法不为空,会调用cancel方法
mqtt_source
导包:
结构:MQTTSoruce{srv, tpc, clientid, pVersion, uName, password, certPath, pkeyPath
schema, conn}
方法:WithSchema(schema) MQTTsource
返回对象自身
方法:Config(主题,配置文件)
把配置文件字典转换为一个MQTTConfig对象cfg
初始化MQTTSoruce:tpc=topic;srv=vag.servers[0];cliente.id=;pversion=;
uName, password, certPath,pkeyPath
方法:open(api.StreamComtext, api.consumefunc, api.error)//线程,方法,异常
方法:Close()
结构:MQTTConfig{Qos, sharedsubscription, servers, cliendid, PVersion Uname, Password, Certification, PrivateKPath
extension/source.md 翻译:
kuiper支持修改mqtt源,此外,也支持接收各种外部系统的数据。
开发源流程:
1.设置插件开发环境:(overview.md)
插件必须实现kuiper导出的接口,因此kuiper项目必须位于gopath
插件和kuiper放在同一项目中,进行设置:
克隆kuiper项目
再plugins/sources中创建插件实现文本
build到同一文件夹中
开发源,必须实现config方法,此方法的参数包括:主题,配置文件(主机,端口,用户等信息),用于初始化源
主要任务,实现open方法:持续地从外部系统接收数据,发送给消费通道(consumer channel).
后者接收 SourceTuple接口类型的数据(包括一个信息体的字典,一个可选元数据的字典)
通常使用api.NewDefaultSourceTuple(message, meta)创建SourceTuple类型数据,meta可以是任何值得记录的东西
open方法的第一个参数是StreamContext指针,可以从中检索上下文信息,logger,侦听done()通道准备结束
测试日志
为kuiper扩展resource包括编写.go文本文件,配置为插件两步,先直接使用自带的random.go,省去了第一步编写程序的麻烦。
random.go
中用到的结构的定义:
......
type randomSource struct {
interval int
seed int
pattern map[string]interface{}
cancel context.CancelFunc
}
......
用到的配置文件:kuiper/etc/source/random.yaml
内容:
default:
interval: 1000
pattern:
count: 50
ext:
interval: 300
seed: 1
pattern:
count: 50
上面两个文件是已经存在了的.
准备工作
ubuntu系统;kuiper使用正常;安装了go语言环境;用go get 指令获取了github.com/emqx/kuiper包,放在gopath下。
开始测试
编译成.so文件
random.go位于$gopath/src/github.com/emqx/kuiper/plugins/sources
下,在$gopath/src/github.com/emqx/kuiper/
目录下启动终端,输入如下指令:
go build --buildmode=plugin -o plugins/sources/Random.so plugins/sources/random.go
几分钟后,在同文件夹下生成Random.so文件
移动
kuiper安装在/usr/local/kuiper
目录下,用移动指令,将Random.so复制到/usr/local/kuiper/plugins/source
下。
定义stream
- 启动kuiper
bin/server
- 定义stream
不知道如何定义stream,应该是根据random.go
和kuiper/etc/source/random.yaml
确定,但是不会写
//不会写
bin/cli create stream demorandom '()WITH (FORMAT="JSON", DATASOURCE="topic")'
- 查询有效消息
//不会写
bin/cli query
下面这一步和定义stream有关,不知道如何查询
//不会写
sql代码
- 给kuipr发送消息
里和定义stream那一步有关联,不知道如何发送消息,还是说消息是随机产生,不用发送?