1

我正在尝试使用 WirePattern 助手在我的图表中执行一些同步。我设置config.group为 true,因此我可以确保仅在此组件中收集和处理从同一组接收到的数据包。

为了便于讨论,这里是来自第一个输入端口的示例数据包:

<my-group>
123
</my-group>

第二个入港:

<my-group>
456
</my-group>

因为config.group设置为 true,这两个数据包将按组匹配,我可以在我的组件中对它们做一些事情。到目前为止,一切都很好。

问题在于我想用与 2 个输入端口匹配的同一组来包装输出。这就是输出数据包组的样子:

<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
  }
};
4

1 回答 1

0

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

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

out.beginGroup(groups[0]);
out.send(input.in + input.value);
out.endGroup();
于 2015-01-29T12:27:34.757 回答