Изменения документа Движок cccc1808. ProcessEngine

Редактировал(а) Alexandr Fokin 2026/04/27 13:28

От версии 30.2
отредактировано Alexandr Fokin
на 2026/04/27 13:25
Изменить комментарий: Renamed back-links.
К версии 27.14
отредактировано Alexandr Fokin
на 2026/04/12 13:08
Изменить комментарий: К данной версии нет комментариев

Сводка

Подробности

Свойства страницы
Содержимое
... ... @@ -1,12 +1,11 @@
1 -|(% style="width:132px" %) |(% style="width:1301px" %)(((
2 -|Теги поиска|cccc1808. ProcessEngine, cccc1808.ProcessEngine, Process engine
1 +|(% style="width:132px" %)Теги поиска|(% style="width:1301px" %)(((
2 +cccc1808. ProcessEngine, cccc1808.ProcessEngine
3 3  Очередь задач, Система обработки процессов, Движок обработки процессов.
4 4  [[Процесс>>doc:Архитектура и модели.Модели.Процесс.WebHome]]
5 -|Описание|Универсальный движок для выполнения процессов и очередей задач, позволяющий комбинировать несколько подходов к обработке (см особенности).
6 -|Термины|Процесс является единицей исполнения. В реализации может содержать машину состояний.
7 -Система триггеров используется для таймеров и передачи сигналов для процессов (с оптимизацией нагрузки).
8 -|Репозиторий|[[https:~~/~~/github.com/cccc1808/cccc1808.ProcessEngine>>https://github.com/cccc1808/cccc1808.ProcessEngine]]
9 9  )))
6 +|(% style="width:132px" %) |(% style="width:1301px" %)Универсальный движок для выполнения процессов и очередей задач, позволяющий комбинировать несколько подходов к обработке (см особенности).
7 +|(% style="width:132px" %) |(% style="width:1301px" %)Процесс является единицей исполнения. В реализации может содержать машину состояний.
8 +Система триггеров используется для таймеров и передачи сигналов для процессов (с оптимизацией нагрузки).
10 10  |(% style="width:132px" %)Разветывание|(% style="width:1301px" %)(((
11 11  |(% style="width:150px" %)База данных|(% style="width:1177px" %)(((
12 12  Для надежного хранения данных процессов и триггеров.
... ... @@ -16,15 +16,13 @@
16 16  
17 17  Для текущей реализации в качестве хранилище может выступать БД, поддерживающая:
18 18  
19 -* Транзакции:
20 -** Транзакции.
21 -** Savepoint.
18 +* Транзакции: транзакции.
19 +* Транзакции: savepoint.
22 22  (если используются, можно обрабатывать каждый шаг отдельной транзакцией или весь процесс без savepoint изоляции ошибок между шагами).
23 -* [[Блокировки>>doc:Разработка.Базы данных.SQL.Механизмы.Транзакции и блокировки.WebHome]]:
24 -** updatelock.
25 -** updatelock skip locked.
21 +* [[Блокировки>>doc:Разработка.Базы данных.SQL.Механизмы.Транзакции и блокировки.WebHome]]: updatelock.
22 +* [[Блокировки>>doc:Разработка.Базы данных.SQL.Механизмы.Транзакции и блокировки.WebHome]]: updatelock skip locked.
26 26  (частично можно обойтись без него).
27 -** sharelock
24 +* [[Блокировки>>doc:Разработка.Базы данных.SQL.Механизмы.Транзакции и блокировки.WebHome]]: sharelock
28 28  (можно обойтись без него без сильного влияния)
29 29  * [[Уровни изоляции>>doc:Разработка.Базы данных.SQL.Механизмы.Транзакции и блокировки.Уровни изоляции | Isolation levels.WebHome]]: работает на read committed, то что нужно блокируется руками.
30 30  * Для некоторых кейсов желательно возможность выполнить [[Upsert>>doc:Разработка.Базы данных.SQL.Сценарии и вопросы.Insert or update\. Upsert.WebHome]] (insert on conflict).
... ... @@ -63,7 +63,7 @@
63 63  См. пример 2.
64 64  )))
65 65  |(% style="width:159px" %)Перехват ошибок|(% style="width:1168px" %)Перехват и обработка ошибок, если процесс выкинул exception в движок. Реализацию простого retry с задержкой (создается триггер на следующую попытку).
66 -В случае пакетной транзакции движок не знает какой конкретно из процессов породил ошибку (если она не перехвачена вручную), то ошибка выставляется на все незавершенные процессы.
63 +В случае пакетной транзакции движок не знает какой конкретно из процессов породил ошибку (если она не перехвачена вручную), то
67 67  |(% style="width:159px" %)Параллельное выполнение|(% style="width:1168px" %)Допускается запуск нескольких раннеров (на разных нодах), работающих с одной таблицей процессов для распределения нагрузки между ними.
68 68  Допускается фильтрация типов процессов между нодами (чтобы нода выполняла только определенные типы процессов, в том числе по приоритету).
69 69  Доступно для раннеров процессов и триггеров.
... ... @@ -106,7 +106,7 @@
106 106  
107 107  )))
108 108  )))
109 -|(% style="width:32px" %)2|(% style="width:171px" %)Transaction outbox stream process.|(% style="width:1066px" %)[[image:Проекты и репозитории.Библиотеки.Движок cccc1808\. ProcessEngine.Примеры.WebHome@TransactionOutbox. Sequence.jpg]]
106 +|(% style="width:32px" %)2|(% style="width:171px" %)Transaction outbox stream process.|(% style="width:1066px" %)[[image:TransactionOutbox. Sequence.jpg]]
110 110  |(% style="width:32px" %)3|(% style="width:171px" %)Stream trigger|(% style="width:1066px" %)(((
111 111  |(% style="width:94px" %) |(% style="width:1002px" %)(((
112 112  * Позволяет убрать лишние запросы пробуждения процесса (когда он и так запущен).
TransactionOutbox. Sequence.graphml
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.cccc1808
Размер
... ... @@ -1,0 +1,1 @@
1 +33.6 KB
Содержимое
TransactionOutbox. Sequence.jpg
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.cccc1808
Размер
... ... @@ -1,0 +1,1 @@
1 +247.1 KB
Содержимое
Родительский дочерний процесс. Sequence.graphml
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.cccc1808
Размер
... ... @@ -1,0 +1,1 @@
1 +33.6 KB
Содержимое
... ... @@ -1,0 +1,543 @@
1 +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2 +<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:java="http://www.yworks.com/xml/yfiles-common/1.0/java" xmlns:sys="http://www.yworks.com/xml/yfiles-common/markup/primitives/2.0" xmlns:x="http://www.yworks.com/xml/yfiles-common/markup/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
3 + <!--Created by yEd 3.23.1-->
4 + <key attr.name="Description" attr.type="string" for="graph" id="d0"/>
5 + <key for="port" id="d1" yfiles.type="portgraphics"/>
6 + <key for="port" id="d2" yfiles.type="portgeometry"/>
7 + <key for="port" id="d3" yfiles.type="portuserdata"/>
8 + <key attr.name="url" attr.type="string" for="node" id="d4"/>
9 + <key attr.name="description" attr.type="string" for="node" id="d5"/>
10 + <key for="node" id="d6" yfiles.type="nodegraphics"/>
11 + <key for="graphml" id="d7" yfiles.type="resources"/>
12 + <key attr.name="url" attr.type="string" for="edge" id="d8"/>
13 + <key attr.name="description" attr.type="string" for="edge" id="d9"/>
14 + <key for="edge" id="d10" yfiles.type="edgegraphics"/>
15 + <graph edgedefault="directed" id="G">
16 + <data key="d0"/>
17 + <node id="n0">
18 + <data key="d5"/>
19 + <data key="d6">
20 + <y:ShapeNode>
21 + <y:Geometry height="30.0" width="240.2240000000017" x="280.9759999999975" y="439.28000000000003"/>
22 + <y:Fill color="#FFCC00" transparent="false"/>
23 + <y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
24 + <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="234.478515625" x="2.872742187500876" xml:space="preserve" y="5.6494140625">Гарантированное пробудление процесса<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
25 + <y:Shape type="ellipse"/>
26 + </y:ShapeNode>
27 + </data>
28 + </node>
29 + <node id="n1">
30 + <data key="d5"/>
31 + <data key="d6">
32 + <y:ShapeNode>
33 + <y:Geometry height="30.0" width="51.75999999999999" x="378.2160000000002" y="102.96000000000016"/>
34 + <y:Fill color="#FFCC00" transparent="false"/>
35 + <y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
36 + <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="46.80859375" x="2.4757031249999955" xml:space="preserve" y="5.6494140625">Триггер<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
37 + <y:Shape type="roundrectangle"/>
38 + </y:ShapeNode>
39 + </data>
40 + </node>
41 + <node id="n2">
42 + <data key="d5"/>
43 + <data key="d6">
44 + <y:ShapeNode>
45 + <y:Geometry height="30.0" width="66.47999999999999" x="31.40000000000012" y="102.96000000000018"/>
46 + <y:Fill color="#FFCC00" transparent="false"/>
47 + <y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
48 + <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="63.501953125" x="1.4890234374999807" xml:space="preserve" y="5.6494140625">Отправить<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
49 + <y:Shape type="roundrectangle"/>
50 + </y:ShapeNode>
51 + </data>
52 + </node>
53 + <node id="n3">
54 + <data key="d5"/>
55 + <data key="d6">
56 + <y:ShapeNode>
57 + <y:Geometry height="49.20000000000002" width="279.6" x="-75.15999999999988" y="265.2319999999994"/>
58 + <y:Fill color="#FFCC00" transparent="false"/>
59 + <y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
60 + <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="33.40234375" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="272.072265625" x="3.7638671875000114" xml:space="preserve" y="7.898828124999994">Отправка сообщения через TransactionalOutbox
61 +(транзакционная запись в БД)<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
62 + <y:Shape type="ellipse"/>
63 + </y:ShapeNode>
64 + </data>
65 + </node>
66 + <node id="n4">
67 + <data key="d5"/>
68 + <data key="d6">
69 + <y:ShapeNode>
70 + <y:Geometry height="30.0" width="146.47999999999996" x="-8.599999999999838" y="355.0480000000008"/>
71 + <y:Fill color="#FFCC00" transparent="false"/>
72 + <y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
73 + <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="125.0078125" x="10.73609374999998" xml:space="preserve" y="5.6494140625">Отправка triggerEvent<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
74 + <y:Shape type="ellipse"/>
75 + </y:ShapeNode>
76 + </data>
77 + </node>
78 + <node id="n5">
79 + <data key="d5"/>
80 + <data key="d6">
81 + <y:ShapeNode>
82 + <y:Geometry height="30.0" width="30.0" x="386.0879999999984" y="351.33600000000155"/>
83 + <y:Fill color="#FFFFFF" transparent="false"/>
84 + <y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
85 + <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="13.0" y="13.0">
86 + <y:LabelModel>
87 + <y:SmartNodeLabelModel distance="4.0"/>
88 + </y:LabelModel>
89 + <y:ModelParameter>
90 + <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
91 + </y:ModelParameter>
92 + </y:NodeLabel>
93 + <y:Shape type="ellipse"/>
94 + </y:ShapeNode>
95 + </data>
96 + </node>
97 + <node id="n6">
98 + <data key="d5"/>
99 + <data key="d6">
100 + <y:ShapeNode>
101 + <y:Geometry height="30.0" width="122.80000000000007" x="710.2040000000015" y="102.96000000000018"/>
102 + <y:Fill color="#FFCC00" transparent="false"/>
103 + <y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
104 + <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="88.041015625" x="17.37949218750009" xml:space="preserve" y="5.6494140625">Outbox process<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
105 + <y:Shape type="roundrectangle"/>
106 + </y:ShapeNode>
107 + </data>
108 + </node>
109 + <node id="n7">
110 + <data key="d5"/>
111 + <data key="d6">
112 + <y:ShapeNode>
113 + <y:Geometry height="30.0" width="66.47999999999999" x="31.40000000000012" y="709.7220000000023"/>
114 + <y:Fill color="#FFCC00" transparent="false"/>
115 + <y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
116 + <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="63.501953125" x="1.489023437500009" xml:space="preserve" y="5.6494140625">Отправить<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
117 + <y:Shape type="roundrectangle"/>
118 + </y:ShapeNode>
119 + </data>
120 + </node>
121 + <node id="n8">
122 + <data key="d5"/>
123 + <data key="d6">
124 + <y:ShapeNode>
125 + <y:Geometry height="30.0" width="30.0" x="756.6040000000016" y="439.28000000000003"/>
126 + <y:Fill color="#FFFFFF" transparent="false"/>
127 + <y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
128 + <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="13.0" y="13.0">
129 + <y:LabelModel>
130 + <y:SmartNodeLabelModel distance="4.0"/>
131 + </y:LabelModel>
132 + <y:ModelParameter>
133 + <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
134 + </y:ModelParameter>
135 + </y:NodeLabel>
136 + <y:Shape type="ellipse"/>
137 + </y:ShapeNode>
138 + </data>
139 + </node>
140 + <node id="n9">
141 + <data key="d5"/>
142 + <data key="d6">
143 + <y:ShapeNode>
144 + <y:Geometry height="30.0" width="210.80000000000007" x="666.2040000000015" y="617.216000000002"/>
145 + <y:Fill color="#FFCC00" transparent="false"/>
146 + <y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
147 + <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="209.65234375" x="0.573828125000091" xml:space="preserve" y="5.6494140625">Обработка скопившихся сообщений.<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
148 + <y:Shape type="ellipse"/>
149 + </y:ShapeNode>
150 + </data>
151 + </node>
152 + <node id="n10">
153 + <data key="d5"/>
154 + <data key="d6">
155 + <y:ShapeNode>
156 + <y:Geometry height="30.0" width="132.80000000000098" x="967.4200000000045" y="99.2480000000009"/>
157 + <y:Fill color="#FFCC00" transparent="false"/>
158 + <y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
159 + <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="120.09765625" x="6.351171875000546" xml:space="preserve" y="5.6494140625">Страхующий триггер<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
160 + <y:Shape type="roundrectangle"/>
161 + </y:ShapeNode>
162 + </data>
163 + </node>
164 + <node id="n11">
165 + <data key="d5"/>
166 + <data key="d6">
167 + <y:ShapeNode>
168 + <y:Geometry height="30.0" width="132.80000000000098" x="967.4200000000045" y="709.7220000000023"/>
169 + <y:Fill color="#FFCC00" transparent="false"/>
170 + <y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
171 + <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="120.09765625" x="6.351171875000432" xml:space="preserve" y="5.6494140625">Страхующий триггер<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
172 + <y:Shape type="roundrectangle"/>
173 + </y:ShapeNode>
174 + </data>
175 + </node>
176 + <node id="n12">
177 + <data key="d5"/>
178 + <data key="d6">
179 + <y:ShapeNode>
180 + <y:Geometry height="90.95999999999992" width="246.68" x="910.4800000000049" y="526.2560000000021"/>
181 + <y:Fill color="#FFCC00" transparent="false"/>
182 + <y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
183 + <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="48.103515625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="212.65234375" x="17.013828125000032" xml:space="preserve" y="21.428242187500018">Пробуждает родительский процесс.
184 +Но это произойдет позже,
185 +чем это сделал бы основной триггер.<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
186 + <y:Shape type="ellipse"/>
187 + </y:ShapeNode>
188 + </data>
189 + </node>
190 + <node id="n13">
191 + <data key="d5"/>
192 + <data key="d6">
193 + <y:ShapeNode>
194 + <y:Geometry height="145.68000000000006" width="374.863999999998" x="846.388000000006" y="329.81372800000196"/>
195 + <y:Fill color="#FFCC00" transparent="false"/>
196 + <y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
197 + <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="48.103515625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="410.921875" x="-18.028937500001007" xml:space="preserve" y="48.78824218750003">Обнаружил что есть необработанные сообщения,
198 +но transactionanOutbox процесс спит и давно не брался в обработку.
199 +Считает, что были утеряны triggerEvent, поэтому необходимо пробудить<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
200 + <y:Shape type="diamond"/>
201 + </y:ShapeNode>
202 + </data>
203 + </node>
204 + <node id="n14">
205 + <data key="d5"/>
206 + <data key="d6">
207 + <y:GenericNode configuration="BevelNode">
208 + <y:Geometry height="30.0" width="374.863999999998" x="1053.820000000005" y="147.99000000000058"/>
209 + <y:Fill color="#FF9900" transparent="false"/>
210 + <y:BorderStyle hasColor="false" type="line" width="1.0"/>
211 + <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="33.40234375" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="364.603515625" x="5.130242187498993" xml:space="preserve" y="-1.701171875">Запускается периодически и использует более тяжелый запрос.
212 +Проверяет всю таблицу или индекс.<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
213 + </y:GenericNode>
214 + </data>
215 + </node>
216 + <node id="n15">
217 + <data key="d5"/>
218 + <data key="d6">
219 + <y:ShapeNode>
220 + <y:Geometry height="30.0" width="30.0" x="756.6040000000016" y="556.7360000000022"/>
221 + <y:Fill color="#FFFFFF" transparent="false"/>
222 + <y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
223 + <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="13.0" y="13.0">
224 + <y:LabelModel>
225 + <y:SmartNodeLabelModel distance="4.0"/>
226 + </y:LabelModel>
227 + <y:ModelParameter>
228 + <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
229 + </y:ModelParameter>
230 + </y:NodeLabel>
231 + <y:Shape type="ellipse"/>
232 + </y:ShapeNode>
233 + </data>
234 + </node>
235 + <node id="n16">
236 + <data key="d5"/>
237 + <data key="d6">
238 + <y:ShapeNode>
239 + <y:Geometry height="30.0" width="122.80000000000007" x="710.2040000000015" y="744.9220000000023"/>
240 + <y:Fill color="#FFCC00" transparent="false"/>
241 + <y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
242 + <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="88.041015625" x="17.37949218750009" xml:space="preserve" y="5.6494140625">Outbox process<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
243 + <y:Shape type="roundrectangle"/>
244 + </y:ShapeNode>
245 + </data>
246 + </node>
247 + <node id="n17">
248 + <data key="d5"/>
249 + <data key="d6">
250 + <y:ShapeNode>
251 + <y:Geometry height="30.0" width="51.75999999999999" x="375.2079999999984" y="709.7220000000023"/>
252 + <y:Fill color="#FFCC00" transparent="false"/>
253 + <y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
254 + <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="46.80859375" x="2.4757031249999955" xml:space="preserve" y="5.6494140625">Триггер<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
255 + <y:Shape type="roundrectangle"/>
256 + </y:ShapeNode>
257 + </data>
258 + </node>
259 + <node id="n18">
260 + <data key="d5"/>
261 + <data key="d6">
262 + <y:ShapeNode>
263 + <y:Geometry height="44.07999999999993" width="463.28" x="169.4479999999984" y="523.489000000002"/>
264 + <y:Fill color="#FFCC00" transparent="false"/>
265 + <y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
266 + <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="33.40234375" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="426.173828125" x="18.553085937499986" xml:space="preserve" y="5.338828124999964">Выставляет небольшую задержку, чтобы если поступит новое сообщение,
267 +то воркер и так скорее всего выполняется и смысла запроса нет.<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
268 + <y:Shape type="ellipse"/>
269 + </y:ShapeNode>
270 + </data>
271 + </node>
272 + <node id="n19">
273 + <data key="d5"/>
274 + <data key="d6">
275 + <y:ShapeNode>
276 + <y:Geometry height="30.0" width="210.80000000000007" x="666.2040000000017" y="677.216000000002"/>
277 + <y:Fill color="#FFCC00" transparent="false"/>
278 + <y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
279 + <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="121.123046875" x="44.83847656249998" xml:space="preserve" y="5.6494140625">Засыпание процесса<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
280 + <y:Shape type="ellipse"/>
281 + </y:ShapeNode>
282 + </data>
283 + </node>
284 + <edge id="e0" source="n4" target="n5">
285 + <data key="d9"/>
286 + <data key="d10">
287 + <y:PolyLineEdge>
288 + <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
289 + <y:LineStyle color="#000000" type="line" width="1.0"/>
290 + <y:Arrows source="none" target="standard"/>
291 + <y:BendStyle smoothed="false"/>
292 + </y:PolyLineEdge>
293 + </data>
294 + </edge>
295 + <edge id="e1" source="n2" target="n3">
296 + <data key="d9"/>
297 + <data key="d10">
298 + <y:PolyLineEdge>
299 + <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
300 + <y:LineStyle color="#000000" type="line" width="1.0"/>
301 + <y:Arrows source="none" target="standard"/>
302 + <y:BendStyle smoothed="false"/>
303 + </y:PolyLineEdge>
304 + </data>
305 + </edge>
306 + <edge id="e2" source="n3" target="n4">
307 + <data key="d9"/>
308 + <data key="d10">
309 + <y:PolyLineEdge>
310 + <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
311 + <y:LineStyle color="#000000" type="line" width="1.0"/>
312 + <y:Arrows source="none" target="standard"/>
313 + <y:BendStyle smoothed="false"/>
314 + </y:PolyLineEdge>
315 + </data>
316 + </edge>
317 + <edge id="e3" source="n4" target="n7">
318 + <data key="d9"/>
319 + <data key="d10">
320 + <y:PolyLineEdge>
321 + <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
322 + <y:LineStyle color="#000000" type="line" width="1.0"/>
323 + <y:Arrows source="none" target="standard"/>
324 + <y:BendStyle smoothed="false"/>
325 + </y:PolyLineEdge>
326 + </data>
327 + </edge>
328 + <edge id="e4" source="n1" target="n5">
329 + <data key="d9"/>
330 + <data key="d10">
331 + <y:PolyLineEdge>
332 + <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
333 + <y:LineStyle color="#000000" type="dashed" width="1.0"/>
334 + <y:Arrows source="none" target="standard"/>
335 + <y:BendStyle smoothed="false"/>
336 + </y:PolyLineEdge>
337 + </data>
338 + </edge>
339 + <edge id="e5" source="n0" target="n8">
340 + <data key="d9"/>
341 + <data key="d10">
342 + <y:PolyLineEdge>
343 + <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
344 + <y:LineStyle color="#000000" type="line" width="1.0"/>
345 + <y:Arrows source="none" target="standard"/>
346 + <y:BendStyle smoothed="false"/>
347 + </y:PolyLineEdge>
348 + </data>
349 + </edge>
350 + <edge id="e6" source="n6" target="n8">
351 + <data key="d9"/>
352 + <data key="d10">
353 + <y:PolyLineEdge>
354 + <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
355 + <y:LineStyle color="#000000" type="dashed" width="1.0"/>
356 + <y:Arrows source="none" target="standard"/>
357 + <y:BendStyle smoothed="false"/>
358 + </y:PolyLineEdge>
359 + </data>
360 + </edge>
361 + <edge id="e7" source="n13" target="n12">
362 + <data key="d9"/>
363 + <data key="d10">
364 + <y:PolyLineEdge>
365 + <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
366 + <y:Point x="1238.3762880000015" y="397.053728000002"/>
367 + <y:Point x="1238.3762880000015" y="571.7360000000022"/>
368 + </y:Path>
369 + <y:LineStyle color="#000000" type="line" width="1.0"/>
370 + <y:Arrows source="none" target="standard"/>
371 + <y:BendStyle smoothed="false"/>
372 + </y:PolyLineEdge>
373 + </data>
374 + </edge>
375 + <edge id="e8" source="n12" target="n11">
376 + <data key="d9"/>
377 + <data key="d10">
378 + <y:PolyLineEdge>
379 + <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
380 + <y:LineStyle color="#000000" type="dashed" width="1.0"/>
381 + <y:Arrows source="none" target="standard"/>
382 + <y:BendStyle smoothed="false"/>
383 + </y:PolyLineEdge>
384 + </data>
385 + </edge>
386 + <edge id="e9" source="n13" target="n12">
387 + <data key="d9"/>
388 + <data key="d10">
389 + <y:PolyLineEdge>
390 + <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
391 + <y:LineStyle color="#000000" type="dashed" width="1.0"/>
392 + <y:Arrows source="none" target="standard"/>
393 + <y:BendStyle smoothed="false"/>
394 + </y:PolyLineEdge>
395 + </data>
396 + </edge>
397 + <edge id="e10" source="n10" target="n13">
398 + <data key="d9"/>
399 + <data key="d10">
400 + <y:PolyLineEdge>
401 + <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
402 + <y:LineStyle color="#000000" type="line" width="1.0"/>
403 + <y:Arrows source="none" target="standard"/>
404 + <y:BendStyle smoothed="false"/>
405 + </y:PolyLineEdge>
406 + </data>
407 + </edge>
408 + <edge id="e11" source="n12" target="n15">
409 + <data key="d9"/>
410 + <data key="d10">
411 + <y:PolyLineEdge>
412 + <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
413 + <y:LineStyle color="#000000" type="line" width="1.0"/>
414 + <y:Arrows source="none" target="standard"/>
415 + <y:BendStyle smoothed="false"/>
416 + </y:PolyLineEdge>
417 + </data>
418 + </edge>
419 + <edge id="e12" source="n8" target="n15">
420 + <data key="d9"/>
421 + <data key="d10">
422 + <y:PolyLineEdge>
423 + <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
424 + <y:LineStyle color="#000000" type="line" width="1.0"/>
425 + <y:Arrows source="none" target="standard"/>
426 + <y:BendStyle smoothed="false"/>
427 + </y:PolyLineEdge>
428 + </data>
429 + </edge>
430 + <edge id="e13" source="n19" target="n16">
431 + <data key="d9"/>
432 + <data key="d10">
433 + <y:PolyLineEdge>
434 + <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
435 + <y:LineStyle color="#000000" type="dashed" width="1.0"/>
436 + <y:Arrows source="none" target="standard"/>
437 + <y:BendStyle smoothed="false"/>
438 + </y:PolyLineEdge>
439 + </data>
440 + </edge>
441 + <edge id="e14" source="n15" target="n9">
442 + <data key="d9"/>
443 + <data key="d10">
444 + <y:PolyLineEdge>
445 + <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
446 + <y:LineStyle color="#000000" type="line" width="1.0"/>
447 + <y:Arrows source="none" target="standard"/>
448 + <y:BendStyle smoothed="false"/>
449 + </y:PolyLineEdge>
450 + </data>
451 + </edge>
452 + <edge id="e15" source="n12" target="n13">
453 + <data key="d9"/>
454 + <data key="d10">
455 + <y:PolyLineEdge>
456 + <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
457 + <y:Point x="806.244000000001" y="545.1420000000005"/>
458 + <y:Point x="806.244000000001" y="402.653728000002"/>
459 + </y:Path>
460 + <y:LineStyle color="#000000" type="line" width="1.0"/>
461 + <y:Arrows source="none" target="standard"/>
462 + <y:BendStyle smoothed="false"/>
463 + </y:PolyLineEdge>
464 + </data>
465 + </edge>
466 + <edge id="e16" source="n18" target="n17">
467 + <data key="d9"/>
468 + <data key="d10">
469 + <y:PolyLineEdge>
470 + <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
471 + <y:LineStyle color="#000000" type="dashed" width="1.0"/>
472 + <y:Arrows source="none" target="standard"/>
473 + <y:BendStyle smoothed="false"/>
474 + </y:PolyLineEdge>
475 + </data>
476 + </edge>
477 + <edge id="e17" source="n5" target="n0">
478 + <data key="d9"/>
479 + <data key="d10">
480 + <y:PolyLineEdge>
481 + <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
482 + <y:LineStyle color="#000000" type="line" width="1.0"/>
483 + <y:Arrows source="none" target="standard"/>
484 + <y:BendStyle smoothed="false"/>
485 + </y:PolyLineEdge>
486 + </data>
487 + </edge>
488 + <edge id="e18" source="n18" target="n5">
489 + <data key="d9"/>
490 + <data key="d10">
491 + <y:PolyLineEdge>
492 + <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
493 + <y:Point x="142.1920000000003" y="545.529000000002"/>
494 + <y:Point x="142.1920000000003" y="391.66200000000015"/>
495 + </y:Path>
496 + <y:LineStyle color="#000000" type="line" width="1.0"/>
497 + <y:Arrows source="none" target="standard"/>
498 + <y:BendStyle smoothed="false"/>
499 + </y:PolyLineEdge>
500 + </data>
501 + </edge>
502 + <edge id="e19" source="n0" target="n18">
503 + <data key="d9"/>
504 + <data key="d10">
505 + <y:PolyLineEdge>
506 + <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
507 + <y:LineStyle color="#000000" type="line" width="1.0"/>
508 + <y:Arrows source="none" target="standard"/>
509 + <y:BendStyle smoothed="false"/>
510 + </y:PolyLineEdge>
511 + </data>
512 + </edge>
513 + <edge id="e20" source="n9" target="n19">
514 + <data key="d9"/>
515 + <data key="d10">
516 + <y:PolyLineEdge>
517 + <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
518 + <y:LineStyle color="#000000" type="line" width="1.0"/>
519 + <y:Arrows source="none" target="standard"/>
520 + <y:BendStyle smoothed="false"/>
521 + </y:PolyLineEdge>
522 + </data>
523 + </edge>
524 + <edge id="e21" source="n19" target="n8">
525 + <data key="d9"/>
526 + <data key="d10">
527 + <y:PolyLineEdge>
528 + <y:Path sx="-104.15249999999969" sy="0.0" tx="0.0" ty="0.0">
529 + <y:Point x="646.651500000002" y="692.216000000002"/>
530 + <y:Point x="646.651500000002" y="470.7595000000003"/>
531 + </y:Path>
532 + <y:LineStyle color="#000000" type="line" width="1.0"/>
533 + <y:Arrows source="none" target="standard"/>
534 + <y:BendStyle smoothed="false"/>
535 + </y:PolyLineEdge>
536 + </data>
537 + </edge>
538 + </graph>
539 + <data key="d7">
540 + <y:Resources/>
541 + </data>
542 +</graphml>
543 +