Update documentation on topic and subscription with illustrations (#523)

* Update runtime architecture documentation

* Update documentation on topic and subscription with illustrations
This commit is contained in:
Eric Zhu
2024-09-17 01:29:38 -07:00
committed by GitHub
parent 0072ea5a2b
commit b2f1b839d9
5 changed files with 217 additions and 6 deletions

View File

@@ -0,0 +1,106 @@
<mxfile host="app.diagrams.net" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 Edg/128.0.0.0" version="24.7.6">
<diagram id="SL2L58OzhDkTRMMmBrpl" name="Page-1">
<mxGraphModel dx="765" dy="1158" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="xynyrZGPAnKqHGhxIo0k-36" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" vertex="1" parent="1">
<mxGeometry x="200" y="390" width="380" height="270" as="geometry" />
</mxCell>
<mxCell id="xynyrZGPAnKqHGhxIo0k-15" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="xynyrZGPAnKqHGhxIo0k-1" target="xynyrZGPAnKqHGhxIo0k-2">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="xynyrZGPAnKqHGhxIo0k-16" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="xynyrZGPAnKqHGhxIo0k-1" target="xynyrZGPAnKqHGhxIo0k-3">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="xynyrZGPAnKqHGhxIo0k-17" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="xynyrZGPAnKqHGhxIo0k-1" target="xynyrZGPAnKqHGhxIo0k-4">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="xynyrZGPAnKqHGhxIo0k-1" value="Topic" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" vertex="1" parent="1">
<mxGeometry x="220" y="510" width="80" height="40" as="geometry" />
</mxCell>
<mxCell id="xynyrZGPAnKqHGhxIo0k-18" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="xynyrZGPAnKqHGhxIo0k-2" target="xynyrZGPAnKqHGhxIo0k-6">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="xynyrZGPAnKqHGhxIo0k-2" value="Subscription" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
<mxGeometry x="345" y="450" width="95" height="40" as="geometry" />
</mxCell>
<mxCell id="xynyrZGPAnKqHGhxIo0k-19" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.25;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="xynyrZGPAnKqHGhxIo0k-3" target="xynyrZGPAnKqHGhxIo0k-7">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="xynyrZGPAnKqHGhxIo0k-20" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.75;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="xynyrZGPAnKqHGhxIo0k-3" target="xynyrZGPAnKqHGhxIo0k-8">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="xynyrZGPAnKqHGhxIo0k-3" value="Subscription" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
<mxGeometry x="345" y="510" width="95" height="40" as="geometry" />
</mxCell>
<mxCell id="xynyrZGPAnKqHGhxIo0k-22" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="xynyrZGPAnKqHGhxIo0k-4" target="xynyrZGPAnKqHGhxIo0k-9">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="xynyrZGPAnKqHGhxIo0k-4" value="Subscription" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
<mxGeometry x="345" y="570" width="95" height="40" as="geometry" />
</mxCell>
<mxCell id="xynyrZGPAnKqHGhxIo0k-27" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="xynyrZGPAnKqHGhxIo0k-6" target="xynyrZGPAnKqHGhxIo0k-23">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="xynyrZGPAnKqHGhxIo0k-6" value="Agent ID" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="486" y="420" width="70" height="40" as="geometry" />
</mxCell>
<mxCell id="xynyrZGPAnKqHGhxIo0k-28" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="xynyrZGPAnKqHGhxIo0k-7" target="xynyrZGPAnKqHGhxIo0k-24">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="xynyrZGPAnKqHGhxIo0k-7" value="Agent ID" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="486" y="480" width="70" height="40" as="geometry" />
</mxCell>
<mxCell id="xynyrZGPAnKqHGhxIo0k-29" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="xynyrZGPAnKqHGhxIo0k-8" target="xynyrZGPAnKqHGhxIo0k-25">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="xynyrZGPAnKqHGhxIo0k-8" value="Agent ID" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="486" y="540" width="70" height="40" as="geometry" />
</mxCell>
<mxCell id="xynyrZGPAnKqHGhxIo0k-30" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="xynyrZGPAnKqHGhxIo0k-9" target="xynyrZGPAnKqHGhxIo0k-26">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="xynyrZGPAnKqHGhxIo0k-9" value="Agent ID" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="486" y="600" width="70" height="40" as="geometry" />
</mxCell>
<mxCell id="xynyrZGPAnKqHGhxIo0k-12" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="xynyrZGPAnKqHGhxIo0k-11" target="xynyrZGPAnKqHGhxIo0k-1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="xynyrZGPAnKqHGhxIo0k-11" value="Message" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="100" y="515" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="xynyrZGPAnKqHGhxIo0k-13" value="Publish" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
<mxGeometry x="140" y="490" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="xynyrZGPAnKqHGhxIo0k-23" value="Agent" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
<mxGeometry x="630" y="420" width="70" height="40" as="geometry" />
</mxCell>
<mxCell id="xynyrZGPAnKqHGhxIo0k-24" value="Agent" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
<mxGeometry x="630" y="480" width="70" height="40" as="geometry" />
</mxCell>
<mxCell id="xynyrZGPAnKqHGhxIo0k-25" value="Agent" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
<mxGeometry x="630" y="540" width="70" height="40" as="geometry" />
</mxCell>
<mxCell id="xynyrZGPAnKqHGhxIo0k-26" value="Agent" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
<mxGeometry x="630" y="600" width="70" height="40" as="geometry" />
</mxCell>
<mxCell id="xynyrZGPAnKqHGhxIo0k-31" value="Deliver" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
<mxGeometry x="570" y="400" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="xynyrZGPAnKqHGhxIo0k-32" value="Deliver" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
<mxGeometry x="570" y="470" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="xynyrZGPAnKqHGhxIo0k-33" value="Deliver" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
<mxGeometry x="570" y="530" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="xynyrZGPAnKqHGhxIo0k-34" value="Deliver" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
<mxGeometry x="570" y="590" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="xynyrZGPAnKqHGhxIo0k-35" value="Mapping Topic to Agent ID" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
<mxGeometry x="312.5" y="400" width="160" height="30" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View File

@@ -0,0 +1,89 @@
<mxfile host="app.diagrams.net" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 Edg/128.0.0.0" version="24.7.6">
<diagram id="SEMb81fnvzcG-_hcjzhJ" name="Page-1">
<mxGraphModel dx="1213" dy="1158" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="0t9SMKTS3B_TfDHjOXI4-1" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" vertex="1" parent="1">
<mxGeometry x="150" y="410" width="510" height="290" as="geometry" />
</mxCell>
<mxCell id="0t9SMKTS3B_TfDHjOXI4-50" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=none;dashed=1;" vertex="1" parent="1">
<mxGeometry x="320" y="420" width="170" height="270" as="geometry" />
</mxCell>
<mxCell id="0t9SMKTS3B_TfDHjOXI4-42" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="0t9SMKTS3B_TfDHjOXI4-5" target="0t9SMKTS3B_TfDHjOXI4-37">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="0t9SMKTS3B_TfDHjOXI4-5" value="Topic_1&lt;div&gt;type=&quot;github_issues&quot;&lt;br&gt;source=&quot;.../issues/1&quot;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" vertex="1" parent="1">
<mxGeometry x="170" y="520" width="140" height="60" as="geometry" />
</mxCell>
<mxCell id="0t9SMKTS3B_TfDHjOXI4-13" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="0t9SMKTS3B_TfDHjOXI4-14" target="0t9SMKTS3B_TfDHjOXI4-24">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="0t9SMKTS3B_TfDHjOXI4-14" value="AgentID_1&lt;div&gt;type=&quot;triage_agent&quot;, key=&quot;.,./issues/1&quot;&lt;br&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="500" y="520" width="140" height="60" as="geometry" />
</mxCell>
<mxCell id="0t9SMKTS3B_TfDHjOXI4-21" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="0t9SMKTS3B_TfDHjOXI4-22" target="0t9SMKTS3B_TfDHjOXI4-5">
<mxGeometry relative="1" as="geometry">
<mxPoint x="145" y="555" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="0t9SMKTS3B_TfDHjOXI4-22" value="Message" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="51" y="536" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="0t9SMKTS3B_TfDHjOXI4-23" value="Publish" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
<mxGeometry x="96" y="516" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="0t9SMKTS3B_TfDHjOXI4-24" value="TriageAgent" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
<mxGeometry x="710" y="531" width="86" height="40" as="geometry" />
</mxCell>
<mxCell id="0t9SMKTS3B_TfDHjOXI4-28" value="Deliver" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
<mxGeometry x="650" y="516" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="0t9SMKTS3B_TfDHjOXI4-43" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="0t9SMKTS3B_TfDHjOXI4-37" target="0t9SMKTS3B_TfDHjOXI4-14">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="0t9SMKTS3B_TfDHjOXI4-37" value="Subscription&lt;div&gt;Topic_1 -&amp;gt; AgentID_1&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
<mxGeometry x="337.5" y="520" width="135" height="60" as="geometry" />
</mxCell>
<mxCell id="0t9SMKTS3B_TfDHjOXI4-49" value="Auto-generated from TypeSubscription&lt;div&gt;topic_type=&quot;github_issues&quot;&lt;/div&gt;&lt;div&gt;agent_type=&quot;triage_agent&quot;&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="317.5" y="430" width="175" height="60" as="geometry" />
</mxCell>
<mxCell id="0t9SMKTS3B_TfDHjOXI4-63" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="0t9SMKTS3B_TfDHjOXI4-64" target="0t9SMKTS3B_TfDHjOXI4-73">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="0t9SMKTS3B_TfDHjOXI4-64" value="Topic_9&lt;div&gt;type=&quot;github_issues&quot;&lt;br&gt;source=&quot;.../issues/9&quot;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" vertex="1" parent="1">
<mxGeometry x="170" y="614" width="140" height="60" as="geometry" />
</mxCell>
<mxCell id="0t9SMKTS3B_TfDHjOXI4-65" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="0t9SMKTS3B_TfDHjOXI4-66" target="0t9SMKTS3B_TfDHjOXI4-70">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="0t9SMKTS3B_TfDHjOXI4-66" value="AgentID_9&lt;div&gt;type=&quot;triage_agent&quot;, key=&quot;.,./issues/9&quot;&lt;br&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="500" y="614" width="140" height="60" as="geometry" />
</mxCell>
<mxCell id="0t9SMKTS3B_TfDHjOXI4-67" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="0t9SMKTS3B_TfDHjOXI4-68" target="0t9SMKTS3B_TfDHjOXI4-64">
<mxGeometry relative="1" as="geometry">
<mxPoint x="145" y="649" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="0t9SMKTS3B_TfDHjOXI4-68" value="Message" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="51" y="630" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="0t9SMKTS3B_TfDHjOXI4-69" value="Publish" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
<mxGeometry x="96" y="610" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="0t9SMKTS3B_TfDHjOXI4-70" value="TriageAgent" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
<mxGeometry x="710" y="625" width="86" height="40" as="geometry" />
</mxCell>
<mxCell id="0t9SMKTS3B_TfDHjOXI4-71" value="Deliver" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
<mxGeometry x="650" y="610" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="0t9SMKTS3B_TfDHjOXI4-72" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="0t9SMKTS3B_TfDHjOXI4-73" target="0t9SMKTS3B_TfDHjOXI4-66">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="0t9SMKTS3B_TfDHjOXI4-73" value="Subscription&lt;div&gt;Topic_9 -&amp;gt; AgentID_9&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
<mxGeometry x="337.5" y="614" width="135" height="60" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 123 KiB

View File

@@ -42,6 +42,12 @@ silos.
A subscription maps topic to agent IDs.
![Subscription](subscription.svg)
The diagram above shows the relationship between topic and subscription.
An agent runtime keeps track of the subscriptions and uses them to deliver
messages to agents.
If a topic has no subscription, messages published to this topic will
not be delivered to any agent.
If a topic has many subscriptions, messages will be delivered
@@ -52,7 +58,7 @@ Applications can add or remove subscriptions using agent runtime's API.
A type-based subscription maps a topic type to an agent type
(see [agent ID](./agent-identity-and-lifecycle.md#agent-id)).
It declares a mapping from topics to agent IDs without knowing the
It declares an unbounded mapping from topics to agent IDs without knowing the
exact topic sources and agent keys.
The mechanism is simple: any topic matching the type-based subscription's
topic type will be mapped to an agent ID with the subscription's agent type
@@ -62,15 +68,17 @@ and the agent key assigned to the value of the topic source.
Type-Based Subscription = Topic Type --> Agent Type
```
For example, a type-based subscription maps topic type `"GitHub_Issues"`
to agent type `"Triage_Agent"`.
For example, a type-based subscription maps topic type `"github_issues"`
to agent type `"triage_agent"`.
When a broadcast message is published to the topic
`("GitHub_Issues", "github.com/microsoft/autogen/issues/99"),
the subscription maps the topic to an agent instance with ID
`("Triage_Agent", "github.com/microsoft/autogen/issues/99")`,
`("gitHub_issues", "github.com/microsoft/autogen/issues/1")`,
a subscription will be created to map the topic to an agent instance with ID
`("triage_agent", "github.com/microsoft/autogen/issues/1")`,
and the runtime will deliver the message to that agent, creating it
if not exist.
![Type-Based Subscription](type-subscription.svg)
Generally speaking, type-based subscription is the preferred way to delcare
subscriptions. It is portable and data-independent:
developers do not need to write application code that depends on specific agent IDs.

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 221 KiB