Skip to content

合并 (join)

合并节点用于将多个消息合并成一个消息。它是分割节点的反向操作。

输入

  • payload (any): 要合并的消息内容
  • parts (object): 消息序列信息(由分割节点生成)

输出

  • payload (array|string|object): 合并后的消息内容

详细说明

合并节点可以将一系列消息重新组合成单个消息。它通常与分割节点配合使用,但也可以独立使用来收集多个消息。

合并模式

  • 自动模式: 根据msg.parts属性自动合并由分割节点产生的消息序列
  • 手动模式: 根据配置的规则合并消息

配置选项

  • 模式: 选择合并方式

    • 自动: 使用msg.parts信息自动合并
    • 手动: 手动配置合并规则
  • 合并为: (手动模式)

    • 字符串: 将消息连接为字符串
    • 数组: 将消息收集到数组中
    • 对象: 将消息合并为对象
  • 连接字符: (字符串模式)用于连接消息的字符

  • 消息数量: 要等待的消息数量

  • 超时: 等待消息的超时时间

示例

自动合并分割的数组

javascript
// 分割节点输出的消息序列
// 消息1
msg = {
    payload: "apple",
    parts: { index: 0, count: 3, type: "array", id: "abc123" }
};

// 消息2
msg = {
    payload: "banana",
    parts: { index: 1, count: 3, type: "array", id: "abc123" }
};

// 消息3
msg = {
    payload: "orange",
    parts: { index: 2, count: 3, type: "array", id: "abc123" }
};

// 合并节点输出
msg.payload = ["apple", "banana", "orange"];

手动合并为字符串

javascript
// 配置:合并为字符串,连接字符为", ",等待3个消息

// 输入消息1
msg.payload = "北京";

// 输入消息2
msg.payload = "上海";

// 输入消息3
msg.payload = "广州";

// 输出消息
msg.payload = "北京, 上海, 广州";

合并为对象

javascript
// 配置:合并为对象,使用topic作为键

// 输入消息1
msg = {
    topic: "temperature",
    payload: 25.6
};

// 输入消息2
msg = {
    topic: "humidity",
    payload: 60.2
};

// 输出消息
msg.payload = {
    temperature: 25.6,
    humidity: 60.2
};

处理超时

javascript
// 配置:等待3个消息,超时5秒

// 如果在5秒内只收到2个消息,节点会输出部分结果
// 输入消息1
msg.payload = "data1";

// 输入消息2
msg.payload = "data2";

// 5秒后超时,输出
msg.payload = ["data1", "data2"];
msg.parts = {
    count: 2,
    type: "array",
    timeout: true
};

应用场景

  • 数据重组: 将分割的数据重新组合
  • 批量处理: 收集多个消息进行批量处理
  • 数据聚合: 将来自不同源的数据合并
  • 报告生成: 收集多个数据点生成报告

注意事项

  • 自动模式需要消息包含正确的parts属性
  • 手动模式需要明确指定合并规则
  • 超时设置可以防止节点无限等待
  • 消息顺序在某些合并模式下很重要
  • 内存使用量会随着等待的消息数量增加

蜀ICP备2025139593号