合并 (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
属性 - 手动模式需要明确指定合并规则
- 超时设置可以防止节点无限等待
- 消息顺序在某些合并模式下很重要
- 内存使用量会随着等待的消息数量增加