Documentation
¶
Index ¶
- Constants
- Variables
- func DefaultLogger() *log.Logger
- type ComponentRegistry
- type ComponentType
- type Config
- type Configuration
- type DataType
- type JsEngine
- type Logger
- type Metadata
- type Node
- type NodeCtx
- type Option
- func WithComponentsRegistry(componentsRegistry ComponentRegistry) Option
- func WithDefaultPool() Option
- func WithJsMaxExecutionTime(jsMaxExecutionTime time.Duration) Option
- func WithLogger(logger Logger) Option
- func WithOnDebug(...) Option
- func WithOnEnd(onEnd func(msg RuleMsg, err error)) Option
- func WithParser(parser Parser) Option
- func WithPool(pool Pool) Option
- type Parser
- type PluginRegistry
- type Pool
- type RuleContext
- type RuleContextOption
- type RuleMsg
- type RuleNodeId
- type RuleNodeRelation
- type SafeComponentSlice
Constants ¶
const ( JSON = DataType("JSON") TEXT = DataType("TEXT") BINARY = DataType("BINARY") )
const ( MsgKey = "msg" MetadataKey = "metadata" MsgTypeKey = "msgType" )
const ( Success = "Success" Failure = "Failure" True = "True" False = "False" )
关系 节点与节点连接的关系,以下是常用的关系,可以自定义 relation types
const ( In = "IN" Out = "OUT" )
flow direction type 流向 消息流入、流出节点方向
Variables ¶
var EmptyRuleNodeId = RuleNodeId{}
EmptyRuleNodeId 空节点ID
Functions ¶
func DefaultLogger ¶
DefaultLogger returns a `Logger` implementation
Types ¶
type ComponentRegistry ¶
type ComponentRegistry interface { //Register 注册组件,如果`node.Type()`已经存在则返回一个`已存在`错误 Register(node Node) error //RegisterPlugin 通过plugin机制加载外部.so文件注册组件, //如果`name`已经存在或者插件提供的组件列表`node.Type()`已经存在则返回一个`已存在`错误 RegisterPlugin(name string, file string) error //Unregister 删除组件或者通过插件名称删除一批组件 Unregister(componentType string) error //NewNode 通过nodeType创建一个新的node实例 NewNode(nodeType string) (Node, error) //GetComponents 获取所有组件列表 GetComponents() map[string]Node }
ComponentRegistry 节点组件注册器
type ComponentType ¶
type ComponentType int
ComponentType 组件类型:规则节点或者子规则链
const ( NODE ComponentType = iota CHAIN )
type Config ¶
type Config struct { //OnDebug 节点调试信息回调函数,只有节点debugMode=true才会调用 OnDebug func(flowType string, nodeId string, msg RuleMsg, relationType string, err error) //OnEnd 规则链执行完成回调函数,如果有多个结束点,则执行多次 OnEnd func(msg RuleMsg, err error) //JsMaxExecutionTime js脚本执行超时时间,默认2000毫秒 JsMaxExecutionTime time.Duration //Pool 协程池接口 //如果不配置,则使用 go func 方式 //默认使用`pool.WorkerPool`。兼容ants协程池,可以使用ants协程池实现 //例如: // pool, _ := ants.NewPool(math.MaxInt32) // config := rulego.NewConfig(types.WithPool(pool)) Pool Pool //ComponentsRegistry 组件库 //默认使用`rulego.Registry` ComponentsRegistry ComponentRegistry //规则链解析接口,默认使用:`rulego.JsonParser` Parser Parser //Logger 日志记录接口,默认使用:`DefaultLogger()` Logger Logger }
Config 规则引擎配置
type Configuration ¶
type Configuration map[string]interface{}
Configuration 组件配置类型
func (Configuration) GetToString ¶
func (c Configuration) GetToString(key string) string
type JsEngine ¶
type JsEngine interface { //Execute 执行js脚本指定函数,js脚本在JsEngine实例化的时候进行初始化 //functionName 执行的函数名 //argumentList 函数参数列表 Execute(functionName string, argumentList ...interface{}) (interface{}, error) //Stop 释放js引擎资源 Stop() }
JsEngine JavaScript脚本引擎
type Metadata ¶
type Metadata struct {
// contains filtered or unexported fields
}
Metadata 规则引擎消息元数据
func BuildMetadata ¶
BuildMetadata 通过map,创建一个新的规则引擎消息元数据实例
type Node ¶
type Node interface { //New 创建一个组件新实例 New() Node //Type 组件类型,类型不能重复。 //用于规则链,node.type配置,初始化对应的组件 //建议使用`/`区分命名空间,防止冲突。例如:lala/httpClient Type() string //Init 组件初始化 Init(ruleConfig Config, configuration Configuration) error //OnMsg 处理消息 //ctx:规则引擎处理消息上下文 //msg:消息 OnMsg(ctx RuleContext, msg RuleMsg) error //Destroy 销毁 Destroy() }
Node 规则引擎节点组件接口 把业务封或者常用工具装成组件,然后通过规则链配置方式调用该组件 实现方式参考`components`包 然后注册到`RuleGo`默认注册器 rulego.Registry.Register(&MyNode{})
type NodeCtx ¶
type NodeCtx interface { Node //IsDebugMode 该节点是否是调试模式 //True:消息流入和流出该节点,会调用config.OnDebug回调函数,否则不会 IsDebugMode() bool //GetNodeId 获取组件ID GetNodeId() RuleNodeId //ReloadSelf 刷新该组件配置 ReloadSelf(def []byte) error //ReloadChild //如果是子规则链类型,则刷新该子规则链指定ID组件配置 //如果是节点类型,则不支持该方法 ReloadChild(nodeId RuleNodeId, def []byte) error //GetNodeById //如果是子规则链类型,则获取该子规则链指定ID组件配置 //如果是节点类型,则不支持该方法 GetNodeById(nodeId RuleNodeId) (NodeCtx, bool) //DSL 返回该节点配置DSL DSL() []byte }
NodeCtx 规则节点实例化上下文
type Option ¶
Option is a function type that modifies the Config.
func WithComponentsRegistry ¶
func WithComponentsRegistry(componentsRegistry ComponentRegistry) Option
WithComponentsRegistry is an option that sets the components registry of the Config.
func WithDefaultPool ¶
func WithDefaultPool() Option
func WithJsMaxExecutionTime ¶
WithJsMaxExecutionTime is an option that sets the js max execution time of the Config.
func WithLogger ¶
WithLogger is an option that sets the logger of the Config.
func WithOnDebug ¶
func WithOnDebug(onDebug func(flowType string, nodeId string, msg RuleMsg, relationType string, err error)) Option
WithOnDebug is an option that sets the on debug callback of the Config.
func WithParser ¶
WithParser is an option that sets the parser of the Config.
type Parser ¶
type Parser interface { // DecodeRuleChain 从描述文件解析规则链结构体 //parses a chain from an input source. DecodeRuleChain(config Config, dsl []byte) (Node, error) // DecodeRuleNode 从描述文件解析规则节点结构体 //parses a node from an input source. DecodeRuleNode(config Config, dsl []byte) (Node, error) //EncodeRuleChain 把规则链结构体转换成描述文件 EncodeRuleChain(def interface{}) ([]byte, error) //EncodeRuleNode 把规则节点结构体转换成描述文件 EncodeRuleNode(def interface{}) ([]byte, error) }
Parser 规则链定义文件DSL解析器 默认使用json方式,如果使用其他方式定义规则链,可以实现该接口 然后通过该方式注册到规则引擎中:`rulego.NewConfig(WithParser(&MyParser{})`
type PluginRegistry ¶
PluginRegistry go plugin 方式提供节点组件接口 示例: package main var Plugins MyPlugins// plugin entry point type MyPlugins struct{}
func (p *MyPlugins) Init() error { return nil } func (p *MyPlugins) Components() []types.Node { return []types.Node{&UpperNode{}, &TimeNode{}, &FilterNode{}}//一个插件可以提供多个组件 }
go build -buildmode=plugin -o plugin.so plugin.go # 编译插件,生成plugin.so文件 rulego.Registry.RegisterPlugin("test", "./plugin.so")//注册到RuleGo默认注册器9
type Pool ¶
type Pool interface { //Submit 往协程池提交一个任务 //如果协程池满返回错误 Submit(task func()) error //Release 释放 Release() }
Pool 协程池
func DefaultPool ¶
func DefaultPool() Pool
type RuleContext ¶
type RuleContext interface { //TellSuccess 通知规则引擎处理当前消息处理成功,并把消息通过`Success`关系发送到下一个节点 TellSuccess(msg RuleMsg) //TellFailure 通知规则引擎处理当前消息处理失败,并把消息通过`Failure`关系发送到下一个节点 TellFailure(msg RuleMsg, err error) //TellNext 使用指定的relationTypes,发送消息到下一个节点 //Send the message to the next node TellNext(msg RuleMsg, relationTypes ...string) //TellSelf 以指定的延迟(毫秒)向当前规则节点发送消息。 TellSelf(msg RuleMsg, delayMs int64) //NewMsg 创建新的消息实例 NewMsg(msgType string, metaData Metadata, data string) RuleMsg //GetSelfId 获取当前节点ID GetSelfId() string //Config 获取规则引擎配置 Config() Config //SubmitTack 异步执行任务 SubmitTack(task func()) //SetEndFunc 设置当前消息处理结束回调函数 SetEndFunc(f func(msg RuleMsg, err error)) RuleContext //GetEndFunc 获取当前消息处理结束回调函数 GetEndFunc() func(msg RuleMsg, err error) //SetContext 设置用于不同组件实例共享信号量或者数据的上下文 SetContext(c context.Context) RuleContext //GetContext 获取用于不同组件实例共享信号量或者数据的上下文 GetContext() context.Context }
RuleContext 规则引擎消息处理上下文接口 处理把消息流转到下一个或者多个节点逻辑 根据规则链连接关系查找当前节点的下一个或者多个节点,然后调用对应节点:nextNode.OnMsg(ctx, msg)触发下一个节点的业务逻辑 另外处理节点OnDebug和OnEnd回调逻辑
type RuleContextOption ¶
type RuleContextOption func(RuleContext)
RuleContextOption 修改RuleContext选项的函数
func WithContext ¶
func WithContext(c context.Context) RuleContextOption
func WithEndFunc ¶
func WithEndFunc(endFunc func(msg RuleMsg, err error)) RuleContextOption
type RuleMsg ¶
type RuleMsg struct { // 消息时间戳 Ts int64 `json:"ts"` // 消息ID,同一条消息再规则引擎流转,整个过程是唯一的 Id string `json:"id"` //数据类型 DataType DataType `json:"dataType"` //消息类型,规则引擎分发数据的重要字段 //一般把消息交给规则引擎处理`ruleEngine.OnMsg(msg)`,需要把消息分类并指定其Type //例如:POST_TELEMETRY、ACTIVITY_EVENT、INACTIVITY_EVENT、CONNECT_EVENT、DISCONNECT_EVENT //ENTITY_CREATED、ENTITY_UPDATED、ENTITY_DELETED、DEVICE_ALARM、POST_DEVICE_DATA Type string `json:"type"` //消息内容 Data string `json:"data"` //消息元数据 Metadata Metadata }
RuleMsg 规则引擎消息
type RuleNodeId ¶
type RuleNodeId struct { //节点ID Id string //节点类型,节点/子规则链 Type ComponentType }
RuleNodeId 组件ID类型定义
type RuleNodeRelation ¶
type RuleNodeRelation struct { //入组件ID InId RuleNodeId //出组件ID OutId RuleNodeId //关系 如:True、False、Success、Failure 或者其他自定义关系 RelationType string }
RuleNodeRelation 节点与节点之间关系
type SafeComponentSlice ¶
SafeComponentSlice 安全的组件列表切片
func (*SafeComponentSlice) Components ¶
func (p *SafeComponentSlice) Components() []Node
Components 获取组件列表