Firebird/Concepts: Difference between revisions
From stonehomewiki
Jump to navigationJump to search
Stonezhong (talk | contribs) (→Node) |
Stonezhong (talk | contribs) |
||
| (26 intermediate revisions by the same user not shown) | |||
| Line 17: | Line 17: | ||
<div class="mw-collapsible-preview">wiring</div> | <div class="mw-collapsible-preview">wiring</div> | ||
<div class="mw-collapsible-content"> | <div class="mw-collapsible-content"> | ||
You can connect an output port to one | * You can connect an output port to one or more input ports. | ||
* When you emit data via an output port, the data gets sends to all the input port that is connected, and the node owns those input will receive the data. | |||
</div> | </div> | ||
</div> | </div> | ||
| Line 23: | Line 24: | ||
= Models = | = Models = | ||
<div class="toccolours mw-collapsible mw-collapsed expandable"> | <div class="toccolours mw-collapsible mw-collapsed expandable"> | ||
<div class="mw-collapsible-preview">Node</div> | <div class="mw-collapsible-preview">Node</div> | ||
| Line 41: | Line 41: | ||
</nowiki></pre> | </nowiki></pre> | ||
< | <b>method: get_port</b> | ||
<pre><nowiki> | <pre><nowiki> | ||
def get_port(self, id:str) -> Optional["Port"] | def get_port(self, id:str) -> Optional["Port"] | ||
| Line 52: | Line 51: | ||
</nowiki></pre> | </nowiki></pre> | ||
< | <b>method: on_message</b> | ||
<pre><nowiki> | <pre><nowiki> | ||
on_message(self, | on_message(self, port_id:str, data:Any) | ||
Called when this node receives data. | Called when this node receives data. port_id is the id of the port which receive the data, data is the JSON payload of the data. | ||
</nowiki></pre> | </nowiki></pre> | ||
< | <b>method: <nowiki>>> and <<</nowiki></b> | ||
<pre><nowiki> | <pre><nowiki> | ||
# You can use >>, << to connect nodes, here are examples: | # You can use >>, << to connect nodes, here are examples: | ||
| Line 69: | Line 68: | ||
</nowiki></pre> | </nowiki></pre> | ||
< | <b>method: emit</b> | ||
<pre><nowiki> | <pre><nowiki> | ||
def emit(self, data:Any, port_id:str=DEFAULT_OUTPUT_PORT_ID) | def emit(self, data:Any, port_id:str=DEFAULT_OUTPUT_PORT_ID) | ||
| Line 82: | Line 81: | ||
<div class="mw-collapsible-preview">Generator</div> | <div class="mw-collapsible-preview">Generator</div> | ||
<div class="mw-collapsible-content"> | <div class="mw-collapsible-content"> | ||
Represent a node that does not have input ports. | Represent a node that does not have input ports, it is derived from Node. | ||
<b>methods: pump</b> | |||
<pre><nowiki> | <pre><nowiki> | ||
def pump(self) | def pump(self) | ||
| Line 90: | Line 89: | ||
# derived class must override this method to pump data to the pipeline. | # derived class must override this method to pump data to the pipeline. | ||
</nowiki></pre> | </nowiki></pre> | ||
</div> | </div> | ||
</div> | </div> | ||
<p></p> | <p></p> | ||
<div class="toccolours mw-collapsible mw-collapsed expandable"> | <div class="toccolours mw-collapsible mw-collapsed expandable"> | ||
<div class="mw-collapsible-preview">Sink</div> | <div class="mw-collapsible-preview">Sink</div> | ||
<div class="mw-collapsible-content"> | <div class="mw-collapsible-content"> | ||
Represent a node that does not have output ports. | Represent a node that does not have output ports, it is derived from Node. | ||
</div> | </div> | ||
</div> | </div> | ||
| Line 107: | Line 104: | ||
<div class="mw-collapsible-preview">Port</div> | <div class="mw-collapsible-preview">Port</div> | ||
<div class="mw-collapsible-content"> | <div class="mw-collapsible-content"> | ||
Represent | Represent an input port or output port of a node. | ||
Properties | <b>Properties</b> | ||
<pre><nowiki> | |||
type: Either PortType.INPUT or PortType.OUTPUT, represent it is a input port or output port | |||
id: ID of the port, it is unique within the node | |||
node: The node which this port belongs to | |||
</nowiki></pre> | |||
<b>method: <nowiki>>> and <<</nowiki></b> | |||
<pre><nowiki> | <pre><nowiki> | ||
# connect this port to other port | # connect this port to other port | ||
# see Node document. | |||
</nowiki></pre> | </nowiki></pre> | ||
<b>method: emit</b> | |||
<pre><nowiki> | <pre><nowiki> | ||
def emit(self, json_data:Any) | def emit(self, json_data:Any) | ||
# emit JSON data to this port | |||
# emit data to this port | |||
</nowiki></pre> | </nowiki></pre> | ||
| Line 139: | Line 136: | ||
* A node's output port can connect to another node's input port | * A node's output port can connect to another node's input port | ||
Properties: | <b>Properties</b> | ||
<pre><nowiki> | |||
id: The id of the pipeline, every pipeline has a unique id. | |||
title: A human readable short description of this pipeline. | |||
description: Detailed description of this pipeline. | |||
mq: RabbitMQ instance | |||
nodes: Containing all node belongs to this pipeline. | |||
</nowiki></pre> | |||
<b>method: message_loop</b> | |||
<pre><nowiki> | <pre><nowiki> | ||
def message_loop(self): | def message_loop(self): | ||
| Line 150: | Line 152: | ||
</nowiki></pre> | </nowiki></pre> | ||
<b>method: <nowiki>[]</nowiki></b> | |||
<pre><nowiki> | <pre><nowiki> | ||
# You can use [] to get node by id | |||
pipeline["foo"] # get node with id "foo" of this pipeline | |||
# | |||
# | |||
</nowiki></pre> | </nowiki></pre> | ||
| Line 169: | Line 165: | ||
<div class="mw-collapsible-preview">RabbitMQ</div> | <div class="mw-collapsible-preview">RabbitMQ</div> | ||
<div class="mw-collapsible-content"> | <div class="mw-collapsible-content"> | ||
Represent a RabbitMQ connection | |||
</div> | |||
</div> | |||
<p></p> | |||
= Exception Handling = | |||
<div class="toccolours mw-collapsible mw-collapsed expandable"> | |||
<div class="mw-collapsible-preview"></div> | |||
<div class="mw-collapsible-content"> | |||
* When you register a pipeline, 3 message queue will be created, they are | |||
* ${pipeline_name}: all the message gets routed here | |||
* ${pipeline_name}-error: when a message failed to process, it will be posted here, it has following fields: error_count, recent_errors: array of {failed_time, error_message} | |||
* ${pipeline_critical}-critical: when a message failed too many times, it will be moved here. | |||
</div> | </div> | ||
</div> | </div> | ||
<p></p> | <p></p> | ||
