当config.group为true时,使用WirePattern帮助器仅转发单个组

时间:2015-01-28 19:48:45

标签: noflo

我正在尝试使用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
  }
};

1 个答案:

答案 0 :(得分:0)

这对我来说就像是一个错误,因为我记得在转发时强制执行组唯一性。我已经打开https://github.com/noflo/noflo/issues/269并将在下一个NoFlo版本中修复它。

目前,另一种解决方法是:不要使用forwardGroups功能,而是手动将组发送到流程处理程序内的输出(这在使用WirePattern时也绝对合法):

out.beginGroup(groups[0]);
out.send(input.in + input.value);
out.endGroup();