您可以通过使用 PROPAGATE 语句在 Compute 节点中生成多条输出消息。生成的输出消息可以有相同或不同的内容。您还可以将输出消息定向到 Compute 节点四个可选输出终端中的任何一个,或定向到 Label 节点。
例如,如果要为 Compute 节点收到的输入消息创建三个副本,一个发送到 Compute 节点的标准“Out”终端、一个发送到 Compute 节点的第一个可选“Out1”终端,还有一个发送到 Label 节点“ThirdCopy”,
可编写以下 ESQL 代码:
SET OutputRoot = InputRoot; PROPAGATE; SET OutputRoot = InputRoot; PROPAGATETO TERMINAL 'out1'
; SET OutputRoot = InputRoot; PROPAGATETO LABEL 'ThirdCopy';
SET OutputRoot = InputRoot; PROPAGATE DELETE NONE; SET OutputRoot = InputRoot; PROPAGATE TO TERMINAL 'out1' DELETE NONE; SET OutputRoot = InputRoot; PROPAGATE TO LABEL 'ThirdCopy';
如果您没有初始化输出缓冲区,则会生成一条空的消息,消息流将检测到错误并抛出异常。
同时,请确保将所有必需的消息头复制到您传播的每条输出消息的输出消息缓冲区中。
如果您要在传播每条消息之前修改输出消息内容,请在对 PROPAGATE 语句进行编码之前对适当的 ESQL 进行编码以进行您需要的更改。
如果您设置了要生成的最后一条输出消息的内容,并将它作为 Compute 节点的最终操作进行传播,您不必包含最后一条 PROPAGATE 语句。Compute 节点的缺省操作为,当它终止时将传播输出缓冲区的内容。这是通过 RETURN TRUE 语句实现的,该语句作为最后一条语句包含在模块框架中。
例如,如果您要为输入消息生成三个副本,并且不执行任何进一步的操作,则可直接在 RETURN TRUE 语句前包含以下代码:
SET OutputRoot = InputRoot; PROPAGATE DELETE NONE; PROPAGATE DELETE NONE;
或者,您还可以通过将 RETURN TRUE 更改为 RETURN FALSE,修改该节点的缺省行为:
SET OutputRoot = InputRoot; PROPAGATEDELETE NONE; PROPAGATEDELETE NONE; PROPAGATE; RETURN FALSE;
三条 PROPAGATE 语句将生成三条输出消息。最后一条 RETURN FALSE 语句会使节点终止,但不传播最后一条输出消息。请注意,最后一条 PROPAGATE 语句不包含 DELETE NONE 子句,因为该节点必须在此阶段释放内存。