我正在尝试使用WirePattern助手在我的图表中执行一些同步。我将config.group
设置为true,这样我就可以确保只收集和处理在同一组中收到的数据包。
为了参数,这里是来自第一个输入端口的示例数据包:
<my-group>
123
</my-group>
第二个进港口:
<my-group>
456
</my-group>
因为config.group
设置为true,所以这两个数据包将按组匹配,我可以在我的组件中对它们执行某些操作。到目前为止一切都很好。
问题在于我想要将输出与2个输入端口匹配的组相同。这就是out数据包组的样子:
<my-group>
123456
</my-group>
我假设config.group
默认情况下会这样做,但事实并非如此,它只是发送没有组的输出:
123456
我尝试将config.forwardGroups
设置为各种值,以便只从其中一个输入端转发该组(因为它们是相同的)。无论是将其设置为true
,"portname"
还是["portname"]
,它都会对输出数据包进行双重打包:
<my-group>
<my-group>
123456
</my-group>
</my-group>
由于分组已更改且不再与其他组件匹配,因此这会导致线路更加严重。我可以使用另一个组件手动删除其中一个组,但我不应该这样做。
如何设置WirePattern以继续按组匹配(使用config.group
),但只将一个组转发到输出端口?
我不介意现在手动执行此操作,如果这是WirePattern不支持的内容。我只需要知道我做错了什么,或者是否在NoFlo中不可能。
这是我的参考配置:
var config = {
in: ["in", "value"],
params: ["property"],
out: "out",
// This doesn't forward the group
group: true, // Wait for packets of same group
// This duplicates groups when group: true
forwardGroups: ["value"],
arrayPolicy: {
in: "all", // Wait for all indexes
params: "all" // Wait for all indexes
}
};
答案 0 :(得分:0)
这对我来说就像是一个错误,因为我记得在转发时强制执行组唯一性。我已经打开https://github.com/noflo/noflo/issues/269并将在下一个NoFlo版本中修复它。
目前,另一种解决方法是:不要使用forwardGroups
功能,而是手动将组发送到流程处理程序内的输出(这在使用WirePattern时也绝对合法):
out.beginGroup(groups[0]);
out.send(input.in + input.value);
out.endGroup();