RuleGo RuleGo
🏠首页
  • 快速入门
  • 规则链
  • 标准组件
  • 扩展组件
  • 自定义组件
  • 可视化
  • RuleGo-Server
  • RuleGo-MCP-Server
  • AOP
  • 触发器
  • 高级主题
  • 性能
  • 标准组件
  • 扩展组件
  • 自定义组件
  • 组件市场
  • 概述
  • 快速入门
  • 路由
  • DSL
  • API
  • Options
  • 组件
🔥编辑器 (opens new window)
  • 可视化编辑器 (opens new window)
  • RuleGo-Server (opens new window)
  • ❓问答

    • FAQ
💖支持
👥加入社区
  • Github (opens new window)
  • Gitee (opens new window)
  • GitCode (opens new window)
  • 更新日志 (opens new window)
  • English
  • 简体中文
🏠首页
  • 快速入门
  • 规则链
  • 标准组件
  • 扩展组件
  • 自定义组件
  • 可视化
  • RuleGo-Server
  • RuleGo-MCP-Server
  • AOP
  • 触发器
  • 高级主题
  • 性能
  • 标准组件
  • 扩展组件
  • 自定义组件
  • 组件市场
  • 概述
  • 快速入门
  • 路由
  • DSL
  • API
  • Options
  • 组件
🔥编辑器 (opens new window)
  • 可视化编辑器 (opens new window)
  • RuleGo-Server (opens new window)
  • ❓问答

    • FAQ
💖支持
👥加入社区
  • Github (opens new window)
  • Gitee (opens new window)
  • GitCode (opens new window)
  • 更新日志 (opens new window)
  • English
  • 简体中文

广告采用随机轮播方式显示 ❤️成为赞助商
  • Endpoint概述
  • 快速入门
  • 路由
    • 创建Router
    • Router Options
    • 添加处理函数
    • 响应
    • 设置输出端
    • Wait
    • 结束路由
  • DSL
  • API
  • Options
  • 组件

目录

路由

# 创建Router

Router 是用来定义路由规则的类型,是各种Endpoint服务的路由抽象,它可以指定输入端、转换函数、处理函数、输出端等。

你可以使用NewRouter函数来创建一个Router类型的指针,然后使用From方法来指定输入端,返回一个From类型的指针。

router := endpoint.NewRouter().From("/api/v1/msg/")
1

# Router Options

创建Router是可以指定Options

endpoint.NewRouter(opts ...endpoint.RouterOption)
1
  • WithRuleGoFunc 动态获取规则链池函数
endpoint.WithRuleGoFunc(f func(exchange *Exchange) *rulego.RuleGo)
1
  • WithRuleGo 更改规则链池,默认使用rulego.DefaultRuleGo
endpoint.WithRuleGo(ruleGo *rulego.RuleGo)
1
  • WithRuleConfig 更改规则引擎配置
endpoint.WithRuleConfig(config types.Config)
1
  • WithContextFunc 构造路由context函数
endpoint.WithContextFunc(func(ctx context.Context, exchange *Exchange) context.Context)
1

# 添加处理函数

From类型有两个方法可以用来添加处理函数:Transform和Process。这两个方法都接收一个Process类型的函数作为参数,返回一个From类型的指针。

  • Transform方法用来转换输入消息为RuleMsg类型。

  • Process方法用来处理输入或输出消息。

  • Process类型的函数接收一个Exchange类型的指针作为参数,返回一个布尔值表示是否继续执行下一个处理函数。

  • Exchange类型是一个结构体,包含了一个输入消息和一个输出消息,用来在处理函数中传递数据。

router := endpoint.NewRouter().From("/api/v1/msg/").Transform(func(exchange *endpoint.Exchange) bool {
    //转换逻辑
    return true
}).Process(func(exchange *endpoint.Exchange) bool {
    //处理逻辑
    return true
})
1
2
3
4
5
6
7

# 响应

可以在转换或者处理函数使用Exchange的Out消息响应客户端

//响应错误
exchange.Out.SetStatusCode(http.StatusMethodNotAllowed)
//响应头
exchange.Out.Headers().Set("Content-Type", "application/json")
//响应内容
exchange.Out.SetBody([]byte("ok"))
1
2
3
4
5
6

注意:mqtt endpoint 调用SetBody() 会从使用指定topic 往broker public数据,指定topic使用以下方式

exchange.Out.Headers().Set("topic", "your topic")
1

# 设置输出端

From类型有两个方法可以用来设置输出端:To和ToComponent。这两个方法都返回一个To类型的指针。

  • To方法用来指定流转目标路径或组件。
  • ToComponent方法用来指定输出组件。

To方法的参数是一个字符串,表示组件路径,格式为{executorType}:{path}。executorType是执行器组件类型,path是组件路径。例如:"chain:{chainId}"表示执行rulego中注册的规则链,"component:{nodeType}"表示执行在config.ComponentsRegistry中注册的组件。

你可以在DefaultExecutorFactory中注册自定义执行器组件类型。To方法还可以接收一些组件配置参数作为可选参数。

router := endpoint.NewRouter().From("/api/v1/msg/").Transform(func(exchange *endpoint.Exchange) bool {
    //转换逻辑
    return true
}).To("chain:default")
1
2
3
4

ToComponent方法的参数是一个types.Node类型的组件,你可以自定义或使用已有的组件。

router := endpoint.NewRouter().From("/api/v1/msg/").Transform(func(exchange *endpoint.Exchange) bool {
    //转换逻辑
    return true
}).ToComponent(func() types.Node {
        //定义日志组件,处理数据
        var configuration = make(types.Configuration)
        configuration["jsScript"] = `
        return 'log::Incoming message:\n' + JSON.stringify(msg) + '\nIncoming metadata:\n' + JSON.stringify(metadata);
        `
        logNode := &action.LogNode{}
        _ = logNode.Init(config, configuration)
        return logNode
}())
1
2
3
4
5
6
7
8
9
10
11
12
13

也可以使用To方法调用组件

router := endpoint.NewRouter().From("/api/v1/msg/").Transform(func(exchange *endpoint.Exchange) bool {
    //转换逻辑
    return true
}).To"component:log", types.Configuration{"jsScript": `
		return 'log::Incoming message:\n' + JSON.stringify(msg) + '\nIncoming metadata:\n' + JSON.stringify(metadata);
`})
1
2
3
4
5
6

# RuleContextOption

设置规则链执行上下文Options

# Wait

同步等待To组件执行结果,并恢复到父进程。例如:http endpoint 需要把规则链的处理结果响应给客户端,需要设置该语义,否则不要设置,会影响吞吐量。

# 结束路由

To类型有一个方法可以用来结束路由:End。End方法返回一个Router类型的指针。

router := endpoint.NewRouter().From("/api/v1/msg/").Transform(func(exchange *endpoint.Exchange) bool {
    //转换逻辑
    return true
}).To("chain:default").End()
1
2
3
4
在 GitHub 上编辑此页 (opens new window)
上次更新: 2025/03/31, 01:52:11
快速入门
DSL

← 快速入门 DSL→

Theme by Vdoing | Copyright © 2023-2025 RuleGo Team | Apache 2.0 License

  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式