This is an automated email from the ASF dual-hosted git repository.
dhanak pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-kogito-docs.git
The following commit(s) were added to refs/heads/main by this push:
new 6c8b2c9c4 kie-kogito-docs-557: Add Newsletter subscription use case
(#558)
6c8b2c9c4 is described below
commit 6c8b2c9c4b1ffe075bc4323610ed7d6f7d0aebbd
Author: nmirasch <[email protected]>
AuthorDate: Wed Mar 6 08:56:01 2024 +0100
kie-kogito-docs-557: Add Newsletter subscription use case (#558)
* kie-kogito-docs-557: Add Newsletter subscription use case
* Fixing string unification references
* Kaldesai review suggestions
* Update
serverlessworkflow/modules/ROOT/pages/use-cases/advanced-developer-use-cases/event-orchestration/newsletter-subscription-example.adoc
Co-authored-by: Ricardo Zanini
<[email protected]>
---------
Co-authored-by: Dominik HanĂ¡k <[email protected]>
Co-authored-by: Ricardo Zanini
<[email protected]>
---
serverlessworkflow/antora.yml | 2 +-
.../images/data-index/data-index-graphql-ui.png | Bin 80620 -> 77849 bytes
.../newsletter-subscription/architecture.png | Bin 0 -> 51450 bytes
.../newsletter-subscription-Architecture.drawio | 368 +++++++++++++++++++++
.../newsletter-subscription-Architecture.png | Bin 0 -> 277409 bytes
.../newsletter-subscription-backend-ui.png | Bin 0 -> 59553 bytes
.../newsletter-subscription-flow.png | Bin 0 -> 47918 bytes
.../newsletter-subscription-ui.png | Bin 0 -> 42708 bytes
serverlessworkflow/modules/ROOT/nav.adoc | 1 +
.../pages/data-index/data-index-core-concepts.adoc | 5 -
.../ROOT/pages/data-index/data-index-service.adoc | 4 -
.../data-index/data-index-quarkus-extension.adoc | 6 -
.../newsletter-subscription-example.adoc | 264 +++++++++++++++
13 files changed, 634 insertions(+), 16 deletions(-)
diff --git a/serverlessworkflow/antora.yml b/serverlessworkflow/antora.yml
index 5538819c3..1934468a6 100644
--- a/serverlessworkflow/antora.yml
+++ b/serverlessworkflow/antora.yml
@@ -130,4 +130,4 @@ asciidoc:
# string unication references
data_index_ref: Data Index
workflow_instance: workflow instance
- workflow_instances: ${workflow_instance}s
+ workflow_instances: workflow instances
diff --git
a/serverlessworkflow/modules/ROOT/assets/images/data-index/data-index-graphql-ui.png
b/serverlessworkflow/modules/ROOT/assets/images/data-index/data-index-graphql-ui.png
index e5f581988..3eadeb3a5 100644
Binary files
a/serverlessworkflow/modules/ROOT/assets/images/data-index/data-index-graphql-ui.png
and
b/serverlessworkflow/modules/ROOT/assets/images/data-index/data-index-graphql-ui.png
differ
diff --git
a/serverlessworkflow/modules/ROOT/assets/images/use-cases/newsletter-subscription/architecture.png
b/serverlessworkflow/modules/ROOT/assets/images/use-cases/newsletter-subscription/architecture.png
new file mode 100644
index 000000000..054629df6
Binary files /dev/null and
b/serverlessworkflow/modules/ROOT/assets/images/use-cases/newsletter-subscription/architecture.png
differ
diff --git
a/serverlessworkflow/modules/ROOT/assets/images/use-cases/newsletter-subscription/newsletter-subscription-Architecture.drawio
b/serverlessworkflow/modules/ROOT/assets/images/use-cases/newsletter-subscription/newsletter-subscription-Architecture.drawio
new file mode 100644
index 000000000..0f23b67fc
--- /dev/null
+++
b/serverlessworkflow/modules/ROOT/assets/images/use-cases/newsletter-subscription/newsletter-subscription-Architecture.drawio
@@ -0,0 +1,368 @@
+<mxfile host="app.diagrams.net" modified="2024-03-01T16:35:20.615Z"
agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/121.0.0.0 Safari/537.36" etag="lT66McF1kq8fJiXLeNW4" version="24.0.0"
type="google">
+ <diagram id="PihfjUU_v_dvda1Fzyti" name="Page-1">
+ <mxGraphModel grid="0" page="0" gridSize="10" guides="0" tooltips="1"
connect="1" arrows="1" fold="1" pageScale="1" pageWidth="850" pageHeight="1100"
math="0" shadow="0">
+ <root>
+ <mxCell id="0" />
+ <mxCell id="1" parent="0" />
+ <mxCell id="cAXRqbwzUYpm79ER4dvK-13" value="" style="group"
connectable="0" vertex="1" parent="1">
+ <mxGeometry x="141" y="412" width="110" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="cAXRqbwzUYpm79ER4dvK-74" value="" style="group"
connectable="0" vertex="1" parent="cAXRqbwzUYpm79ER4dvK-13">
+ <mxGeometry width="110" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="cAXRqbwzUYpm79ER4dvK-5" value="&nbsp; &nbsp;
&nbsp;SinkBinding"
style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Helvetica;fontSize=12;"
vertex="1" parent="cAXRqbwzUYpm79ER4dvK-74">
+ <mxGeometry width="110" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="cAXRqbwzUYpm79ER4dvK-71" value=""
style="shape=image;imageAspect=0;aspect=fixed;verticalLabelPosition=bottom;verticalAlign=top;fontFamily=Helvetica;fontSize=12;strokeColor=default;strokeWidth=1;fillColor=none;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAARgAAAEYCAYAAACHjumMAAArwklEQVR4nOzdd5xV1bk//s+zz/TeOzDMwDAMMwMydKSIoEQBY4wl0RuNLYnlJjbsJTf+/CaKxnjVmHgtMWpEDCGgIFURBUQ6DH16Z5jeT9nP73UOcq+FOmfvs/c553n78g+Vs/Zy5pzPWXvttZ6lQAghdCIBI4TQjQSMEEI3EjBCCN1IwAghdCMBI4TQjQSMEE
[...]
+ <mxGeometry y="5" width="30" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="cAXRqbwzUYpm79ER4dvK-26" value="" style="group"
connectable="0" vertex="1" parent="1">
+ <mxGeometry x="322" y="523" width="110" height="55" as="geometry" />
+ </mxCell>
+ <mxCell id="cAXRqbwzUYpm79ER4dvK-27" value="Broker"
style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Helvetica;fontSize=12;"
vertex="1" parent="cAXRqbwzUYpm79ER4dvK-26">
+ <mxGeometry width="110" height="50" as="geometry" />
+ </mxCell>
+ <mxCell id="cAXRqbwzUYpm79ER4dvK-76" value=""
style="shape=image;imageAspect=0;aspect=fixed;verticalLabelPosition=bottom;verticalAlign=top;fontFamily=Helvetica;fontSize=12;strokeColor=default;strokeWidth=1;fillColor=none;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAARgAAAEYCAYAAACHjumMAAArwklEQVR4nOzdd5xV1bk//s+zz/TeOzDMwDAMMwMydKSIoEQBY4wl0RuNLYnlJjbsJTf+/CaKxnjVmHgtMWpEDCGgIFURBUQ6DH16Z5jeT9nP73UOcq+FOmfvs/c553n78g+Vs/Zy5pzPWXvttZ6lQAghdCIBI4TQjQSMEEI3EjBCCN1IwAghdCMBI4TQjQSMEE
[...]
+ <mxGeometry x="1" y="3.75" width="30" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="cAXRqbwzUYpm79ER4dvK-92" value="<span
style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px;
font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal;
font-weight: 400; letter-spacing: normal; orphans: 2; text-align: center;
text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px;
-webkit-text-stroke-width: 0px; background-color: rgb(248, 249, 250);
text-decoration-thickness: initial; text-decoration-style: initi [...]
+ <mxGeometry x="10" y="25" width="90" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="cAXRqbwzUYpm79ER4dvK-33" value=""
style="endArrow=classic;html=1;rounded=0;fontFamily=Helvetica;fontSize=10;dashed=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;"
edge="1" parent="1" source="cAXRqbwzUYpm79ER4dvK-17"
target="cAXRqbwzUYpm79ER4dvK-5">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="207.99999999999977" y="377" as="sourcePoint" />
+ <mxPoint x="294.9999999999998" y="408" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="cAXRqbwzUYpm79ER4dvK-36" value=""
style="endArrow=classic;html=1;rounded=0;fontFamily=Helvetica;fontSize=10;dashed=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;"
edge="1" parent="1" source="cAXRqbwzUYpm79ER4dvK-5"
target="cAXRqbwzUYpm79ER4dvK-76">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="359.4369999999999" y="459" as="sourcePoint" />
+ <mxPoint x="300.9999999999999" y="542.72" as="targetPoint" />
+ <Array as="points">
+ <mxPoint x="196" y="542" />
+ </Array>
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="cAXRqbwzUYpm79ER4dvK-49" value=""
style="endArrow=classic;html=1;rounded=0;fontFamily=Helvetica;fontSize=10;dashed=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.59;entryY=1.055;entryDx=0;entryDy=0;entryPerimeter=0;"
edge="1" parent="1" source="cAXRqbwzUYpm79ER4dvK-27"
target="cAXRqbwzUYpm79ER4dvK-46">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="200" y="571" as="sourcePoint" />
+ <mxPoint x="640" y="630" as="targetPoint" />
+ <Array as="points">
+ <mxPoint x="613" y="548" />
+ </Array>
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="cAXRqbwzUYpm79ER4dvK-50" value=""
style="endArrow=classic;html=1;rounded=0;fontFamily=Helvetica;fontSize=10;dashed=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.636;exitY=-0.04;exitDx=0;exitDy=0;exitPerimeter=0;"
edge="1" parent="1" source="cAXRqbwzUYpm79ER4dvK-48"
target="cAXRqbwzUYpm79ER4dvK-45">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="634" y="480" as="sourcePoint" />
+ <mxPoint x="819.9999999999998" y="485" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="cAXRqbwzUYpm79ER4dvK-58" value=""
style="endArrow=classic;html=1;rounded=0;fontFamily=Helvetica;fontSize=10;dashed=1;exitX=0.008;exitY=0.39;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;"
edge="1" parent="1" source="cAXRqbwzUYpm79ER4dvK-2"
target="cAXRqbwzUYpm79ER4dvK-68">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="480" y="250" as="sourcePoint" />
+ <mxPoint x="410" y="330" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="cAXRqbwzUYpm79ER4dvK-69" value="2) rest call to notify
each <br>workflow timeout"
style="edgeLabel;html=1;align=left;verticalAlign=middle;resizable=0;points=[];fontSize=12;fontFamily=Helvetica;"
connectable="0" vertex="1" parent="cAXRqbwzUYpm79ER4dvK-58">
+ <mxGeometry x="0.4936" relative="1" as="geometry">
+ <mxPoint x="6" y="19" as="offset" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="cAXRqbwzUYpm79ER4dvK-81" value="" style="group"
connectable="0" vertex="1" parent="1">
+ <mxGeometry x="22" y="157" width="602" height="216" as="geometry" />
+ </mxCell>
+ <mxCell id="cAXRqbwzUYpm79ER4dvK-80" value=""
style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Helvetica;fontSize=12;strokeColor=default;strokeWidth=1;fillColor=none;"
vertex="1" parent="cAXRqbwzUYpm79ER4dvK-81">
+ <mxGeometry x="24" y="-6" width="344" height="193" as="geometry" />
+ </mxCell>
+ <mxCell id="cAXRqbwzUYpm79ER4dvK-11" value=""
style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Helvetica;fontSize=12;"
vertex="1" parent="cAXRqbwzUYpm79ER4dvK-81">
+ <mxGeometry y="13" width="350" height="190" as="geometry" />
+ </mxCell>
+ <mxCell id="cAXRqbwzUYpm79ER4dvK-1"
value="kogito-quarkus-serverless-workflow<br>+<br><span
style="background-color: rgb(255, 255, 255); color: rgb(8, 8,
8);">kogito-addons-quarkus-jobs-knative-eventing</span>"
style="rounded=1;whiteSpace=wrap;html=1;" vertex="1"
parent="cAXRqbwzUYpm79ER4dvK-81">
+ <mxGeometry x="49" y="43" width="250" height="60" as="geometry" />
+ </mxCell>
+ <mxCell id="cAXRqbwzUYpm79ER4dvK-6" value="<span style="color:
rgb(8, 8, 8); background-color: rgb(255, 255,
255);">quarkus-reactive-messaging-http</span>"
style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;fontFamily=Helvetica;fontSize=12;direction=south;"
vertex="1" parent="cAXRqbwzUYpm79ER4dvK-81">
+ <mxGeometry x="50" y="140" width="230" height="20" as="geometry" />
+ </mxCell>
+ <mxCell id="cAXRqbwzUYpm79ER4dvK-14" value="<pre
style="background-color: rgb(255, 255, 255); color: rgb(8, 8, 8);
font-family: &quot;JetBrains Mono&quot;, monospace;"><font
style="font-size: 10px;"><span style="color: rgb(0, 51,
179);">kind</span>: Service</font></pre>"
style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=12;fontFami
[...]
+ <mxGeometry x="26" y="4" width="90" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="cAXRqbwzUYpm79ER4dvK-17" value="<pre
style="background-color: rgb(255, 255, 255); color: rgb(8, 8, 8);
font-family: &quot;JetBrains Mono&quot;, monospace;"><span
style="color: rgb(8, 48, 128);"><font style="font-size:
12px;">{$K_SINK}</font></span></pre>"
style="text;html=1;strokeColor=default;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Helvetica;fontSiz
[...]
+ <mxGeometry x="142" y="192" width="68" height="24" as="geometry" />
+ </mxCell>
+ <mxCell id="cAXRqbwzUYpm79ER4dvK-23" value=""
style="endArrow=classic;html=1;rounded=0;fontFamily=Helvetica;fontSize=10;dashed=1;"
edge="1" parent="cAXRqbwzUYpm79ER4dvK-81">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="170" y="107" as="sourcePoint" />
+ <mxPoint x="170" y="137" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="cAXRqbwzUYpm79ER4dvK-24" value=""
style="endArrow=classic;html=1;rounded=0;fontFamily=Helvetica;fontSize=10;dashed=1;"
edge="1" parent="cAXRqbwzUYpm79ER4dvK-81">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="170" y="161" as="sourcePoint" />
+ <mxPoint x="170" y="191" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="cAXRqbwzUYpm79ER4dvK-53" value=""
style="shape=image;imageAspect=0;aspect=fixed;verticalLabelPosition=bottom;verticalAlign=top;fontFamily=Helvetica;fontSize=12;strokeColor=default;strokeWidth=1;fillColor=none;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAARgAAAEYCAYAAACHjumMAAArwklEQVR4nOzdd5xV1bk//s+zz/TeOzDMwDAMMwMydKSIoEQBY4wl0RuNLYnlJjbsJTf+/CaKxnjVmHgtMWpEDCGgIFURBUQ6DH16Z5jeT9nP73UOcq+FOmfvs/c553n78g+Vs/Zy5pzPWXvttZ6lQAghdCIBI4TQjQSMEEI3EjBCCN1IwAghdCMBI4TQjQSMEE
[...]
+ <mxGeometry y="8" width="30" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="cAXRqbwzUYpm79ER4dvK-68" value="<pre
style="background-color: rgb(255, 255, 255); font-family:
&quot;JetBrains Mono&quot;, monospace;"><font
color="#083080">Endpoint</font></pre>"
style="text;html=1;strokeColor=default;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Helvetica;fontSize=12;strokeWidth=1;dashed=1;"
vertex="1" parent="cAXRqbwzUYpm79ER4dvK-81">
+ <mxGeometry x="330" y="65" width="56" height="24" as="geometry" />
+ </mxCell>
+ <mxCell id="cAXRqbwzUYpm79ER4dvK-88"
value="&lt;&lt;event_producer&gt;&gt;"
style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Helvetica;fontSize=12;"
vertex="1" parent="cAXRqbwzUYpm79ER4dvK-81">
+ <mxGeometry x="30" y="173" width="60" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="iCpjkjbjhnEQOErl1VDS-16"
value="<b>subscription-flow</b>"
style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;"
vertex="1" parent="cAXRqbwzUYpm79ER4dvK-81">
+ <mxGeometry x="-1" y="-8" width="359" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="cAXRqbwzUYpm79ER4dvK-82" value="" style="group"
connectable="0" vertex="1" parent="1">
+ <mxGeometry x="543" y="153" width="282" height="222" as="geometry" />
+ </mxCell>
+ <mxCell id="cAXRqbwzUYpm79ER4dvK-37" value=""
style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Helvetica;fontSize=11;strokeColor=default;strokeWidth=1;fillColor=none;"
vertex="1" parent="cAXRqbwzUYpm79ER4dvK-82">
+ <mxGeometry y="8" width="282" height="199" as="geometry" />
+ </mxCell>
+ <mxCell id="cAXRqbwzUYpm79ER4dvK-2" value="Jobs Service"
style="rounded=1;whiteSpace=wrap;html=1;" vertex="1"
parent="cAXRqbwzUYpm79ER4dvK-82">
+ <mxGeometry x="90" y="57" width="120" height="60" as="geometry" />
+ </mxCell>
+ <mxCell id="cAXRqbwzUYpm79ER4dvK-38" value=""
style="sketch=0;aspect=fixed;html=1;points=[];align=center;image;fontSize=12;image=img/lib/mscae/Kubernetes.svg;fontFamily=Helvetica;"
vertex="1" parent="cAXRqbwzUYpm79ER4dvK-82">
+ <mxGeometry x="4" y="11" width="20.84" height="20" as="geometry" />
+ </mxCell>
+ <mxCell id="cAXRqbwzUYpm79ER4dvK-39" value="<pre
style="background-color: rgb(255, 255, 255); color: rgb(8, 8, 8);
font-family: &quot;JetBrains Mono&quot;,
monospace;"><br></pre>"
style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=12;fontFamily=Helvetica;"
vertex="1" parent="cAXRqbwzUYpm79ER4dvK-82">
+ <mxGeometry x="62" y="19" width="20" height="50" as="geometry" />
+ </mxCell>
+ <mxCell id="cAXRqbwzUYpm79ER4dvK-44" value="<span
style="color: rgb(8, 8, 8); background-color: rgb(255, 255,
255);">quarkus-reactive-messaging-http</span>"
style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;fontFamily=Helvetica;fontSize=12;direction=south;"
vertex="1" parent="cAXRqbwzUYpm79ER4dvK-82">
+ <mxGeometry x="37" y="145" width="220" height="20" as="geometry" />
+ </mxCell>
+ <mxCell id="cAXRqbwzUYpm79ER4dvK-45" value="<pre
style="background-color: rgb(255, 255, 255); font-family:
&quot;JetBrains Mono&quot;, monospace;"><font
color="#083080">Endpoint</font></pre>"
style="text;html=1;strokeColor=default;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Helvetica;fontSize=12;strokeWidth=1;dashed=1;"
vertex="1" parent="cAXRqbwzUYpm79ER4dvK-82">
+ <mxGeometry x="63" y="198" width="56" height="24" as="geometry" />
+ </mxCell>
+ <mxCell id="cAXRqbwzUYpm79ER4dvK-51" value=""
style="endArrow=classic;html=1;rounded=0;fontFamily=Helvetica;fontSize=10;dashed=1;"
edge="1" parent="cAXRqbwzUYpm79ER4dvK-82">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="113" y="196" as="sourcePoint" />
+ <mxPoint x="113" y="166" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="cAXRqbwzUYpm79ER4dvK-52" value=""
style="endArrow=classic;html=1;rounded=0;fontFamily=Helvetica;fontSize=10;dashed=1;"
edge="1" parent="cAXRqbwzUYpm79ER4dvK-82">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="114" y="140" as="sourcePoint" />
+ <mxPoint x="114" y="117" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="cAXRqbwzUYpm79ER4dvK-57" value="<pre
style="background-color: rgb(255, 255, 255); color: rgb(8, 8, 8);
font-family: &quot;JetBrains Mono&quot;, monospace;"><font
style="font-size: 10px;"><span style="color: rgb(0, 51,
179);">kind</span>: Service</font></pre>"
style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=12;fontFami
[...]
+ <mxGeometry x="19" y="-3" width="96" height="50" as="geometry" />
+ </mxCell>
+ <mxCell id="cAXRqbwzUYpm79ER4dvK-99" value="<span
style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px;
font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal;
font-weight: 400; letter-spacing: normal; orphans: 2; text-align: center;
text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px;
-webkit-text-stroke-width: 0px; background-color: rgb(248, 249, 250);
text-decoration-thickness: initial; text-decoration-style: initi [...]
+ <mxGeometry x="1" y="174" width="110" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="mrzCyjfmGtWYSGb_E_jC-8" value="<pre
style="background-color: rgb(255, 255, 255); color: rgb(8, 8, 8);
font-family: &quot;JetBrains Mono&quot;, monospace;"><span
style="color: rgb(8, 48, 128);"><font style="font-size:
12px;">{$K_SINK}</font></span></pre>"
style="text;html=1;strokeColor=default;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Helvetica;fontSize
[...]
+ <mxGeometry x="189" y="198" width="68" height="24" as="geometry" />
+ </mxCell>
+ <mxCell id="mrzCyjfmGtWYSGb_E_jC-9" value=""
style="endArrow=classic;html=1;rounded=0;fontFamily=Helvetica;fontSize=10;dashed=1;"
edge="1" parent="cAXRqbwzUYpm79ER4dvK-82">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="198" y="115" as="sourcePoint" />
+ <mxPoint x="198" y="145" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="cAXRqbwzUYpm79ER4dvK-83" value="" style="group"
connectable="0" vertex="1" parent="1">
+ <mxGeometry x="540" y="430" width="140" height="85" as="geometry" />
+ </mxCell>
+ <mxCell id="cAXRqbwzUYpm79ER4dvK-48" value=""
style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Helvetica;fontSize=12;strokeColor=default;strokeWidth=1;fillColor=none;"
vertex="1" parent="cAXRqbwzUYpm79ER4dvK-83">
+ <mxGeometry x="12" width="128" height="60" as="geometry" />
+ </mxCell>
+ <mxCell id="cAXRqbwzUYpm79ER4dvK-42" value=""
style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Helvetica;fontSize=12;"
vertex="1" parent="cAXRqbwzUYpm79ER4dvK-83">
+ <mxGeometry y="9" width="130" height="76" as="geometry" />
+ </mxCell>
+ <mxCell id="cAXRqbwzUYpm79ER4dvK-46" value="<pre
style="background-color: rgb(255, 255, 255); color: rgb(8, 8, 8);
font-family: &quot;JetBrains Mono&quot;, monospace;"><font
style="font-size: 8px;"><span style="color: rgb(0, 51,
179);">filter</span>:<br> <span style="color:
rgb(0, 51, 179);">attributes</span>:<br> <span
style="color: rgb(0, 51, 179);">type</span& [...]
+ <mxGeometry x="14" y="21" width="100" height="60" as="geometry" />
+ </mxCell>
+ <mxCell id="cAXRqbwzUYpm79ER4dvK-77" value=""
style="shape=image;imageAspect=0;aspect=fixed;verticalLabelPosition=bottom;verticalAlign=top;fontFamily=Helvetica;fontSize=12;strokeColor=default;strokeWidth=1;fillColor=none;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAARgAAAEYCAYAAACHjumMAAArwklEQVR4nOzdd5xV1bk//s+zz/TeOzDMwDAMMwMydKSIoEQBY4wl0RuNLYnlJjbsJTf+/CaKxnjVmHgtMWpEDCGgIFURBUQ6DH16Z5jeT9nP73UOcq+FOmfvs/c553n78g+Vs/Zy5pzPWXvttZ6lQAghdCIBI4TQjQSMEEI3EjBCCN1IwAghdCMBI4TQjQSMEE
[...]
+ <mxGeometry x="1" y="8" width="30" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="cAXRqbwzUYpm79ER4dvK-84" value="Trigger"
style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Helvetica;fontSize=12;"
vertex="1" parent="cAXRqbwzUYpm79ER4dvK-83">
+ <mxGeometry x="31" y="9" width="60" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="mrzCyjfmGtWYSGb_E_jC-1" value="" style="group"
connectable="0" vertex="1" parent="1">
+ <mxGeometry x="727" y="430" width="110" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="mrzCyjfmGtWYSGb_E_jC-2" value="" style="group"
connectable="0" vertex="1" parent="mrzCyjfmGtWYSGb_E_jC-1">
+ <mxGeometry width="110" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="mrzCyjfmGtWYSGb_E_jC-3" value="&nbsp; &nbsp;
&nbsp;SinkBinding"
style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Helvetica;fontSize=12;"
vertex="1" parent="mrzCyjfmGtWYSGb_E_jC-2">
+ <mxGeometry width="110" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="mrzCyjfmGtWYSGb_E_jC-4" value=""
style="shape=image;imageAspect=0;aspect=fixed;verticalLabelPosition=bottom;verticalAlign=top;fontFamily=Helvetica;fontSize=12;strokeColor=default;strokeWidth=1;fillColor=none;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAARgAAAEYCAYAAACHjumMAAArwklEQVR4nOzdd5xV1bk//s+zz/TeOzDMwDAMMwMydKSIoEQBY4wl0RuNLYnlJjbsJTf+/CaKxnjVmHgtMWpEDCGgIFURBUQ6DH16Z5jeT9nP73UOcq+FOmfvs/c553n78g+Vs/Zy5pzPWXvttZ6lQAghdCIBI4TQjQSMEEI3EjBCCN1IwAghdCMBI4TQjQSMEEI
[...]
+ <mxGeometry y="5" width="30" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="mrzCyjfmGtWYSGb_E_jC-7" value=""
style="endArrow=classic;html=1;rounded=0;fontFamily=Helvetica;fontSize=10;dashed=1;"
edge="1" parent="1">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="741" y="321" as="sourcePoint" />
+ <mxPoint x="741" y="351" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="mrzCyjfmGtWYSGb_E_jC-10" value=""
style="endArrow=classic;html=1;rounded=0;fontFamily=Helvetica;fontSize=10;dashed=1;exitX=0.458;exitY=1.039;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.75;entryDx=0;entryDy=0;"
edge="1" parent="1" source="mrzCyjfmGtWYSGb_E_jC-3"
target="cAXRqbwzUYpm79ER4dvK-92">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="790" y="700" as="sourcePoint" />
+ <mxPoint x="160" y="560" as="targetPoint" />
+ <Array as="points">
+ <mxPoint x="777" y="593" />
+ <mxPoint x="422" y="593" />
+ </Array>
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="mrzCyjfmGtWYSGb_E_jC-11" value="" style="group"
connectable="0" vertex="1" parent="1">
+ <mxGeometry x="114" y="795" width="486" height="222" as="geometry" />
+ </mxCell>
+ <mxCell id="iCpjkjbjhnEQOErl1VDS-5" value="" style="group"
connectable="0" vertex="1" parent="mrzCyjfmGtWYSGb_E_jC-11">
+ <mxGeometry x="-89" y="30" width="240" height="143" as="geometry" />
+ </mxCell>
+ <mxCell id="mrzCyjfmGtWYSGb_E_jC-12" value=""
style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Helvetica;fontSize=11;strokeColor=default;strokeWidth=1;fillColor=none;"
vertex="1" parent="iCpjkjbjhnEQOErl1VDS-5">
+ <mxGeometry y="11" width="240" height="132" as="geometry" />
+ </mxCell>
+ <mxCell id="mrzCyjfmGtWYSGb_E_jC-14" value=""
style="sketch=0;aspect=fixed;html=1;points=[];align=center;image;fontSize=12;image=img/lib/mscae/Kubernetes.svg;fontFamily=Helvetica;"
vertex="1" parent="iCpjkjbjhnEQOErl1VDS-5">
+ <mxGeometry x="4" y="14" width="20.84" height="20" as="geometry" />
+ </mxCell>
+ <mxCell id="mrzCyjfmGtWYSGb_E_jC-21" value="<pre
style="background-color: rgb(255, 255, 255); color: rgb(8, 8, 8);
font-family: &quot;JetBrains Mono&quot;, monospace;"><font
style="font-size: 10px;"><span style="color: rgb(0, 51,
179);">kind</span>: Service</font></pre>"
style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=12;fontFamily
[...]
+ <mxGeometry x="26" width="100" height="50" as="geometry" />
+ </mxCell>
+ <mxCell id="mrzCyjfmGtWYSGb_E_jC-22" value="<span
style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px;
font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal;
font-weight: 400; letter-spacing: normal; orphans: 2; text-align: center;
text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px;
-webkit-text-stroke-width: 0px; background-color: rgb(248, 249, 250);
text-decoration-thickness: initial; text-decoration-style: initi [...]
+ <mxGeometry x="4" y="113" width="89" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="iCpjkjbjhnEQOErl1VDS-2" value=""
style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;"
vertex="1" parent="iCpjkjbjhnEQOErl1VDS-5">
+ <mxGeometry x="67" y="43" width="113" height="63" as="geometry" />
+ </mxCell>
+ <mxCell id="iCpjkjbjhnEQOErl1VDS-4" value=""
style="image;aspect=fixed;html=1;points=[];align=center;fontSize=12;image=img/lib/azure2/databases/Azure_Database_PostgreSQL_Server.svg;"
vertex="1" parent="iCpjkjbjhnEQOErl1VDS-5">
+ <mxGeometry x="163" y="80" width="22.5" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="iCpjkjbjhnEQOErl1VDS-18"
value="<b>newsletter-postgres</b>"
style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;"
vertex="1" parent="mrzCyjfmGtWYSGb_E_jC-11">
+ <mxGeometry x="-87" y="12" width="188" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="frw4W3FznUpJx_0nHbNc-23" value="3) workflow and job status
changes"
style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;"
vertex="1" parent="mrzCyjfmGtWYSGb_E_jC-11">
+ <mxGeometry x="259" y="65" width="220" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="mrzCyjfmGtWYSGb_E_jC-26" value=""
style="endArrow=classic;html=1;rounded=0;fontFamily=Helvetica;fontSize=10;dashed=1;exitX=0.576;exitY=1.143;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.401;entryY=0.011;entryDx=0;entryDy=0;entryPerimeter=0;"
edge="1" parent="1" source="mrzCyjfmGtWYSGb_E_jC-8"
target="mrzCyjfmGtWYSGb_E_jC-3">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="750" y="390" as="sourcePoint" />
+ <mxPoint x="750" y="420" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="iCpjkjbjhnEQOErl1VDS-6" value=""
style="endArrow=classic;html=1;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;dashed=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;"
edge="1" parent="1" source="cAXRqbwzUYpm79ER4dvK-1"
target="iCpjkjbjhnEQOErl1VDS-2">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="-30" y="370" as="sourcePoint" />
+ <mxPoint x="-10" y="810" as="targetPoint" />
+ <Array as="points">
+ <mxPoint x="-10" y="230" />
+ <mxPoint x="-10" y="900" />
+ </Array>
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="iCpjkjbjhnEQOErl1VDS-8" value=""
style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;dashed=1;entryX=0.889;entryY=0.549;entryDx=0;entryDy=0;entryPerimeter=0;"
edge="1" parent="1" source="cAXRqbwzUYpm79ER4dvK-2"
target="iCpjkjbjhnEQOErl1VDS-4">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="890" y="280" as="sourcePoint" />
+ <mxPoint x="850" y="820" as="targetPoint" />
+ <Array as="points">
+ <mxPoint x="870" y="240" />
+ <mxPoint x="870" y="921" />
+ </Array>
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="iCpjkjbjhnEQOErl1VDS-12" value="1) send events to program
the timers for each workflow timeout"
style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;"
vertex="1" parent="1">
+ <mxGeometry x="204" y="464" width="185" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="iCpjkjbjhnEQOErl1VDS-14" value="notify job status changes"
style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;"
vertex="1" parent="1">
+ <mxGeometry x="605" y="593" width="185" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="iCpjkjbjhnEQOErl1VDS-17"
value="<b>jobs-service-postgresql</b>"
style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;"
vertex="1" parent="1">
+ <mxGeometry x="541" y="131" width="142" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="frw4W3FznUpJx_0nHbNc-1" value="" style="group"
connectable="0" vertex="1" parent="1">
+ <mxGeometry x="553" y="653" width="282" height="222" as="geometry" />
+ </mxCell>
+ <mxCell id="frw4W3FznUpJx_0nHbNc-2" value=""
style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Helvetica;fontSize=11;strokeColor=default;strokeWidth=1;fillColor=none;"
vertex="1" parent="frw4W3FznUpJx_0nHbNc-1">
+ <mxGeometry y="8" width="282" height="199" as="geometry" />
+ </mxCell>
+ <mxCell id="frw4W3FznUpJx_0nHbNc-3" value="Data Index Service"
style="rounded=1;whiteSpace=wrap;html=1;" vertex="1"
parent="frw4W3FznUpJx_0nHbNc-1">
+ <mxGeometry x="90" y="57" width="120" height="60" as="geometry" />
+ </mxCell>
+ <mxCell id="frw4W3FznUpJx_0nHbNc-4" value=""
style="sketch=0;aspect=fixed;html=1;points=[];align=center;image;fontSize=12;image=img/lib/mscae/Kubernetes.svg;fontFamily=Helvetica;"
vertex="1" parent="frw4W3FznUpJx_0nHbNc-1">
+ <mxGeometry x="4" y="11" width="20.84" height="20" as="geometry" />
+ </mxCell>
+ <mxCell id="frw4W3FznUpJx_0nHbNc-5" value="<pre
style="background-color: rgb(255, 255, 255); color: rgb(8, 8, 8);
font-family: &quot;JetBrains Mono&quot;,
monospace;"><br></pre>"
style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=12;fontFamily=Helvetica;"
vertex="1" parent="frw4W3FznUpJx_0nHbNc-1">
+ <mxGeometry x="62" y="19" width="20" height="50" as="geometry" />
+ </mxCell>
+ <mxCell id="frw4W3FznUpJx_0nHbNc-6" value="<span style="color:
rgb(8, 8, 8); background-color: rgb(255, 255,
255);">quarkus-reactive-messaging-http</span>"
style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;fontFamily=Helvetica;fontSize=12;direction=south;"
vertex="1" parent="frw4W3FznUpJx_0nHbNc-1">
+ <mxGeometry x="37" y="145" width="220" height="20" as="geometry" />
+ </mxCell>
+ <mxCell id="frw4W3FznUpJx_0nHbNc-7" value="<pre
style="background-color: rgb(255, 255, 255); font-family:
&quot;JetBrains Mono&quot;, monospace;"><font
color="#083080">Endpoint</font></pre>"
style="text;html=1;strokeColor=default;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Helvetica;fontSize=12;strokeWidth=1;dashed=1;"
vertex="1" parent="frw4W3FznUpJx_0nHbNc-1">
+ <mxGeometry x="123" y="198" width="56" height="24" as="geometry" />
+ </mxCell>
+ <mxCell id="frw4W3FznUpJx_0nHbNc-8" value=""
style="endArrow=classic;html=1;rounded=0;fontFamily=Helvetica;fontSize=10;dashed=1;"
edge="1" parent="frw4W3FznUpJx_0nHbNc-1">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="150" y="197" as="sourcePoint" />
+ <mxPoint x="150" y="167" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="frw4W3FznUpJx_0nHbNc-9" value=""
style="endArrow=classic;html=1;rounded=0;fontFamily=Helvetica;fontSize=10;dashed=1;"
edge="1" parent="frw4W3FznUpJx_0nHbNc-1">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="150" y="140" as="sourcePoint" />
+ <mxPoint x="150" y="117" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="frw4W3FznUpJx_0nHbNc-10" value="<pre
style="background-color: rgb(255, 255, 255); color: rgb(8, 8, 8);
font-family: &quot;JetBrains Mono&quot;, monospace;"><font
style="font-size: 10px;"><span style="color: rgb(0, 51,
179);">kind</span>: Service</font></pre>"
style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=12;fontFami
[...]
+ <mxGeometry x="19" y="-3" width="96" height="50" as="geometry" />
+ </mxCell>
+ <mxCell id="frw4W3FznUpJx_0nHbNc-11" value="<span
style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px;
font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal;
font-weight: 400; letter-spacing: normal; orphans: 2; text-align: center;
text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px;
-webkit-text-stroke-width: 0px; background-color: rgb(248, 249, 250);
text-decoration-thickness: initial; text-decoration-style: initi [...]
+ <mxGeometry x="1" y="174" width="110" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="frw4W3FznUpJx_0nHbNc-24"
value="<b>data-index-service-postgresql</b>"
style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;"
vertex="1" parent="frw4W3FznUpJx_0nHbNc-1">
+ <mxGeometry y="-24" width="204" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="frw4W3FznUpJx_0nHbNc-15" value="" style="group"
connectable="0" vertex="1" parent="1">
+ <mxGeometry x="316" y="639" width="140" height="85" as="geometry" />
+ </mxCell>
+ <mxCell id="frw4W3FznUpJx_0nHbNc-16" value=""
style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Helvetica;fontSize=12;strokeColor=default;strokeWidth=1;fillColor=none;"
vertex="1" parent="frw4W3FznUpJx_0nHbNc-15">
+ <mxGeometry x="12" width="128" height="60" as="geometry" />
+ </mxCell>
+ <mxCell id="frw4W3FznUpJx_0nHbNc-17" value=""
style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Helvetica;fontSize=12;"
vertex="1" parent="frw4W3FznUpJx_0nHbNc-15">
+ <mxGeometry y="9" width="130" height="76" as="geometry" />
+ </mxCell>
+ <mxCell id="frw4W3FznUpJx_0nHbNc-18" value="<pre
style="background-color: rgb(255, 255, 255); color: rgb(8, 8, 8);
font-family: &quot;JetBrains Mono&quot;, monospace;"><font
style="font-size: 8px;"><span style="color: rgb(0, 51,
179);">filter</span>:<br> <span style="color:
rgb(0, 51, 179);">attributes</span>:<br> <span
style="color: rgb(0, 51, 179);">type</span& [...]
+ <mxGeometry x="14" y="21" width="100" height="60" as="geometry" />
+ </mxCell>
+ <mxCell id="frw4W3FznUpJx_0nHbNc-19" value=""
style="shape=image;imageAspect=0;aspect=fixed;verticalLabelPosition=bottom;verticalAlign=top;fontFamily=Helvetica;fontSize=12;strokeColor=default;strokeWidth=1;fillColor=none;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAARgAAAEYCAYAAACHjumMAAArwklEQVR4nOzdd5xV1bk//s+zz/TeOzDMwDAMMwMydKSIoEQBY4wl0RuNLYnlJjbsJTf+/CaKxnjVmHgtMWpEDCGgIFURBUQ6DH16Z5jeT9nP73UOcq+FOmfvs/c553n78g+Vs/Zy5pzPWXvttZ6lQAghdCIBI4TQjQSMEEI3EjBCCN1IwAghdCMBI4TQjQSMEE
[...]
+ <mxGeometry x="1" y="8" width="30" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="frw4W3FznUpJx_0nHbNc-20" value="Trigger"
style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Helvetica;fontSize=12;"
vertex="1" parent="frw4W3FznUpJx_0nHbNc-15">
+ <mxGeometry x="31" y="9" width="60" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="frw4W3FznUpJx_0nHbNc-21" value=""
style="endArrow=classic;html=1;rounded=0;fontFamily=Helvetica;fontSize=10;dashed=1;entryX=0.383;entryY=0.011;entryDx=0;entryDy=0;entryPerimeter=0;"
edge="1" parent="1" source="cAXRqbwzUYpm79ER4dvK-92"
target="frw4W3FznUpJx_0nHbNc-16">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="377" y="589" as="sourcePoint" />
+ <mxPoint x="377" y="628" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="frw4W3FznUpJx_0nHbNc-22" value=""
style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;dashed=1;"
edge="1" parent="1" source="frw4W3FznUpJx_0nHbNc-17"
target="frw4W3FznUpJx_0nHbNc-7">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="349" y="853" as="sourcePoint" />
+ <mxPoint x="641" y="1039" as="targetPoint" />
+ <Array as="points">
+ <mxPoint x="380" y="890" />
+ <mxPoint x="704" y="890" />
+ </Array>
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="frw4W3FznUpJx_0nHbNc-25" value=""
style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;dashed=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;"
edge="1" parent="1" source="frw4W3FznUpJx_0nHbNc-3"
target="iCpjkjbjhnEQOErl1VDS-2">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="799" y="1310" as="sourcePoint" />
+ <mxPoint x="826" y="1256" as="targetPoint" />
+ <Array as="points">
+ <mxPoint x="850" y="740" />
+ <mxPoint x="850" y="900" />
+ </Array>
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="wrzL0i9aTsnikpT4mFyo-2"
value="<b>subscription-service</b>"
style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;"
vertex="1" parent="1">
+ <mxGeometry x="53" y="130" width="359" height="30" as="geometry" />
+ </mxCell>
+ </root>
+ </mxGraphModel>
+ </diagram>
+</mxfile>
diff --git
a/serverlessworkflow/modules/ROOT/assets/images/use-cases/newsletter-subscription/newsletter-subscription-Architecture.png
b/serverlessworkflow/modules/ROOT/assets/images/use-cases/newsletter-subscription/newsletter-subscription-Architecture.png
new file mode 100644
index 000000000..8708c691a
Binary files /dev/null and
b/serverlessworkflow/modules/ROOT/assets/images/use-cases/newsletter-subscription/newsletter-subscription-Architecture.png
differ
diff --git
a/serverlessworkflow/modules/ROOT/assets/images/use-cases/newsletter-subscription/newsletter-subscription-backend-ui.png
b/serverlessworkflow/modules/ROOT/assets/images/use-cases/newsletter-subscription/newsletter-subscription-backend-ui.png
new file mode 100644
index 000000000..8feb60b9c
Binary files /dev/null and
b/serverlessworkflow/modules/ROOT/assets/images/use-cases/newsletter-subscription/newsletter-subscription-backend-ui.png
differ
diff --git
a/serverlessworkflow/modules/ROOT/assets/images/use-cases/newsletter-subscription/newsletter-subscription-flow.png
b/serverlessworkflow/modules/ROOT/assets/images/use-cases/newsletter-subscription/newsletter-subscription-flow.png
new file mode 100644
index 000000000..8f334e289
Binary files /dev/null and
b/serverlessworkflow/modules/ROOT/assets/images/use-cases/newsletter-subscription/newsletter-subscription-flow.png
differ
diff --git
a/serverlessworkflow/modules/ROOT/assets/images/use-cases/newsletter-subscription/newsletter-subscription-ui.png
b/serverlessworkflow/modules/ROOT/assets/images/use-cases/newsletter-subscription/newsletter-subscription-ui.png
new file mode 100644
index 000000000..acccf1042
Binary files /dev/null and
b/serverlessworkflow/modules/ROOT/assets/images/use-cases/newsletter-subscription/newsletter-subscription-ui.png
differ
diff --git a/serverlessworkflow/modules/ROOT/nav.adoc
b/serverlessworkflow/modules/ROOT/nav.adoc
index 02313c8a9..8234cc212 100644
--- a/serverlessworkflow/modules/ROOT/nav.adoc
+++ b/serverlessworkflow/modules/ROOT/nav.adoc
@@ -117,6 +117,7 @@
****
xref:use-cases/advanced-developer-use-cases/event-orchestration/consume-produce-events-with-knative-eventing.adoc[]
****
xref:use-cases/advanced-developer-use-cases/event-orchestration/consume-producing-events-with-kafka.adoc[]
****
xref:use-cases/advanced-developer-use-cases/event-orchestration/orchestration-based-saga-pattern.adoc[]
+****
xref:use-cases/advanced-developer-use-cases/event-orchestration/newsletter-subscription-example.adoc[]
*** Timeouts
****
xref:use-cases/advanced-developer-use-cases/timeouts/timeout-showcase-example.adoc[]
*** Callbacks
diff --git
a/serverlessworkflow/modules/ROOT/pages/data-index/data-index-core-concepts.adoc
b/serverlessworkflow/modules/ROOT/pages/data-index/data-index-core-concepts.adoc
index ff8b6f720..953e8c1db 100644
---
a/serverlessworkflow/modules/ROOT/pages/data-index/data-index-core-concepts.adoc
+++
b/serverlessworkflow/modules/ROOT/pages/data-index/data-index-core-concepts.adoc
@@ -16,11 +16,6 @@
// Referenced documentation pages
:path_resolution_url:
https://quarkus.io/blog/path-resolution-in-quarkus/#defaults
-//Common constants
-:data_index_ref: Data Index
-:workflow_instance: workflow instance
-:workflow_instances: {workflow_instance}s
-
In {product_name} platform there is a dedicated supporting service that stores
the data related to the {workflow_instances} and their associated jobs called
*{data_index_ref}* service.
This service also provides a GraphQL endpoint allowing users to query that
data and perform operations, also known as mutations in GraphQL terms.
diff --git
a/serverlessworkflow/modules/ROOT/pages/data-index/data-index-service.adoc
b/serverlessworkflow/modules/ROOT/pages/data-index/data-index-service.adoc
index 80175cf71..3183a7506 100644
--- a/serverlessworkflow/modules/ROOT/pages/data-index/data-index-service.adoc
+++ b/serverlessworkflow/modules/ROOT/pages/data-index/data-index-service.adoc
@@ -9,10 +9,6 @@
:test_containers_url: https://www.testcontainers.org/
:kubernetes_configmap_url:
https://kubernetes.io/docs/concepts/configuration/configmap/
:quarkus_container_image_customizing_url:
https://quarkus.io/guides/container-image#customizing
-//Common constants
-:data_index_ref: Data Index
-:workflow_instance: process instance
-:workflow_instances: {workflow_instance}s
[#data-index-service]
== {data_index_ref} service deployment
diff --git
a/serverlessworkflow/modules/ROOT/pages/use-cases/advanced-developer-use-cases/data-index/data-index-quarkus-extension.adoc
b/serverlessworkflow/modules/ROOT/pages/use-cases/advanced-developer-use-cases/data-index/data-index-quarkus-extension.adoc
index 8d6d61488..9c6746af8 100644
---
a/serverlessworkflow/modules/ROOT/pages/use-cases/advanced-developer-use-cases/data-index/data-index-quarkus-extension.adoc
+++
b/serverlessworkflow/modules/ROOT/pages/use-cases/advanced-developer-use-cases/data-index/data-index-quarkus-extension.adoc
@@ -16,12 +16,6 @@
:mongo_url: https://www.mongodb.com/
:postgresql_url: https://www.postgresql.org/
-//Common constants
-:data_index_ref: Data Index
-:workflow_instance: process instance
-:workflow_instances: {workflow_instance}s
-
-
This document describes how you add the {data_index_ref} features to your
workflow. You simply need to add the {data_index_ref} extension to the workflow
and
the related data will be collected and stored in the database, enabling the
GraphQL endpoint to execute queries and perform management operations over the
{workflow_instances}.
The example described in this document is based on the
link:{kogito_sw_timeouts_showcase_embedded_example_url}[`serverless-workflow-timeouts_showcase_embedded`]
example application.
diff --git
a/serverlessworkflow/modules/ROOT/pages/use-cases/advanced-developer-use-cases/event-orchestration/newsletter-subscription-example.adoc
b/serverlessworkflow/modules/ROOT/pages/use-cases/advanced-developer-use-cases/event-orchestration/newsletter-subscription-example.adoc
new file mode 100644
index 000000000..80573b358
--- /dev/null
+++
b/serverlessworkflow/modules/ROOT/pages/use-cases/advanced-developer-use-cases/event-orchestration/newsletter-subscription-example.adoc
@@ -0,0 +1,264 @@
+= Newsletter subscription example in {product_name}
+
+:compat-mode!:
+// Metadata:
+:description: Newsletter subscription example in {product_name}
+:keywords: kogito, workflow, serverless
+:flow_newsletter_subscription_url:
{kogito_sw_examples_url}/serverless-workflow-newsletter-subscription
+
+This example demonstrates a few features powered by the {product_name}
following the Serverless Workflow specification including:
+
+* REST Services calls via OpenAPI definitions
+* Pause and resume of a given workflow instance
+* Consuming and producing CloudEvents
+
+In a Knative environment, the services involved in this use case can be scaled
to zero and resume from the exact stage it was, saving cluster resources in the
process.
+
+The figure below illustrates the overall architecture of this use case.
+
+image::use-cases/newsletter-subscription/architecture.png[Architecture]
+
+. Once a new subscription request comes, the flow will evaluate if it's not
already subscribed.
+. If not, it will attempt to subscribe to the newsletter, the new user and
wait for the confirmation.
+. Once a new event containing the confirmation arrives, the flow will resume
and proceed with the new user subscription.
+. Subscriptions not confirmed during a configured period are considered
timed-out and automatically removed from the system.
+. By the end, a new event containing the details of the subscription is
broadcast in the environment, so other actors can react to it.
+
+Here we have the Newsletter Subscription workflow:
+
+.newsletter-subscription-flow workflow
+image::use-cases/newsletter-subscription/newsletter-subscription-flow.png[Workflow]
+
+.Newsletter subscription flow workflow definition
+[source,json]
+----
+{
+ "id": "subscription_flow",
+ "dataInputSchema": "subscription-schema.json",
+ "specVersion": "0.8",
+ "version": "1.0",
+ "start": "VerifyEmail",
+ "events": [
+ {
+ "kind": "produced",
+ "type": "new.subscription",
+ "name": "NewSubscriptionEvent"
+ },
+ {
+ "kind": "consumed",
+ "type": "confirm.subscription",
+ "name": "ConfirmSubscriptionEvent"
+ }
+ ],
+ "functions": [
+ {
+ "name": "subscribeToNewsletter",
+ "operation": "specs/subscription-service.yaml#subscribe"
+ },
+ {
+ "name": "confirmSubscription",
+ "operation": "specs/subscription-service.yaml#confirm"
+ },
+ {
+ "name": "deleteSubscription",
+ "operation": "specs/subscription-service.yaml#delete"
+ },
+ {
+ "name": "verifyEmail",
+ "operation": "specs/subscription-service.yaml#verify"
+ }
+ ],
+ "states": [
+ {
+ "name": "VerifyEmail",
+ "type": "operation",
+ "actions": [
+ {
+ "functionRef": {
+ "refName": "verifyEmail",
+ "arguments": {
+ "email": "${ .email }"
+ }
+ }
+ }
+ ],
+ "transition": {
+ "nextState": "ExitIfEmailExists"
+ }
+ },
+ {
+ "name": "ExitIfEmailExists",
+ "type": "switch",
+ "dataConditions": [
+ {
+ "condition": "${ .emailExists == true }",
+ "transition": {
+ "nextState": "NoSubscription"
+ }
+ },
+ {
+ "condition": "${ .emailExists == false }",
+ "transition": {
+ "nextState": "SubscribeAndWaitForConfirmation"
+ }
+ }
+ ]
+ },
+ {
+ "name": "SubscribeAndWaitForConfirmation",
+ "type": "callback",
+ "action": {
+ "functionRef": {
+ "refName": "subscribeToNewsletter",
+ "arguments": {
+ "email": "${ .email }",
+ "id": "$WORKFLOW.instanceId",
+ "name": "${ .name }"
+ }
+ }
+ },
+ "eventRef": "ConfirmSubscriptionEvent",
+ "transition": {
+ "nextState": "CheckConfirmation"
+ },
+ "timeouts": {
+ "eventTimeout": "PT3M"
+ }
+ },
+ {
+ "name" : "CheckConfirmation",
+ "type" : "switch",
+ "dataConditions": [
+ {
+ "condition": "${ .confirmed == true }",
+ "transition": "ConfirmSubscription"
+ }
+ ],
+ "defaultCondition": {
+ "transition": "DeleteSubscription"
+ }
+ },
+ {
+ "name": "ConfirmSubscription",
+ "type": "operation",
+ "actions": [
+ {
+ "functionRef": {
+ "refName": "confirmSubscription",
+ "arguments": {
+ "email": "${ .email }",
+ "id": "$WORKFLOW.instanceId",
+ "name": "${ .name }"
+ }
+ }
+ }
+ ],
+ "end": {
+ "produceEvents": [
+ {
+ "eventRef": "NewSubscriptionEvent"
+ }
+ ],
+ "terminate": true
+ }
+ },
+ {
+ "name": "DeleteSubscription",
+ "type": "operation",
+ "actions": [
+ {
+ "functionRef": {
+ "refName": "deleteSubscription",
+ "arguments": {
+ "id": "$WORKFLOW.instanceId"
+ }
+ }
+ }
+ ],
+ "end": true
+ },
+ {
+ "name": "NoSubscription",
+ "type": "inject",
+ "data": {
+ "subscribed": true
+ },
+ "end": true
+ }
+ ]
+}
+----
+
+The newsletter-subscription example involves two services:
+
+* Newsletter subscription application. It allows you to create new
subscriptions and runs the workflow.
+* Newsletter subscription Backend. It allows you to see the pending and
approved subscriptions
+
+Both services provide specific user interfaces to allow to track what's going
on with the subscriptions
+
+[#workflow_newsletter_subscription_ui]
+== The User Interface
+As a Quarkus project, you can place the UI resources in the
`src/main/resources/META-INF/resources` folder.
+
+The Newsletter Subscription Application (subscription-flow) has a user
interface to interact with the workflow without having to rely on the command
line to push events or make HTTP requests:
+
+The used resources are available at
link:{flow_newsletter_subscription_url}/subscription-flow/src/main/resources/META-INF/resources[Newsletter
Subscription Application flow UI resources].
+
+.Newsletter subscription user interface
+image::use-cases/newsletter-subscription/newsletter-subscription-ui.png[Newsletter
subscription UI]
+
+The Newsletter Subscription backend (subscription-service) has a user
interface to see the state of the existing subscriptions
+
+The used resources are available at
link:{flow_newsletter_subscription_url}/subscription-service/src/main/resources/META-INF/resources[Subscription
service UI resources].
+
+.Newsletter subscription backend user interface
+image::use-cases/newsletter-subscription/newsletter-subscription-backend-ui.png[Newsletter
subscription backend UI]
+
+== Executing the workflows
+
+In a command terminal, clone the `kogito-examples` repository, navigate to the
cloned directory, and follow
link:{kogito_sw_examples_url}/serverless-workflow-newsletter-subscription/README.md#running-on-knative[these
steps]:
+
+[source, bash]
+----
+git clone https://github.com/apache/incubator-kie-kogito-examples.git
+
+cd
kogito-examples/serverless-workflow-examples/serverless-workflow-newsletter-subscription
+----
+
+=== Architecture
+
+The following diagram shows the architecture for this use case:
+
+. Whenever a workflow needs to program a timer for a given timeout, a cloud
event is sent to the {job_service_xref}#integration-with-the-workflows[job
service] for that purpose.
+. When a timer is overdue, a rest call is executed to notify the workflow,
which then must execute according to the given state semantic.
+. Workflow and job status changes are propagated to the {data_index_xref}[data
index service] via cloud events.
+
+.Knative Workflow with Job Service architecture
+image::use-cases/newsletter-subscription/newsletter-subscription-Architecture.png[]
+
+* *subscription-flow:* Is the Quarkus Workflow Project that contains the
workflows that must be maven built, and deployed into the kubernetes cluster.
+
+* *subscription-service:* Is the Quarkus Workflow Project that contains the
backend operations, that must be maven built, and deployed into the kubernetes
cluster.
+
+* *jobs-service-postresql:* Is the job service that will be deployed into the
kubernetes cluster.
+
+* *data-index-service-postgresql:* Is the data index service that will be
deployed into the kubernetes cluster.
+
+* *timeouts-showcase-database:* Is the PostgreSQL instance that will be
deployed into the kubernetes cluster.
+
+[NOTE]
+====
+For simplification purposes, a single database instance is used for both
services to store the information about the workflow instances, and the timers.
However, in a production environment, it is recommended to have independent
database instances.
+====
+
+
+For more information about knative eventing outgoing CloudEvents over HTTP,
see
xref:use-cases/advanced-developer-use-cases/event-orchestration/consume-produce-events-with-knative-eventing.adoc[].
+
+
+== Additional resources
+
+* xref:core/timeouts-support.adoc[Timeouts support in {product_name}]
+*
xref:use-cases/advanced-developer-use-cases/deployments/deploying-on-minikube.adoc[]
+*
xref:use-cases/advanced-developer-use-cases/event-orchestration/consume-produce-events-with-knative-eventing.adoc[]
+
+include::../../../_common-content/report-issue.adoc[]
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]