amps-python-client 5.3.4.1__zip
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- amps-python-client-5.3.4.1/HISTORY +7 -0
- amps-python-client-5.3.4.1/LICENSE +157 -0
- amps-python-client-5.3.4.1/PKG-INFO +112 -0
- amps-python-client-5.3.4.1/README.md +96 -0
- amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/ack-messages.doctree +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/content-messages.doctree +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/intro.doctree +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/logon.doctree +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/protocol-reference.doctree +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/publishing.doctree +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/query-delimiters.doctree +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/query-subscribe.doctree +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/removing.doctree +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/utilities.doctree +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/doctrees/environment.pickle +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/doctrees/index.doctree +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/.buildinfo +4 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_images/caution.svg +25 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/ack-messages.rst.txt +32 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/content-messages.rst.txt +27 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/intro.rst.txt +43 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/logon.rst.txt +231 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/protocol-reference.rst.txt +1474 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/publishing.rst.txt +25 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/query-delimiters.rst.txt +12 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/query-subscribe.rst.txt +23 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/removing.rst.txt +6 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/utilities.rst.txt +13 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_sources/index.rst.txt +56 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/ajax-loader.gif +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/alabaster.css +699 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/basic.css +632 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/comment-bright.png +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/comment-close.png +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/comment.png +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/custom.css +192 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/custom.css.backup +161 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/doctools.js +287 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/down-pressed.png +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/down.png +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/file.png +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/flag_logo.png +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/flag_logo.svg +153 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/jquery-3.1.0.js +10074 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/jquery.js +4 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/minus.png +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/plus.png +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/pygments.css +74 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/searchtools.js +758 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/underscore-1.3.1.js +999 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/underscore.js +31 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/up-pressed.png +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/up.png +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/websupport.js +808 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/chapters/ack-messages.html +417 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/chapters/content-messages.html +417 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/chapters/intro.html +126 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/chapters/logon.html +295 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/chapters/protocol-reference.html +1190 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/chapters/publishing.html +436 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/chapters/query-delimiters.html +173 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/chapters/query-subscribe.html +2123 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/chapters/removing.html +299 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/chapters/utilities.html +287 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/genindex.html +97 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/index.html +138 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/objects.inv +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/search.html +107 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/searchindex.js +1 -0
- amps-python-client-5.3.4.1/docs/html/.buildinfo +4 -0
- amps-python-client-5.3.4.1/docs/html/_sources/code.rst.txt +6 -0
- amps-python-client-5.3.4.1/docs/html/_sources/index.rst.txt +29 -0
- amps-python-client-5.3.4.1/docs/html/_static/ajax-loader.gif +0 -0
- amps-python-client-5.3.4.1/docs/html/_static/basic.css +632 -0
- amps-python-client-5.3.4.1/docs/html/_static/classic.css +261 -0
- amps-python-client-5.3.4.1/docs/html/_static/comment-bright.png +0 -0
- amps-python-client-5.3.4.1/docs/html/_static/comment-close.png +0 -0
- amps-python-client-5.3.4.1/docs/html/_static/comment.png +0 -0
- amps-python-client-5.3.4.1/docs/html/_static/default.css +1 -0
- amps-python-client-5.3.4.1/docs/html/_static/doctools.js +287 -0
- amps-python-client-5.3.4.1/docs/html/_static/down-pressed.png +0 -0
- amps-python-client-5.3.4.1/docs/html/_static/down.png +0 -0
- amps-python-client-5.3.4.1/docs/html/_static/file.png +0 -0
- amps-python-client-5.3.4.1/docs/html/_static/jquery-3.1.0.js +10074 -0
- amps-python-client-5.3.4.1/docs/html/_static/jquery.js +4 -0
- amps-python-client-5.3.4.1/docs/html/_static/minus.png +0 -0
- amps-python-client-5.3.4.1/docs/html/_static/plus.png +0 -0
- amps-python-client-5.3.4.1/docs/html/_static/pygments.css +74 -0
- amps-python-client-5.3.4.1/docs/html/_static/searchtools.js +758 -0
- amps-python-client-5.3.4.1/docs/html/_static/sidebar.js +159 -0
- amps-python-client-5.3.4.1/docs/html/_static/underscore-1.3.1.js +999 -0
- amps-python-client-5.3.4.1/docs/html/_static/underscore.js +31 -0
- amps-python-client-5.3.4.1/docs/html/_static/up-pressed.png +0 -0
- amps-python-client-5.3.4.1/docs/html/_static/up.png +0 -0
- amps-python-client-5.3.4.1/docs/html/_static/websupport.js +808 -0
- amps-python-client-5.3.4.1/docs/html/code.html +6503 -0
- amps-python-client-5.3.4.1/docs/html/genindex.html +1361 -0
- amps-python-client-5.3.4.1/docs/html/index.html +131 -0
- amps-python-client-5.3.4.1/docs/html/objects.inv +0 -0
- amps-python-client-5.3.4.1/docs/html/py-modindex.html +111 -0
- amps-python-client-5.3.4.1/docs/html/search.html +107 -0
- amps-python-client-5.3.4.1/docs/html/searchindex.js +1 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/advanced-topics.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/cpp-compiler-list.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/cpp-feature-table.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/creating-commands.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/deltas.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/error-handling.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/exceptions.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/first-program.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/high-availability.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/installing.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/introduction.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/moving-from-python-lite.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/performance-tips.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/queues.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/sow.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/subscriptions.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/utilities.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/environment.pickle +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/index.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/html/.buildinfo +4 -0
- amps-python-client-5.3.4.1/docs/python/html/_images/caution.png +0 -0
- amps-python-client-5.3.4.1/docs/python/html/_images/caution.svg +25 -0
- amps-python-client-5.3.4.1/docs/python/html/_images/connection_string.svg +461 -0
- amps-python-client-5.3.4.1/docs/python/html/_images/important.png +0 -0
- amps-python-client-5.3.4.1/docs/python/html/_images/important.svg +25 -0
- amps-python-client-5.3.4.1/docs/python/html/_images/tip.png +0 -0
- amps-python-client-5.3.4.1/docs/python/html/_images/tip.svg +31 -0
- amps-python-client-5.3.4.1/docs/python/html/_images/warning.png +0 -0
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/advanced-topics.rst.txt +398 -0
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/cpp-compiler-list.rst.txt +6 -0
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/cpp-feature-table.rst.txt +26 -0
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/creating-commands.rst.txt +159 -0
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/deltas.rst.txt +79 -0
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/error-handling.rst.txt +482 -0
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/exceptions.rst.txt +128 -0
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/first-program.rst.txt +142 -0
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/high-availability.rst.txt +876 -0
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/installing.rst.txt +184 -0
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/introduction.rst.txt +50 -0
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/moving-from-python-lite.rst.txt +32 -0
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/performance-tips.rst.txt +434 -0
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/queues.rst.txt +282 -0
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/sow.rst.txt +292 -0
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/subscriptions.rst.txt +374 -0
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/utilities.rst.txt +214 -0
- amps-python-client-5.3.4.1/docs/python/html/_sources/index.rst.txt +44 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/ajax-loader.gif +0 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/alabaster.css +699 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/basic.css +632 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/comment-bright.png +0 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/comment-close.png +0 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/comment.png +0 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/custom.css +192 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/custom.css.backup +161 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/doctools.js +287 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/down-pressed.png +0 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/down.png +0 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/file.png +0 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/flag_logo.png +0 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/flag_logo.svg +153 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/jquery-3.1.0.js +10074 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/jquery.js +4 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/minus.png +0 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/plus.png +0 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/pygments.css +74 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/searchtools.js +758 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/underscore-1.3.1.js +999 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/underscore.js +31 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/up-pressed.png +0 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/up.png +0 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/websupport.js +808 -0
- amps-python-client-5.3.4.1/docs/python/html/chapters/advanced-topics.html +447 -0
- amps-python-client-5.3.4.1/docs/python/html/chapters/cpp-compiler-list.html +92 -0
- amps-python-client-5.3.4.1/docs/python/html/chapters/cpp-feature-table.html +156 -0
- amps-python-client-5.3.4.1/docs/python/html/chapters/creating-commands.html +2837 -0
- amps-python-client-5.3.4.1/docs/python/html/chapters/deltas.html +169 -0
- amps-python-client-5.3.4.1/docs/python/html/chapters/error-handling.html +746 -0
- amps-python-client-5.3.4.1/docs/python/html/chapters/exceptions.html +272 -0
- amps-python-client-5.3.4.1/docs/python/html/chapters/first-program.html +499 -0
- amps-python-client-5.3.4.1/docs/python/html/chapters/high-availability.html +1014 -0
- amps-python-client-5.3.4.1/docs/python/html/chapters/installing.html +264 -0
- amps-python-client-5.3.4.1/docs/python/html/chapters/introduction.html +245 -0
- amps-python-client-5.3.4.1/docs/python/html/chapters/moving-from-python-lite.html +118 -0
- amps-python-client-5.3.4.1/docs/python/html/chapters/performance-tips.html +499 -0
- amps-python-client-5.3.4.1/docs/python/html/chapters/queues.html +352 -0
- amps-python-client-5.3.4.1/docs/python/html/chapters/sow.html +381 -0
- amps-python-client-5.3.4.1/docs/python/html/chapters/subscriptions.html +535 -0
- amps-python-client-5.3.4.1/docs/python/html/chapters/utilities.html +302 -0
- amps-python-client-5.3.4.1/docs/python/html/genindex.html +351 -0
- amps-python-client-5.3.4.1/docs/python/html/index.html +380 -0
- amps-python-client-5.3.4.1/docs/python/html/objects.inv +0 -0
- amps-python-client-5.3.4.1/docs/python/html/search.html +107 -0
- amps-python-client-5.3.4.1/docs/python/html/searchindex.js +1 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/doctrees/chapters/crankitup.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/doctrees/chapters/equipment.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/doctrees/environment.pickle +0 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/doctrees/index.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/.buildinfo +4 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_sources/chapters/crankitup.rst.txt +155 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_sources/chapters/equipment.rst.txt +19 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_sources/index.rst.txt +20 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/ajax-loader.gif +0 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/alabaster.css +699 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/basic.css +632 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/comment-bright.png +0 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/comment-close.png +0 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/comment.png +0 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/custom.css +192 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/custom.css.backup +161 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/doctools.js +287 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/down-pressed.png +0 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/down.png +0 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/file.png +0 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/flag_logo.png +0 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/flag_logo.svg +153 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/jquery-3.1.0.js +10074 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/jquery.js +4 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/minus.png +0 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/plus.png +0 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/pygments.css +74 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/searchtools.js +758 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/underscore-1.3.1.js +999 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/underscore.js +31 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/up-pressed.png +0 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/up.png +0 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/websupport.js +808 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/chapters/crankitup.html +271 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/chapters/equipment.html +105 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/genindex.html +97 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/index.html +382 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/objects.inv +0 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/search.html +107 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/searchindex.js +1 -0
- amps-python-client-5.3.4.1/docs/resources/custom.css +9 -0
- amps-python-client-5.3.4.1/docs/resources/flag_logo.svg +153 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/acks.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/actions.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/amps-statistics.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/amps_expressions.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/amps_functions.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/auxiliary_modules.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/config-file-shortcuts.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/conflated_topics.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/constructing-fields.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/daemon.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/delta.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/distribution.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/enrichment.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/events.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/file_format_versions.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/glossary.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/ha.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/installing_and_starting.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/intro.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/logging.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/messageTypes.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/monitoring.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/oof.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/operation.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/pub_sub.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/queues.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/replication.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/securing.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/sow.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/sow_queries.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/spark.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/transports.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/troubleshooting.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/txlog.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/usecases.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/utilities.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/views.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/environment.pickle +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/index.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/.buildinfo +4 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/AMPS-Queues-Intro.svg +1330 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/GeoRepl.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/HA_async_ack.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/HA_sync_ack.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/Hot-Hot-Replication.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/MessageOrdering.svg +235 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/OOF5.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/OOF6.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/OOF7.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/OOF8.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/PubSub1.svg +1 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/PubSub2.svg +1 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/SOWAndSubscribeAndReplace.svg +684 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/SOWQuery1.svg +402 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/SOWQuery2.svg +505 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/UseCaseFig1.svg +1 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/UseCaseFig2.svg +1 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/UseCaseFig3.svg +1 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/UseCaseFig4.svg +1 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/caution.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/caution.svg +25 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/chicago_group.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/delta_original_messages.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/delta_update_message.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/important.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/important.svg +25 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/inline_view_conflation.svg +1 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/paginated_subs_pub.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/paginated_subs_sub.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/queue_usage_overview.svg +627 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/replication_hub.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/replication_scenario_with_ha.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/sow_overview_1.svg +248 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/sow_overview_2.svg +183 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/sow_update_sequence.svg +1 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/tip.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/tip.svg +31 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/warning.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/warning.svg +23 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/acks.rst.txt +232 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/actions.rst.txt +111 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/amps-statistics.rst.txt +358 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/amps_expressions.rst.txt +83 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/amps_functions.rst.txt +11 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/auxiliary_modules.rst.txt +86 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/config-file-shortcuts.rst.txt +9 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/conflated_topics.rst.txt +111 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/constructing-fields.rst.txt +269 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/daemon.rst.txt +232 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/delta.rst.txt +556 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/distribution.rst.txt +186 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/enrichment.rst.txt +191 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/events.rst.txt +39 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/file_format_versions.rst.txt +203 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/glossary.rst.txt +101 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/ha.rst.txt +465 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/installing_and_starting.rst.txt +23 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/intro.rst.txt +116 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/logging.rst.txt +34 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/messageTypes.rst.txt +1398 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/monitoring.rst.txt +326 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/oof.rst.txt +312 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/operation.rst.txt +27 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/pub_sub.rst.txt +49 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/queues.rst.txt +1351 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/replication.rst.txt +1228 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/securing.rst.txt +657 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/sow.rst.txt +57 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/sow_queries.rst.txt +25 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/spark.rst.txt +824 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/transports.rst.txt +291 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/troubleshooting.rst.txt +517 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/txlog.rst.txt +62 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/usecases.rst.txt +21 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/utilities.rst.txt +62 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/views.rst.txt +175 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/index.rst.txt +110 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/ajax-loader.gif +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/alabaster.css +695 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/basic.css +632 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/comment-bright.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/comment-close.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/comment.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/custom.css +192 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/custom.css.backup +161 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/doctools.js +287 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/down-pressed.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/down.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/file.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/flag_logo.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/flag_logo.svg +153 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/jquery-3.1.0.js +10074 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/jquery.js +4 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/minus.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/plus.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/pygments.css +74 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/searchtools.js +758 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/underscore-1.3.1.js +999 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/underscore.js +31 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/up-pressed.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/up.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/websupport.js +808 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/acks.html +289 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/actions.html +3782 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/amps-statistics.html +439 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/amps_expressions.html +1552 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/amps_functions.html +1626 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/auxiliary_modules.html +2548 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/config-file-shortcuts.html +508 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/conflated_topics.html +328 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/constructing-fields.html +447 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/daemon.html +295 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/delta.html +609 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/distribution.html +246 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/enrichment.html +264 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/events.html +449 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/file_format_versions.html +229 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/glossary.html +215 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/ha.html +978 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/installing_and_starting.html +357 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/intro.html +572 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/logging.html +972 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/messageTypes.html +1280 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/monitoring.html +718 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/oof.html +341 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/operation.html +1515 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/pub_sub.html +934 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/queues.html +1767 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/replication.html +1777 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/securing.html +697 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/sow.html +1038 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/sow_queries.html +621 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/spark.html +819 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/transports.html +352 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/troubleshooting.html +530 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/txlog.html +1013 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/usecases.html +288 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/utilities.html +133 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/views.html +1120 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/genindex.html +1261 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/index.html +163 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/objects.inv +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/search.html +106 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/searchindex.js +1 -0
- amps-python-client-5.3.4.1/include/ampspy_bookmarkstore.hpp +63 -0
- amps-python-client-5.3.4.1/include/ampspy_compat.h +63 -0
- amps-python-client-5.3.4.1/include/ampspy_defs.hpp +181 -0
- amps-python-client-5.3.4.1/include/ampspy_recoverypointadapter.hpp +52 -0
- amps-python-client-5.3.4.1/include/ampspy_shims.hpp +113 -0
- amps-python-client-5.3.4.1/include/ampspy_type_object.hpp +242 -0
- amps-python-client-5.3.4.1/include/ampspy_types.hpp +1139 -0
- amps-python-client-5.3.4.1/include/ampspyver.h +30 -0
- amps-python-client-5.3.4.1/index.html +66 -0
- amps-python-client-5.3.4.1/samples/AMPSConsolePublisher.py +59 -0
- amps-python-client-5.3.4.1/samples/AMPSConsoleSubscriber.py +63 -0
- amps-python-client-5.3.4.1/samples/AMPSFIXBuilderPublisher.py +71 -0
- amps-python-client-5.3.4.1/samples/AMPSFIXShredderSubscriber.py +69 -0
- amps-python-client-5.3.4.1/samples/AMPSNVFIXBuilderPublisher.py +71 -0
- amps-python-client-5.3.4.1/samples/AMPSNVFIXShredderSubscriber.py +67 -0
- amps-python-client-5.3.4.1/samples/AMPSPublishForReplay.py +81 -0
- amps-python-client-5.3.4.1/samples/AMPSQueueConsumer.py +69 -0
- amps-python-client-5.3.4.1/samples/AMPSQueuePublisher.py +59 -0
- amps-python-client-5.3.4.1/samples/AMPSSOWConsolePublisher.py +67 -0
- amps-python-client-5.3.4.1/samples/AMPSSOWConsoleSubscriber.py +77 -0
- amps-python-client-5.3.4.1/samples/AMPSSOWandSubscribeConsoleSubscriber.py +79 -0
- amps-python-client-5.3.4.1/samples/AMPSSOWandSubscribeWithOOF.py +108 -0
- amps-python-client-5.3.4.1/samples/AMPSSubscribeForReplay.py +128 -0
- amps-python-client-5.3.4.1/samples/AMPSUpdateForOOF.py +123 -0
- amps-python-client-5.3.4.1/samples/CompositeMessagePublisher.py +84 -0
- amps-python-client-5.3.4.1/samples/CompositeMessageSubscriber.py +87 -0
- amps-python-client-5.3.4.1/samples/RandomServerChooser.py +41 -0
- amps-python-client-5.3.4.1/samples/sample.xml +335 -0
- amps-python-client-5.3.4.1/setup.py +209 -0
- amps-python-client-5.3.4.1/setup_amps.py +94 -0
- amps-python-client-5.3.4.1/src/ampspy_shims.cpp +203 -0
- amps-python-client-5.3.4.1/src/ampspy_type_object.cpp +484 -0
- amps-python-client-5.3.4.1/src/authenticator.cpp +128 -0
- amps-python-client-5.3.4.1/src/bookmarkstore.cpp +238 -0
- amps-python-client-5.3.4.1/src/client.cpp +2430 -0
- amps-python-client-5.3.4.1/src/client_docs.h +956 -0
- amps-python-client-5.3.4.1/src/cmessagehandler.cpp +151 -0
- amps-python-client-5.3.4.1/src/command.cpp +164 -0
- amps-python-client-5.3.4.1/src/command_docs.h +194 -0
- amps-python-client-5.3.4.1/src/compositemessagebuilder.cpp +111 -0
- amps-python-client-5.3.4.1/src/compositemessageparser.cpp +146 -0
- amps-python-client-5.3.4.1/src/conflatingrecoverypointadapter.cpp +194 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/BlockPublishStore.hpp +2053 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/BlockStore.hpp +677 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/BookmarkStore.hpp +542 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/Buffer.hpp +214 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/CompositeMessageBuilder.hpp +174 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/CompositeMessageParser.hpp +151 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/DefaultServerChooser.hpp +162 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/Field.hpp +719 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/HAClient.hpp +370 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/HAClientImpl.hpp +460 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/HybridPublishStore.hpp +481 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/LoggedBookmarkStore.hpp +1255 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/MMapBookmarkStore.hpp +1283 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/MMapStoreBuffer.hpp +290 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/MemoryBookmarkStore.hpp +1622 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/MemoryPublishStore.hpp +66 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/MemoryStoreBuffer.hpp +244 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/MemorySubscriptionManager.hpp +850 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/Message.hpp +1819 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/MessageRouter.hpp +618 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/PublishStore.hpp +158 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/ReconnectDelayStrategy.hpp +106 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/ReconnectDelayStrategyImpl.hpp +317 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/RecoveryPoint.hpp +323 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/RecoveryPointAdapter.hpp +501 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/RingBookmarkStore.hpp +669 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/SOWRecoveryPointAdapter.hpp +490 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/ServerChooser.hpp +145 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/ServerChooserImpl.hpp +95 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/amps.h +775 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/amps_generated.h +46 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/amps_impl.h +204 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/amps_ssl.h +78 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/ampscrc.hpp +210 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/ampsplusplus.hpp +8817 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/ampsuri.h +84 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/ampsver.h +41 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/ampsver.h.in +41 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/constants.hpp +194 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/util.hpp +1692 -0
- amps-python-client-5.3.4.1/src/cpp/src/amps_protocol.c +688 -0
- amps-python-client-5.3.4.1/src/cpp/src/amps_protocol_generated.h +80 -0
- amps-python-client-5.3.4.1/src/cpp/src/amps_ssl.c +489 -0
- amps-python-client-5.3.4.1/src/cpp/src/atfork.c +446 -0
- amps-python-client-5.3.4.1/src/cpp/src/client.c +483 -0
- amps-python-client-5.3.4.1/src/cpp/src/makefile +92 -0
- amps-python-client-5.3.4.1/src/cpp/src/message.c +837 -0
- amps-python-client-5.3.4.1/src/cpp/src/message_generated.h +611 -0
- amps-python-client-5.3.4.1/src/cpp/src/tcp.c +1489 -0
- amps-python-client-5.3.4.1/src/cpp/src/tcps.c +1894 -0
- amps-python-client-5.3.4.1/src/cpp/src/transports.c +123 -0
- amps-python-client-5.3.4.1/src/cpp/src/unix.c +984 -0
- amps-python-client-5.3.4.1/src/cpp/src/uri.c +301 -0
- amps-python-client-5.3.4.1/src/exponentialdelaystrategy.cpp +137 -0
- amps-python-client-5.3.4.1/src/failedwritehandler.cpp +116 -0
- amps-python-client-5.3.4.1/src/fixbuilder.cpp +146 -0
- amps-python-client-5.3.4.1/src/fixeddelaystrategy.cpp +114 -0
- amps-python-client-5.3.4.1/src/fixshredder.cpp +105 -0
- amps-python-client-5.3.4.1/src/fixshredder_docs.h +38 -0
- amps-python-client-5.3.4.1/src/haclient.cpp +691 -0
- amps-python-client-5.3.4.1/src/haclient_docs.h +132 -0
- amps-python-client-5.3.4.1/src/hybridpublishstore.cpp +137 -0
- amps-python-client-5.3.4.1/src/hybridpublishstore_docs.h +31 -0
- amps-python-client-5.3.4.1/src/memorybookmarkstore.cpp +373 -0
- amps-python-client-5.3.4.1/src/memorybookmarkstore_docs.h +39 -0
- amps-python-client-5.3.4.1/src/memorypublishstore.cpp +160 -0
- amps-python-client-5.3.4.1/src/memorypublishstore_docs.h +32 -0
- amps-python-client-5.3.4.1/src/message.cpp +765 -0
- amps-python-client-5.3.4.1/src/message_docs.h +306 -0
- amps-python-client-5.3.4.1/src/messagestream.cpp +623 -0
- amps-python-client-5.3.4.1/src/messagestream_docs.h +45 -0
- amps-python-client-5.3.4.1/src/mmapbookmarkstore.cpp +422 -0
- amps-python-client-5.3.4.1/src/nvfixbuilder.cpp +160 -0
- amps-python-client-5.3.4.1/src/nvfixbuilder_docs.h +33 -0
- amps-python-client-5.3.4.1/src/nvfixshredder.cpp +99 -0
- amps-python-client-5.3.4.1/src/nvfixshredder_docs.h +39 -0
- amps-python-client-5.3.4.1/src/publishstore.cpp +183 -0
- amps-python-client-5.3.4.1/src/raw_wrapper.cpp +756 -0
- amps-python-client-5.3.4.1/src/reason.cpp +71 -0
- amps-python-client-5.3.4.1/src/recoverypoint.cpp +135 -0
- amps-python-client-5.3.4.1/src/recoverypointadapter.cpp +171 -0
- amps-python-client-5.3.4.1/src/ringbookmarkstore.cpp +360 -0
- amps-python-client-5.3.4.1/src/serverchooser.cpp +245 -0
- amps-python-client-5.3.4.1/src/serverchooser_docs.h +39 -0
- amps-python-client-5.3.4.1/src/sowrecoverypointadapter.cpp +248 -0
- amps-python-client-5.3.4.1/src/store.cpp +62 -0
- amps-python-client-5.3.4.1/src/versioninfo.cpp +175 -0
|
@@ -0,0 +1,934 @@
|
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
|
2
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
6
|
+
<head>
|
|
7
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
8
|
+
|
|
9
|
+
<title>3. Publish and Subscribe — AMPS User Guide develop documentation</title>
|
|
10
|
+
|
|
11
|
+
<link rel="stylesheet" href="../_static/alabaster.css" type="text/css" />
|
|
12
|
+
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
|
13
|
+
|
|
14
|
+
<script type="text/javascript">
|
|
15
|
+
var DOCUMENTATION_OPTIONS = {
|
|
16
|
+
URL_ROOT: '../',
|
|
17
|
+
VERSION: 'develop',
|
|
18
|
+
COLLAPSE_INDEX: false,
|
|
19
|
+
FILE_SUFFIX: '.html',
|
|
20
|
+
HAS_SOURCE: true,
|
|
21
|
+
SOURCELINK_SUFFIX: '.txt'
|
|
22
|
+
};
|
|
23
|
+
</script>
|
|
24
|
+
<script type="text/javascript" src="../_static/jquery.js"></script>
|
|
25
|
+
<script type="text/javascript" src="../_static/underscore.js"></script>
|
|
26
|
+
<script type="text/javascript" src="../_static/doctools.js"></script>
|
|
27
|
+
<link rel="index" title="Index" href="../genindex.html" />
|
|
28
|
+
<link rel="search" title="Search" href="../search.html" />
|
|
29
|
+
<link rel="next" title="4. AMPS Expressions" href="amps_expressions.html" />
|
|
30
|
+
<link rel="prev" title="2. Installing and Starting AMPS" href="installing_and_starting.html" />
|
|
31
|
+
|
|
32
|
+
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
|
|
36
|
+
|
|
37
|
+
</head>
|
|
38
|
+
<body role="document">
|
|
39
|
+
<div class="document">
|
|
40
|
+
|
|
41
|
+
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
|
42
|
+
<div class="sphinxsidebarwrapper">
|
|
43
|
+
<p class="logo"><a href="../index.html">
|
|
44
|
+
<img class="logo" src="../_static/flag_logo.png" alt="Logo"/>
|
|
45
|
+
</a></p>
|
|
46
|
+
<h3><a href="../index.html">Table Of Contents</a></h3>
|
|
47
|
+
<ul>
|
|
48
|
+
<li><a class="reference internal" href="#">3. Publish and Subscribe</a><ul>
|
|
49
|
+
<li><a class="reference internal" href="#topics">Topics</a><ul>
|
|
50
|
+
<li><a class="reference internal" href="#ad-hoc-topics">Ad Hoc Topics</a></li>
|
|
51
|
+
<li><a class="reference internal" href="#matching-multiple-topics-with-regular-expressions">Matching Multiple Topics With Regular Expressions</a></li>
|
|
52
|
+
</ul>
|
|
53
|
+
</li>
|
|
54
|
+
<li><a class="reference internal" href="#filtering-subscriptions-by-content">Filtering Subscriptions By Content</a><ul>
|
|
55
|
+
<li><a class="reference internal" href="#example-filter-for-a-json-message">Example Filter for a JSON Message:</a></li>
|
|
56
|
+
<li><a class="reference internal" href="#example-filter-for-an-xml-message">Example Filter for an XML Message:</a></li>
|
|
57
|
+
<li><a class="reference internal" href="#example-filter-for-a-fix-message">Example Filter for a FIX Message:</a></li>
|
|
58
|
+
</ul>
|
|
59
|
+
</li>
|
|
60
|
+
<li><a class="reference internal" href="#conflated-subscriptions">Conflated Subscriptions</a><ul>
|
|
61
|
+
<li><a class="reference internal" href="#when-to-use-conflated-subscriptions">When to Use Conflated Subscriptions</a></li>
|
|
62
|
+
<li><a class="reference internal" href="#requesting-conflation-on-a-subscription">Requesting Conflation on a Subscription</a></li>
|
|
63
|
+
</ul>
|
|
64
|
+
</li>
|
|
65
|
+
<li><a class="reference internal" href="#replacing-subscriptions">Replacing Subscriptions</a><ul>
|
|
66
|
+
<li><a class="reference internal" href="#replacing-the-content-filter-on-a-subscription">Replacing the Content Filter on a Subscription</a></li>
|
|
67
|
+
<li><a class="reference internal" href="#replacing-the-topic-on-a-subscription">Replacing the Topic on a Subscription</a></li>
|
|
68
|
+
<li><a class="reference internal" href="#replacing-the-options-on-a-subscription">Replacing the Options on a Subscription</a></li>
|
|
69
|
+
</ul>
|
|
70
|
+
</li>
|
|
71
|
+
<li><a class="reference internal" href="#messages-in-amps">Messages in AMPS</a><ul>
|
|
72
|
+
<li><a class="reference internal" href="#introduction-to-amps-headers">Introduction to AMPS Headers</a></li>
|
|
73
|
+
</ul>
|
|
74
|
+
</li>
|
|
75
|
+
<li><a class="reference internal" href="#retrieving-part-of-a-message-with-a-select-list">Retrieving Part of a Message with a Select List</a><ul>
|
|
76
|
+
<li><a class="reference internal" href="#creating-select-lists">Creating Select Lists</a></li>
|
|
77
|
+
<li><a class="reference internal" href="#select-list-examples">Select List Examples</a></li>
|
|
78
|
+
</ul>
|
|
79
|
+
</li>
|
|
80
|
+
<li><a class="reference internal" href="#message-ordering">Message Ordering</a><ul>
|
|
81
|
+
<li><a class="reference internal" href="#replicated-message-ordering">Replicated Message Ordering</a></li>
|
|
82
|
+
</ul>
|
|
83
|
+
</li>
|
|
84
|
+
</ul>
|
|
85
|
+
</li>
|
|
86
|
+
</ul>
|
|
87
|
+
<div class="relations">
|
|
88
|
+
<h3>Related Topics</h3>
|
|
89
|
+
<ul>
|
|
90
|
+
<li><a href="../index.html">Documentation overview</a><ul>
|
|
91
|
+
<li>Previous: <a href="installing_and_starting.html" title="previous chapter">2. Installing and Starting AMPS</a></li>
|
|
92
|
+
<li>Next: <a href="amps_expressions.html" title="next chapter">4. AMPS Expressions</a></li>
|
|
93
|
+
</ul></li>
|
|
94
|
+
</ul>
|
|
95
|
+
</div>
|
|
96
|
+
<div id="searchbox" style="display: none" role="search">
|
|
97
|
+
<h3>Quick search</h3>
|
|
98
|
+
<form class="search" action="../search.html" method="get">
|
|
99
|
+
<div><input type="text" name="q" /></div>
|
|
100
|
+
<div><input type="submit" value="Go" /></div>
|
|
101
|
+
<input type="hidden" name="check_keywords" value="yes" />
|
|
102
|
+
<input type="hidden" name="area" value="default" />
|
|
103
|
+
</form>
|
|
104
|
+
</div>
|
|
105
|
+
<script type="text/javascript">$('#searchbox').show(0);</script>
|
|
106
|
+
</div>
|
|
107
|
+
</div>
|
|
108
|
+
<div class="documentwrapper">
|
|
109
|
+
<div class="bodywrapper">
|
|
110
|
+
<div class="body" role="main">
|
|
111
|
+
|
|
112
|
+
<div class="section" id="publish-and-subscribe">
|
|
113
|
+
<span id="pub-sub"></span><span id="ug-pub-sub"></span><span id="index-0"></span><h1>3. Publish and Subscribe<a class="headerlink" href="#publish-and-subscribe" title="Permalink to this headline">¶</a></h1>
|
|
114
|
+
<p>AMPS is a rich message delivery system. At the core of the system, the
|
|
115
|
+
AMPS engine is highly-optimized for publish and subscribe delivery. In
|
|
116
|
+
this style of messaging, publishers send messages to a message broker
|
|
117
|
+
(such as AMPS) which then routes and delivers messages to the
|
|
118
|
+
subscribers. “Pub/Sub” systems, as they are often called, are a key part
|
|
119
|
+
of most enterprise message buses, where publishers broadcast messages
|
|
120
|
+
without necessarily knowing all of the subscribers that will receive
|
|
121
|
+
them. This decoupling of the publishers from the subscribers allows
|
|
122
|
+
maximum flexibility when adding new data sources or consumers.</p>
|
|
123
|
+
<div class="figure" id="pub-sub-fig1">
|
|
124
|
+
<a class="reference internal image-reference" href="../_images/PubSub1.svg"><img alt="Publish and Subscribe" src="../_images/PubSub1.svg" width="75.0%" /></a>
|
|
125
|
+
</div>
|
|
126
|
+
<p><em>Publish and Subscribe</em></p>
|
|
127
|
+
<p>AMPS can route messages from publishers to subscribers using a topic
|
|
128
|
+
identifier and/or content within the message’s payload. For example, in
|
|
129
|
+
the figure above, there is a Publisher sending AMPS a message pertaining
|
|
130
|
+
to the <code class="docutils literal"><span class="pre">LN_ORDERS</span></code> topic. The message being sent contains information
|
|
131
|
+
on Ticker “IBM” with a Price of 125, both of these properties are contained
|
|
132
|
+
within the message payload itself (i.e., the message content). AMPS routes
|
|
133
|
+
the message to Subscriber 1 because it is subscribing to all messages on the
|
|
134
|
+
<code class="docutils literal"><span class="pre">LN_ORDERS</span></code> topic. Similarly, AMPS routes the message to Subscriber 2 because
|
|
135
|
+
it is subscribed to any messages having the Ticker equal to “IBM”. Subscriber 3
|
|
136
|
+
is looking for a different Ticker value and is not sent the message.</p>
|
|
137
|
+
<div class="section" id="topics">
|
|
138
|
+
<h2>Topics<a class="headerlink" href="#topics" title="Permalink to this headline">¶</a></h2>
|
|
139
|
+
<p id="index-1">A topic is a string that is used to declare a subject of interest for
|
|
140
|
+
purposes of routing messages between publishers and subscribers.
|
|
141
|
+
Topic-based Publish and Subscribe (e.g., Pub/Sub) is the simplest form
|
|
142
|
+
of Pub/Sub filtering. All messages are published with a topic
|
|
143
|
+
designation to the AMPS engine, and subscribers will receive messages
|
|
144
|
+
for topics to which they have subscribed.</p>
|
|
145
|
+
<div class="figure" id="pub-sub-fig2">
|
|
146
|
+
<a class="reference internal image-reference" href="../_images/PubSub2.svg"><img alt="Topic Based Pub/Sub" src="../_images/PubSub2.svg" width="75.0%" /></a>
|
|
147
|
+
</div>
|
|
148
|
+
<p><em>Topic Based Pub/Sub</em></p>
|
|
149
|
+
<p>For example, in the diagram above there are two publishers: Publisher
|
|
150
|
+
1 and Publisher 2 which publish to the topics <code class="docutils literal"><span class="pre">LN_ORDERS</span></code> and
|
|
151
|
+
<code class="docutils literal"><span class="pre">NY_ORDERS</span></code>, respectively. Messages published to AMPS are filtered and
|
|
152
|
+
routed to the subscribers of a respective topic. For example, Subscriber
|
|
153
|
+
1, which is subscribed to all messages for the <code class="docutils literal"><span class="pre">LN_ORDERS</span></code> topic will
|
|
154
|
+
receive everything published by Publisher 1. Subscriber 2, which is
|
|
155
|
+
subscribed to the regular expression topic <code class="docutils literal"><span class="pre">".*_ORDERS"</span></code> will receive
|
|
156
|
+
all orders published by Publisher 1 and 2.</p>
|
|
157
|
+
<p>Regular expression matching makes it easy to create topic paths in AMPS.
|
|
158
|
+
Some messaging systems require a specific delimiter for paths. AMPS
|
|
159
|
+
allows you the flexibility to use any delimiter. However, 60East
|
|
160
|
+
recommends using characters that do not have significance in regular
|
|
161
|
+
expressions, such as forward slashes. For example, rather than using
|
|
162
|
+
<code class="docutils literal"><span class="pre">northamerica.orders</span></code> as a path, use <code class="docutils literal"><span class="pre">northamerica/orders</span></code>.</p>
|
|
163
|
+
<p>AMPS does not restrict the characters that can be present in a topic
|
|
164
|
+
name. However, notice that topic names that contain regular expression
|
|
165
|
+
characters (such as <code class="docutils literal"><span class="pre">.</span></code> or <code class="docutils literal"><span class="pre">*</span></code>) will be interpreted as regular
|
|
166
|
+
expressions by default, which may cause unexpected behavior.</p>
|
|
167
|
+
<p>Topics that begin with <code class="docutils literal"><span class="pre">/AMPS</span></code> are reserved. The AMPS server publishes
|
|
168
|
+
messages to topics that begin with <code class="docutils literal"><span class="pre">/AMPS</span></code> as described in
|
|
169
|
+
<a class="reference internal" href="events.html#ug-event-topics"><span class="std std-ref">Event Topics</span></a>. Some versions of the AMPS client libraries
|
|
170
|
+
may internally publish to <code class="docutils literal"><span class="pre">/AMPS/devnull</span></code>. Your applications should
|
|
171
|
+
not publish to topics that begin with <code class="docutils literal"><span class="pre">/AMPS</span></code>, as publishes to those
|
|
172
|
+
topics may fail.</p>
|
|
173
|
+
<p>Each topic has an associated message type. Each client connection to
|
|
174
|
+
AMPS also has an associated message type. A given client connection
|
|
175
|
+
can only publish to topics with the same message type, and can only
|
|
176
|
+
receive messages from topics with the same message type.</p>
|
|
177
|
+
<div class="section" id="ad-hoc-topics">
|
|
178
|
+
<h3>Ad Hoc Topics<a class="headerlink" href="#ad-hoc-topics" title="Permalink to this headline">¶</a></h3>
|
|
179
|
+
<p>AMPS does not require explicit configuration of a topic for publishers
|
|
180
|
+
to send messages to the topic and subscribers to receive messages from
|
|
181
|
+
the topic. However, if there is no configuration for the topic, AMPS
|
|
182
|
+
does not persist messages to the topic, so no features that depend
|
|
183
|
+
on having a persisted message state (for example; replay, aggregation,
|
|
184
|
+
State of the World, and so on) are available for that topic. The
|
|
185
|
+
message will be delivered to subscriptions that are active when the
|
|
186
|
+
message is published, but the message will not be persisted or
|
|
187
|
+
retained. These “ad hoc” topics are useful for low-latency delivery
|
|
188
|
+
of messages that are only useful at the time that they are published.</p>
|
|
189
|
+
</div>
|
|
190
|
+
<div class="section" id="matching-multiple-topics-with-regular-expressions">
|
|
191
|
+
<h3>Matching Multiple Topics With Regular Expressions<a class="headerlink" href="#matching-multiple-topics-with-regular-expressions" title="Permalink to this headline">¶</a></h3>
|
|
192
|
+
<p id="index-2">With AMPS, a subscriber can use a regular expression to simultaneously
|
|
193
|
+
subscribe to multiple topics that match the given pattern. This feature
|
|
194
|
+
can be used to effectively subscribe to topics without knowing the topic
|
|
195
|
+
names in advance.</p>
|
|
196
|
+
<p>Notice that a message cannot be published to a topic pattern.
|
|
197
|
+
The topic for a given message is unambiguously specified
|
|
198
|
+
using a literal string. From the publisher’s point of view, it is
|
|
199
|
+
publishing a message to a topic. A publisher does not publish to a topic
|
|
200
|
+
pattern.</p>
|
|
201
|
+
<p>When a subscription is sent to AMPS, the topic for the subscription is
|
|
202
|
+
interpreted as a regular expression if the topic includes special regular
|
|
203
|
+
expression characters. Otherwise, the topic must be an exact match.</p>
|
|
204
|
+
<p>Some examples of regular expressions to match a set of topics are
|
|
205
|
+
included in the table below:</p>
|
|
206
|
+
<span id="table-pub-sub-regex"></span><table border="1" class="docutils" id="id1">
|
|
207
|
+
<caption><span class="caption-text"><strong>Table: Regular expression topic matching examples</strong></span><a class="headerlink" href="#id1" title="Permalink to this table">¶</a></caption>
|
|
208
|
+
<colgroup>
|
|
209
|
+
<col width="50%" />
|
|
210
|
+
<col width="50%" />
|
|
211
|
+
</colgroup>
|
|
212
|
+
<thead valign="bottom">
|
|
213
|
+
<tr class="row-odd"><th class="head"><strong>Topic</strong></th>
|
|
214
|
+
<th class="head"><strong>Behavior</strong></th>
|
|
215
|
+
</tr>
|
|
216
|
+
</thead>
|
|
217
|
+
<tbody valign="top">
|
|
218
|
+
<tr class="row-even"><td><code class="docutils literal"><span class="pre">^trade$</span></code></td>
|
|
219
|
+
<td>matches only “trade”.</td>
|
|
220
|
+
</tr>
|
|
221
|
+
<tr class="row-odd"><td><code class="docutils literal"><span class="pre">^client.*</span></code></td>
|
|
222
|
+
<td>matches “client”, “clients”, “client001”, etc.</td>
|
|
223
|
+
</tr>
|
|
224
|
+
<tr class="row-even"><td><code class="docutils literal"><span class="pre">.*trade.*</span></code></td>
|
|
225
|
+
<td>matches “NYSEtrades”, “ICEtrade”, etc.</td>
|
|
226
|
+
</tr>
|
|
227
|
+
<tr class="row-odd"><td><code class="docutils literal"><span class="pre">trade.info</span></code></td>
|
|
228
|
+
<td>matches “trade/info”, “trade-info”,
|
|
229
|
+
“every/trade/info”, etc.</td>
|
|
230
|
+
</tr>
|
|
231
|
+
</tbody>
|
|
232
|
+
</table>
|
|
233
|
+
<p>For more information regarding the regular expression syntax supported
|
|
234
|
+
within AMPS, please see the <a class="reference internal" href="amps_expressions.html#ug-regular-expressions"><span class="std std-ref">Using Regular Expressions in AMPS</span></a>
|
|
235
|
+
section for details.</p>
|
|
236
|
+
<p>AMPS can be configured to disallow regular expression topic matching for
|
|
237
|
+
subscriptions. See the <a class="reference external" href="../../../configuration/html/index.html">AMPS Configuration Reference</a> for details.</p>
|
|
238
|
+
</div>
|
|
239
|
+
</div>
|
|
240
|
+
<div class="section" id="filtering-subscriptions-by-content">
|
|
241
|
+
<span id="pub-sub-content"></span><h2>Filtering Subscriptions By Content<a class="headerlink" href="#filtering-subscriptions-by-content" title="Permalink to this headline">¶</a></h2>
|
|
242
|
+
<p>One thing that differentiates AMPS from classic messaging systems is its
|
|
243
|
+
ability to route messages based on message content. Instead of a
|
|
244
|
+
publisher declaring metadata describing the message for downstream
|
|
245
|
+
consumers, the publisher can simply publish the message content to AMPS
|
|
246
|
+
and let AMPS examine the native message content to determine how best to
|
|
247
|
+
deliver the message.</p>
|
|
248
|
+
<p>The ability to use content filters greatly reduces the problem of
|
|
249
|
+
oversubscription that occurs when topics are the only facility for
|
|
250
|
+
subscribing to message content. The topic space can be kept simple by
|
|
251
|
+
using content filters to deliver only the desired messages. The topic
|
|
252
|
+
space can reflect broad categories of messages and does not have to be
|
|
253
|
+
polluted with metadata that is usually found in the content of the
|
|
254
|
+
message. In addition, many of the advanced features of AMPS such as
|
|
255
|
+
out-of-focus messaging, aggregation, views, and SOW topics rely on the
|
|
256
|
+
ability to filter content.</p>
|
|
257
|
+
<p>Content-based messaging is somewhat analogous to database queries that
|
|
258
|
+
include a <code class="docutils literal"><span class="pre">WHERE</span></code> clause. Topics can be considered tables into which
|
|
259
|
+
rows are inserted (or updated). A subscription is similar to issuing a
|
|
260
|
+
<code class="docutils literal"><span class="pre">SELECT</span></code> from the topic table with a <code class="docutils literal"><span class="pre">WHERE</span></code> clause to limit the
|
|
261
|
+
rows which are returned. Topic-based messaging is analogous to a
|
|
262
|
+
<code class="docutils literal"><span class="pre">SELECT</span></code> on a table with no limiting <code class="docutils literal"><span class="pre">WHERE</span></code> clause.</p>
|
|
263
|
+
<p>AMPS uses a combination of XPath-based identifiers and SQL-92 operators
|
|
264
|
+
for content filtering. Some examples are shown below:</p>
|
|
265
|
+
<div class="section" id="example-filter-for-a-json-message">
|
|
266
|
+
<h3>Example Filter for a JSON Message:<a class="headerlink" href="#example-filter-for-a-json-message" title="Permalink to this headline">¶</a></h3>
|
|
267
|
+
<div class="code highlight-default"><div class="highlight"><pre><span></span><span class="p">(</span><span class="o">/</span><span class="n">Order</span><span class="o">/</span><span class="n">Instrument</span><span class="o">/</span><span class="n">Symbol</span> <span class="o">==</span> <span class="s1">'IBM'</span><span class="p">)</span> <span class="n">AND</span>
|
|
268
|
+
<span class="p">(</span><span class="o">/</span><span class="n">Order</span><span class="o">/</span><span class="n">Px</span> <span class="o">>=</span> <span class="mf">90.00</span> <span class="n">AND</span> <span class="o">/</span><span class="n">Order</span><span class="o">/</span><span class="n">Px</span> <span class="o"><</span> <span class="mf">91.00</span><span class="p">)</span>
|
|
269
|
+
</pre></div>
|
|
270
|
+
</div>
|
|
271
|
+
</div>
|
|
272
|
+
<div class="section" id="example-filter-for-an-xml-message">
|
|
273
|
+
<h3>Example Filter for an XML Message:<a class="headerlink" href="#example-filter-for-an-xml-message" title="Permalink to this headline">¶</a></h3>
|
|
274
|
+
<div class="code highlight-default"><div class="highlight"><pre><span></span><span class="p">(</span><span class="o">/</span><span class="n">FIXML</span><span class="o">/</span><span class="n">Order</span><span class="o">/</span><span class="n">Instrmt</span><span class="o">/</span><span class="nd">@Sym</span> <span class="o">==</span> <span class="s1">'IBM'</span><span class="p">)</span> <span class="n">AND</span>
|
|
275
|
+
<span class="p">(</span><span class="o">/</span><span class="n">FIXML</span><span class="o">/</span><span class="n">Order</span><span class="o">/</span><span class="nd">@Px</span> <span class="o">>=</span> <span class="mf">90.00</span> <span class="n">AND</span> <span class="o">/</span><span class="n">FIXML</span><span class="o">/</span><span class="n">Order</span><span class="o">/</span><span class="nd">@Px</span> <span class="o"><</span> <span class="mf">91.0</span><span class="p">)</span>
|
|
276
|
+
</pre></div>
|
|
277
|
+
</div>
|
|
278
|
+
</div>
|
|
279
|
+
<div class="section" id="example-filter-for-a-fix-message">
|
|
280
|
+
<h3>Example Filter for a FIX Message:<a class="headerlink" href="#example-filter-for-a-fix-message" title="Permalink to this headline">¶</a></h3>
|
|
281
|
+
<div class="code highlight-default"><div class="highlight"><pre><span></span><span class="o">/</span><span class="mi">35</span> <span class="o"><</span> <span class="mi">10</span> <span class="n">AND</span> <span class="o">/</span><span class="mi">34</span> <span class="o">==</span> <span class="o">/</span><span class="mi">9</span>
|
|
282
|
+
</pre></div>
|
|
283
|
+
</div>
|
|
284
|
+
<p>For more information about how content is handled within AMPS and the
|
|
285
|
+
syntax of AMPS filters, check out <a class="reference external" href="amps_expressions.html">AMPS Expressions</a>.</p>
|
|
286
|
+
<div class="admonition tip">
|
|
287
|
+
<p class="first admonition-title">Tip</p>
|
|
288
|
+
<p>Unlike some other messaging systems, AMPS lets you use a
|
|
289
|
+
relatively small set of topics to categorize messages at a high
|
|
290
|
+
level and use content filters to retrieve specific data
|
|
291
|
+
published to those topics.</p>
|
|
292
|
+
<p>Examples of good, broad topic choices:</p>
|
|
293
|
+
<p><code class="docutils literal"><span class="pre">trades</span></code>, <code class="docutils literal"><span class="pre">positions</span></code>, <code class="docutils literal"><span class="pre">MarketData</span></code>, <code class="docutils literal"><span class="pre">Europe</span></code>, <code class="docutils literal"><span class="pre">alerts</span></code></p>
|
|
294
|
+
<p class="last">This approach makes it easier to administer AMPS, easier for
|
|
295
|
+
publishers to decide which topics to publish to and easier for
|
|
296
|
+
subscribers to be sure that they’ve subscribed to all relevant
|
|
297
|
+
topics.</p>
|
|
298
|
+
</div>
|
|
299
|
+
</div>
|
|
300
|
+
</div>
|
|
301
|
+
<div class="section" id="conflated-subscriptions">
|
|
302
|
+
<span id="ug-pub-sub-conflation"></span><h2>Conflated Subscriptions<a class="headerlink" href="#conflated-subscriptions" title="Permalink to this headline">¶</a></h2>
|
|
303
|
+
<p>AMPS provides the ability for the server to <em>conflate</em> messages to a
|
|
304
|
+
subscription. When a subscription requests conflation, the server will
|
|
305
|
+
retain messages for that subscription for a certain period of time, the
|
|
306
|
+
<em>conflation interval</em>, and provide the latest update to that message
|
|
307
|
+
once a message has been retained for that interval. In effect, AMPS
|
|
308
|
+
guarantees that a subscription will receive <em>no more than</em> one update
|
|
309
|
+
for a given message per conflation interval.</p>
|
|
310
|
+
<p>Conflated subscriptions provide a way to reduce the bandwidth and
|
|
311
|
+
processing for a subscriber in cases where a subscriber needs periodic
|
|
312
|
+
updates with the current state of a message, rather than the complete
|
|
313
|
+
message stream. AMPS provides per-subscription conflation for cases
|
|
314
|
+
where only a small number of subscribers require conflation, or if
|
|
315
|
+
conflation is required only in unusual cases. If multiple subscribers
|
|
316
|
+
will have the same conflation needs, consider using <a class="reference internal" href="conflated_topics.html#ug-topic-replicas"><span class="std std-ref">Conflated Topics</span></a>.</p>
|
|
317
|
+
<p>For example, imagine an application that monitors selected stocks and
|
|
318
|
+
displays the current prices on a large screen, which refreshes every few
|
|
319
|
+
seconds. This application may use the same topics as a trading desk, but
|
|
320
|
+
has very different needs for data freshness and completeness. Since
|
|
321
|
+
updates to each symbol will only be displayed every few seconds, the
|
|
322
|
+
application only needs point-in-time updates of the prices, rather than
|
|
323
|
+
the full stream of price changes. To meet this need, the application
|
|
324
|
+
could specify that the subscription conflates price updates by
|
|
325
|
+
<code class="docutils literal"><span class="pre">tickerId</span></code> with a conflation interval of two seconds. For each
|
|
326
|
+
distinct value of the <code class="docutils literal"><span class="pre">tickerId</span></code> field, AMPS will retain messages for
|
|
327
|
+
two seconds. If another message with the same <code class="docutils literal"><span class="pre">tickerId</span></code> is processed
|
|
328
|
+
for the subscription during the conflation interval, that message
|
|
329
|
+
completely replaces the previous message. At the end of the two second
|
|
330
|
+
conflation interval, the message is delivered to the application. This
|
|
331
|
+
lets the application receive an up-to-date price at most every two
|
|
332
|
+
seconds, without having to process a large number of updates that will
|
|
333
|
+
never be displayed. This approach also ensures that the price is never
|
|
334
|
+
more than two seconds out of date, which means that each time the screen
|
|
335
|
+
is refreshed, the price is current.</p>
|
|
336
|
+
<p>As mentioned in the example above, if the subscription uses <code class="docutils literal"><span class="pre">tickerId</span></code>
|
|
337
|
+
for conflation and the following sequence of messages arrive during a
|
|
338
|
+
conflation interval:</p>
|
|
339
|
+
<div class="highlight-javascript"><div class="highlight"><pre><span></span><span class="p">{</span> <span class="s2">"tickerId"</span> <span class="o">:</span> <span class="s2">"IBM"</span><span class="p">,</span> <span class="s2">"price"</span> <span class="o">:</span> <span class="mf">150.34</span> <span class="p">}</span>
|
|
340
|
+
<span class="p">{</span> <span class="s2">"tickerId"</span> <span class="o">:</span> <span class="s2">"IBM"</span><span class="p">,</span> <span class="s2">"price"</span> <span class="o">:</span> <span class="mf">149.76</span> <span class="p">}</span>
|
|
341
|
+
<span class="p">{</span> <span class="s2">"tickerId"</span> <span class="o">:</span> <span class="s2">"IBM"</span><span class="p">,</span> <span class="s2">"price"</span> <span class="o">:</span> <span class="mf">149.32</span> <span class="p">}</span>
|
|
342
|
+
<span class="p">{</span> <span class="s2">"tickerId"</span> <span class="o">:</span> <span class="s2">"IBM"</span><span class="p">,</span> <span class="s2">"price"</span> <span class="o">:</span> <span class="mf">151.10</span> <span class="p">}</span>
|
|
343
|
+
</pre></div>
|
|
344
|
+
</div>
|
|
345
|
+
<p>AMPS delivers only the last message for that <code class="docutils literal"><span class="pre">tickerId</span></code>:</p>
|
|
346
|
+
<div class="highlight-javascript"><div class="highlight"><pre><span></span><span class="p">{</span> <span class="s2">"tickerId"</span> <span class="o">:</span> <span class="s2">"IBM"</span><span class="p">,</span> <span class="s2">"price"</span> <span class="o">:</span> <span class="mf">151.10</span> <span class="p">}</span>
|
|
347
|
+
</pre></div>
|
|
348
|
+
</div>
|
|
349
|
+
<p>Notice that when a subscription is conflated, AMPS does not guarantee
|
|
350
|
+
that messages are delivered precisely in the order in which they arrived
|
|
351
|
+
in AMPS, since the latest update is delivered based on the conflation
|
|
352
|
+
interval.</p>
|
|
353
|
+
<p>When the <code class="docutils literal"><span class="pre">timestamp</span></code> option is used with conflated subscriptions, AMPS
|
|
354
|
+
provides the timestamp for the first message conflated.</p>
|
|
355
|
+
<div class="section" id="when-to-use-conflated-subscriptions">
|
|
356
|
+
<h3>When to Use Conflated Subscriptions<a class="headerlink" href="#when-to-use-conflated-subscriptions" title="Permalink to this headline">¶</a></h3>
|
|
357
|
+
<p>Conflated subscriptions reduce the bandwidth for a subscription, and may
|
|
358
|
+
reduce the processing resources required for a subscription. However,
|
|
359
|
+
rather than immediately delivering messages, AMPS retains messages in
|
|
360
|
+
memory for the conflation interval. This can increase the memory
|
|
361
|
+
required for the subscription.</p>
|
|
362
|
+
<p>AMPS contains other features for conflating messages and reducing
|
|
363
|
+
bandwidth. Conflated subscriptions are most appropriate when:</p>
|
|
364
|
+
<ul class="simple">
|
|
365
|
+
<li><strong>Network bandwidth is at a premium</strong>, and you would like AMPS to
|
|
366
|
+
spend slightly more processing time and potentially more memory to
|
|
367
|
+
reduce the bandwidth needs of the application.</li>
|
|
368
|
+
<li>Each subscription has <strong>different conflation needs</strong>. For example, if
|
|
369
|
+
each subscription has a dramatically different conflation interval,
|
|
370
|
+
or needs to conflate by different fields. If most subscribers will
|
|
371
|
+
use a similar conflation interval and use the same fields for
|
|
372
|
+
conflation, using a <em>Conflated Topic</em> can provide equivalent results
|
|
373
|
+
with lower overhead.</li>
|
|
374
|
+
<li>The conflation needs are <strong>relatively predictable and consistent</strong>
|
|
375
|
+
for the subscription. If you need the application to conflate
|
|
376
|
+
messages <em>only</em> when processing is slow or there are bursts of
|
|
377
|
+
message traffic, <em>client-side conflation</em> provides that ability and
|
|
378
|
+
may be a better choice than a conflated subscription. See the
|
|
379
|
+
developer guide for your programming language of choice for details.</li>
|
|
380
|
+
</ul>
|
|
381
|
+
<p>The considerations above are general guidance to help you consider
|
|
382
|
+
options and choose a conflation strategy.</p>
|
|
383
|
+
<p>You can also combine approaches as necessary. For example, if most of
|
|
384
|
+
your subscriptions require a 3 second conflation interval by
|
|
385
|
+
<code class="docutils literal"><span class="pre">tickerId</span></code>, while a few subscriptions require a 15 second interval,
|
|
386
|
+
you could create a <em>Conflated Topic</em> with a 3 second interval. Those
|
|
387
|
+
subscriptions that require a 15 second interval could subscribe with
|
|
388
|
+
that interval. This provides both sets of subscriptions with the
|
|
389
|
+
intervals that they need.</p>
|
|
390
|
+
</div>
|
|
391
|
+
<div class="section" id="requesting-conflation-on-a-subscription">
|
|
392
|
+
<h3>Requesting Conflation on a Subscription<a class="headerlink" href="#requesting-conflation-on-a-subscription" title="Permalink to this headline">¶</a></h3>
|
|
393
|
+
<p>To request conflation on a subscription, set the following options on
|
|
394
|
+
the subscription:</p>
|
|
395
|
+
<table border="1" class="docutils" id="id2">
|
|
396
|
+
<caption><span class="caption-text"><em>Conflated subscription options</em></span><a class="headerlink" href="#id2" title="Permalink to this table">¶</a></caption>
|
|
397
|
+
<colgroup>
|
|
398
|
+
<col width="50%" />
|
|
399
|
+
<col width="50%" />
|
|
400
|
+
</colgroup>
|
|
401
|
+
<thead valign="bottom">
|
|
402
|
+
<tr class="row-odd"><th class="head">Option</th>
|
|
403
|
+
<th class="head">Description</th>
|
|
404
|
+
</tr>
|
|
405
|
+
</thead>
|
|
406
|
+
<tbody valign="top">
|
|
407
|
+
<tr class="row-even"><td><code class="docutils literal"><span class="pre">conflation=n</span></code></td>
|
|
408
|
+
<td><p class="first">Specifies whether to conflate this
|
|
409
|
+
subscription. The value provided can be a
|
|
410
|
+
time interval, <code class="docutils literal"><span class="pre">auto</span></code> or <code class="docutils literal"><span class="pre">none</span></code>.</p>
|
|
411
|
+
<p>When present and set to a value other
|
|
412
|
+
than none, enables conflation for the
|
|
413
|
+
subscription.</p>
|
|
414
|
+
<p>Can also be set to <code class="docutils literal"><span class="pre">auto</span></code>, which
|
|
415
|
+
requests that AMPS attempt to determine
|
|
416
|
+
an appropriate conflation interval based
|
|
417
|
+
on client consumption.</p>
|
|
418
|
+
<p>Recognizes the same time specifiers used
|
|
419
|
+
in the AMPS configuration file (for
|
|
420
|
+
example, <code class="docutils literal"><span class="pre">100ms</span></code> or <code class="docutils literal"><span class="pre">1s</span></code> or <code class="docutils literal"><span class="pre">1m</span></code>).</p>
|
|
421
|
+
<p class="last">Defaults to <code class="docutils literal"><span class="pre">none</span></code>.</p>
|
|
422
|
+
</td>
|
|
423
|
+
</tr>
|
|
424
|
+
<tr class="row-odd"><td><code class="docutils literal"><span class="pre">conflation_key=[keys]</span></code></td>
|
|
425
|
+
<td><p class="first">When conflation is enabled, specifies the
|
|
426
|
+
fields to use to determine message
|
|
427
|
+
uniqueness. The format of this option is
|
|
428
|
+
a comma-delimited list of XPath
|
|
429
|
+
identifiers within brackets. For example,
|
|
430
|
+
to conflate based on the value of the
|
|
431
|
+
<code class="docutils literal"><span class="pre">/tickerId</span></code> and <code class="docutils literal"><span class="pre">/customerId</span></code> within
|
|
432
|
+
a message the value of this option would
|
|
433
|
+
be <code class="docutils literal"><span class="pre">[/tickerId,/customerId]</span></code>.</p>
|
|
434
|
+
<p>Defaults to the SOW key fields for SOW
|
|
435
|
+
topics. No default for non-SOW topics.
|
|
436
|
+
This option is required for non-SOW
|
|
437
|
+
topics.</p>
|
|
438
|
+
<p>This option is not valid with the <code class="docutils literal"><span class="pre">oof</span></code>
|
|
439
|
+
option unless the keys provided are
|
|
440
|
+
identical to the keys for the topic.</p>
|
|
441
|
+
<p class="last">This option can only be used when
|
|
442
|
+
<code class="docutils literal"><span class="pre">conflation</span></code> is also specified.</p>
|
|
443
|
+
</td>
|
|
444
|
+
</tr>
|
|
445
|
+
</tbody>
|
|
446
|
+
</table>
|
|
447
|
+
<p>For example, to request a 10 second conflation interval with messages
|
|
448
|
+
conflated on the <code class="docutils literal"><span class="pre">[/orderId]</span></code> field, you would use the following
|
|
449
|
+
options string:</p>
|
|
450
|
+
<div class="code highlight-default"><div class="highlight"><pre><span></span><span class="n">conflation</span><span class="o">=</span><span class="mi">10</span><span class="n">s</span><span class="p">,</span><span class="n">conflation_key</span><span class="o">=</span><span class="p">[</span><span class="o">/</span><span class="n">orderId</span><span class="p">]</span>
|
|
451
|
+
</pre></div>
|
|
452
|
+
</div>
|
|
453
|
+
</div>
|
|
454
|
+
</div>
|
|
455
|
+
<div class="section" id="replacing-subscriptions">
|
|
456
|
+
<span id="ug-pub-sub-replace"></span><h2>Replacing Subscriptions<a class="headerlink" href="#replacing-subscriptions" title="Permalink to this headline">¶</a></h2>
|
|
457
|
+
<p>AMPS provides the ability to perform atomic subscription replacement.
|
|
458
|
+
This allows you to replace the filter, change the topic, or update the
|
|
459
|
+
options for a subscription.</p>
|
|
460
|
+
<p>The most common use for this capability is for an application to change
|
|
461
|
+
the filter for a subscription. For example, a GUI that is providing a
|
|
462
|
+
view of a set of orders may need to add or remove an order from the set
|
|
463
|
+
of orders being displayed. By replacing the content filter with a filter
|
|
464
|
+
that tracks the updated set of orders, the application can do this
|
|
465
|
+
without missing messages, getting duplicate messages, or having to
|
|
466
|
+
manage more than one subscription.</p>
|
|
467
|
+
<p>Replacing a filter is an atomic operation. That is, the application is
|
|
468
|
+
guaranteed not to miss messages that are in both the original and
|
|
469
|
+
replacement subscription, and is guaranteed to receive all messages for
|
|
470
|
+
the new subscription as of the point at which the replacement happens.</p>
|
|
471
|
+
<p>When replacing a <code class="docutils literal"><span class="pre">sow_and_subscribe</span></code> command (described later in the
|
|
472
|
+
guide), AMPS runs the SOW command again and provides any messages that
|
|
473
|
+
were not previously in the result set to the application. See the section called
|
|
474
|
+
<a class="reference internal" href="sow_queries.html#ug-sow-and-subscribe-replace"><span class="std std-ref">Replacing Subscriptions with SOW and Subscribe</span></a>
|
|
475
|
+
for details.</p>
|
|
476
|
+
<p>Notice that some options on an initial subscription limit the support
|
|
477
|
+
for <code class="docutils literal"><span class="pre">replace</span></code> on a subscription. In those cases, the limitation is
|
|
478
|
+
described when the option is described.</p>
|
|
479
|
+
<div class="section" id="replacing-the-content-filter-on-a-subscription">
|
|
480
|
+
<h3>Replacing the Content Filter on a Subscription<a class="headerlink" href="#replacing-the-content-filter-on-a-subscription" title="Permalink to this headline">¶</a></h3>
|
|
481
|
+
<p id="index-3">AMPS allows you to replace the content filter on an
|
|
482
|
+
existing subscription. When this happens, AMPS begins sending messages
|
|
483
|
+
on the subscription that match the new filter. When an application needs
|
|
484
|
+
to bring more messages into scope, this can be more efficient than
|
|
485
|
+
creating another subscription.</p>
|
|
486
|
+
<p>For example, an application might start off with a filter such as the
|
|
487
|
+
following:</p>
|
|
488
|
+
<div class="code highlight-default"><div class="highlight"><pre><span></span><span class="o">/</span><span class="n">region</span> <span class="o">=</span> <span class="s1">'WesternUS'</span>
|
|
489
|
+
</pre></div>
|
|
490
|
+
</div>
|
|
491
|
+
<p>The application might then need to bring other regions into scope, for
|
|
492
|
+
example:</p>
|
|
493
|
+
<div class="code highlight-default"><div class="highlight"><pre><span></span><span class="o">/</span><span class="n">region</span> <span class="n">IN</span> <span class="p">(</span><span class="s1">'WesternUS'</span><span class="p">,</span> <span class="s1">'Alaska'</span><span class="p">,</span> <span class="s1">'Hawaii'</span><span class="p">)</span>
|
|
494
|
+
</pre></div>
|
|
495
|
+
</div>
|
|
496
|
+
</div>
|
|
497
|
+
<div class="section" id="replacing-the-topic-on-a-subscription">
|
|
498
|
+
<h3>Replacing the Topic on a Subscription<a class="headerlink" href="#replacing-the-topic-on-a-subscription" title="Permalink to this headline">¶</a></h3>
|
|
499
|
+
<p>AMPS allows a subscription to replace the topic on a subscription. When
|
|
500
|
+
the topic is replaced, AMPS re-evaluates the subscription as it does
|
|
501
|
+
when a filter is replaced. If the subscription is updated to include a
|
|
502
|
+
topic that the user does not have permission to subscribe to, the
|
|
503
|
+
<code class="docutils literal"><span class="pre">replace</span></code> operation succeeds, but no messages will be delivered on
|
|
504
|
+
that topic.</p>
|
|
505
|
+
</div>
|
|
506
|
+
<div class="section" id="replacing-the-options-on-a-subscription">
|
|
507
|
+
<h3>Replacing the Options on a Subscription<a class="headerlink" href="#replacing-the-options-on-a-subscription" title="Permalink to this headline">¶</a></h3>
|
|
508
|
+
<p>AMPS allows a subscription to replace some of the options on the
|
|
509
|
+
subscription. In this case, the subscription is evaluated as though the
|
|
510
|
+
topic or filter has been replaced. Any new messages generated after the
|
|
511
|
+
subscription is replaced use the new options. However, AMPS does not replay
|
|
512
|
+
or re-query previous messages to apply the options.</p>
|
|
513
|
+
<p>For example, if a <code class="docutils literal"><span class="pre">sow_and_subscribe</span></code> command did not previously specify
|
|
514
|
+
Out-of-Focus tracking and adds this option, AMPS generates the appropriate
|
|
515
|
+
Out-of-Focus messages from the replace point forward. AMPS does not recreate
|
|
516
|
+
Out-of-Focus messages that would have previously been generated by the subscription.</p>
|
|
517
|
+
<p>If the subscription uses pagination (see <a class="reference internal" href="sow_queries.html#sow-query-results-sets"><span class="std std-ref">Configuring SOW Query Result Sets</span></a>),
|
|
518
|
+
the replacement must contain the full set of pagination options
|
|
519
|
+
provided on the original subscription. For a paginated subscription,
|
|
520
|
+
the replacement <em>may not</em> change the topic of the subscription (instead,
|
|
521
|
+
close the existing subscription and create a new subscription with a
|
|
522
|
+
different topic).</p>
|
|
523
|
+
</div>
|
|
524
|
+
</div>
|
|
525
|
+
<div class="section" id="messages-in-amps">
|
|
526
|
+
<span id="index-4"></span><h2>Messages in AMPS<a class="headerlink" href="#messages-in-amps" title="Permalink to this headline">¶</a></h2>
|
|
527
|
+
<p>Communication between applications and the AMPS server uses AMPS
|
|
528
|
+
messages. AMPS messages are received or sent for every operation in
|
|
529
|
+
AMPS. Each AMPS message has a specific type and consists of a set of
|
|
530
|
+
headers and a payload. The headers are defined by AMPS and formatted
|
|
531
|
+
according to the protocol specified for the connection. Typically,
|
|
532
|
+
applications use the standard <code class="docutils literal"><span class="pre">amps</span></code> protocol which uses a JSON
|
|
533
|
+
document for headers. The payload, if one is present, is the content of
|
|
534
|
+
the message and is in the format specified by the message type.</p>
|
|
535
|
+
<p>Messages received from AMPS have the same format as messages to AMPS.
|
|
536
|
+
These messages also have a specific type, with a header formatted
|
|
537
|
+
according to the protocol and a payload of the specified message type.
|
|
538
|
+
For example, AMPS uses <code class="docutils literal"><span class="pre">ack</span></code> messages, short for acknowledgment, to
|
|
539
|
+
report the status of commands. AMPS uses <code class="docutils literal"><span class="pre">publish</span></code> messages to deliver
|
|
540
|
+
messages on a subscription, and so on for other commands and other
|
|
541
|
+
messages.</p>
|
|
542
|
+
<p>Let’s consider a complete interaction between an application and the
|
|
543
|
+
AMPS server as an example. When a client subscribes to a topic in AMPS,
|
|
544
|
+
the client sends a <code class="docutils literal"><span class="pre">subscribe</span></code> message to AMPS that contains the information
|
|
545
|
+
about the requested subscription and, by default, a request for an
|
|
546
|
+
acknowledgment that the subscription has been processed. AMPS returns
|
|
547
|
+
an <code class="docutils literal"><span class="pre">ack</span></code> message when the subscription is processed that indicates
|
|
548
|
+
whether the subscription succeeded or failed, and then begins providing
|
|
549
|
+
<code class="docutils literal"><span class="pre">publish</span></code> messages for new messages on the subscription. The
|
|
550
|
+
<code class="docutils literal"><span class="pre">publish</span></code> messages continue as messages that match the subscription
|
|
551
|
+
arrive at the AMPS server. If the application needs to stop the
|
|
552
|
+
subscription, the application sends an <code class="docutils literal"><span class="pre">unsubscribe</span></code> message to
|
|
553
|
+
the AMPS server, indicating the subscription to end. Once the AMPS
|
|
554
|
+
server processes the unsubscribe message, the server will no longer
|
|
555
|
+
send messages for that subscription to the application. Should
|
|
556
|
+
the application disconnect, the AMPS server removes all subscriptions
|
|
557
|
+
for that connection (whether or not the application sends an
|
|
558
|
+
<code class="docutils literal"><span class="pre">unsubscribe</span></code> command first).</p>
|
|
559
|
+
<p>Messages to and from AMPS are described in more detail in the <em>AMPS
|
|
560
|
+
Command Reference</em>, available on the 60East website and included in the
|
|
561
|
+
AMPS client SDKs.</p>
|
|
562
|
+
<p>In this version of AMPS, the communication transports used by AMPS accept
|
|
563
|
+
message sizes of up to 200MB in a single command to AMPS. Messages larger
|
|
564
|
+
than 200MB may be rejected by the transport as invalid. Should your use
|
|
565
|
+
of AMPS require larger message sizes, contact 60East support.</p>
|
|
566
|
+
<div class="admonition tip" id="index-5">
|
|
567
|
+
<p class="first admonition-title">Tip</p>
|
|
568
|
+
<p class="last">This version of AMPS limits messages to 200MB in total size.</p>
|
|
569
|
+
</div>
|
|
570
|
+
<div class="section" id="introduction-to-amps-headers">
|
|
571
|
+
<h3>Introduction to AMPS Headers<a class="headerlink" href="#introduction-to-amps-headers" title="Permalink to this headline">¶</a></h3>
|
|
572
|
+
<p>The <em>AMPS Command Reference</em> contains a full list of headers for each
|
|
573
|
+
command. The table below lists some commonly used headers.</p>
|
|
574
|
+
<table border="1" class="docutils" id="id3">
|
|
575
|
+
<caption><span class="caption-text"><em>Common AMPS Headers</em></span><a class="headerlink" href="#id3" title="Permalink to this table">¶</a></caption>
|
|
576
|
+
<colgroup>
|
|
577
|
+
<col width="50%" />
|
|
578
|
+
<col width="50%" />
|
|
579
|
+
</colgroup>
|
|
580
|
+
<thead valign="bottom">
|
|
581
|
+
<tr class="row-odd"><th class="head">Header</th>
|
|
582
|
+
<th class="head">Description</th>
|
|
583
|
+
</tr>
|
|
584
|
+
</thead>
|
|
585
|
+
<tbody valign="top">
|
|
586
|
+
<tr class="row-even"><td>Topic</td>
|
|
587
|
+
<td><p class="first">The topic that the message applies
|
|
588
|
+
to.</p>
|
|
589
|
+
<p class="last">For commands to AMPS, this is
|
|
590
|
+
the topic that AMPS will apply the
|
|
591
|
+
command to. For messages from AMPS,
|
|
592
|
+
this is the topic from which the
|
|
593
|
+
message originated.</p>
|
|
594
|
+
</td>
|
|
595
|
+
</tr>
|
|
596
|
+
<tr class="row-odd"><td>Command</td>
|
|
597
|
+
<td><p class="first">The command type of the message.
|
|
598
|
+
Each message has a specific command
|
|
599
|
+
type.</p>
|
|
600
|
+
<p class="last">For example, messages that contain
|
|
601
|
+
data from a query over a SOW topic
|
|
602
|
+
have a command of <code class="docutils literal"><span class="pre">sow</span></code>, while
|
|
603
|
+
messages that contain data from
|
|
604
|
+
a publish command have a command of
|
|
605
|
+
<code class="docutils literal"><span class="pre">publish</span></code> and messages that
|
|
606
|
+
acknowledge a command to AMPS have a
|
|
607
|
+
command type of <code class="docutils literal"><span class="pre">ack</span></code>.</p>
|
|
608
|
+
</td>
|
|
609
|
+
</tr>
|
|
610
|
+
<tr class="row-even"><td>CommandId</td>
|
|
611
|
+
<td><p class="first">An identifier used to correlate
|
|
612
|
+
responses from AMPS with an initial
|
|
613
|
+
command.</p>
|
|
614
|
+
<p class="last">For example, <code class="docutils literal"><span class="pre">ack</span></code> messages
|
|
615
|
+
returned by AMPS contain the
|
|
616
|
+
CommandId provided with the
|
|
617
|
+
command they acknowledge and
|
|
618
|
+
subscriptions can be updated or
|
|
619
|
+
removed using the CommandId provided
|
|
620
|
+
with the <code class="docutils literal"><span class="pre">subscribe</span></code> command.</p>
|
|
621
|
+
</td>
|
|
622
|
+
</tr>
|
|
623
|
+
<tr class="row-odd"><td>SowKey</td>
|
|
624
|
+
<td><p class="first">For messages received from a State
|
|
625
|
+
of the World (or <em>SOW</em>) topic, an
|
|
626
|
+
identifier that AMPS assigns to the
|
|
627
|
+
record for this message. SOW topics
|
|
628
|
+
are described in
|
|
629
|
+
<a class="reference internal" href="sow.html#ug-sow"><span class="std std-ref">State of the World (SOW)</span></a>.</p>
|
|
630
|
+
<p class="last">This header is included on messages
|
|
631
|
+
from a SOW topic by default. AMPS
|
|
632
|
+
will omit this header when the
|
|
633
|
+
subscription or SOW query includes
|
|
634
|
+
the <code class="docutils literal"><span class="pre">no_sowkey</span></code> option.</p>
|
|
635
|
+
</td>
|
|
636
|
+
</tr>
|
|
637
|
+
<tr class="row-even"><td>CorrelationId</td>
|
|
638
|
+
<td><p class="first">A user-specified identifier for the
|
|
639
|
+
message.</p>
|
|
640
|
+
<p class="last">Publishers can set this identifier
|
|
641
|
+
on messages. AMPS does not parse,
|
|
642
|
+
change, or interpret this
|
|
643
|
+
identifier in any way. This header
|
|
644
|
+
is limited to characters used in
|
|
645
|
+
Base64 encoding.</p>
|
|
646
|
+
</td>
|
|
647
|
+
</tr>
|
|
648
|
+
<tr class="row-odd"><td>Status</td>
|
|
649
|
+
<td>Set on <code class="docutils literal"><span class="pre">ack</span></code> messages to indicate
|
|
650
|
+
the results of the command, such as
|
|
651
|
+
<code class="docutils literal"><span class="pre">Success</span></code> or <code class="docutils literal"><span class="pre">Failure</span></code>.</td>
|
|
652
|
+
</tr>
|
|
653
|
+
<tr class="row-even"><td>Reason</td>
|
|
654
|
+
<td>Set on <code class="docutils literal"><span class="pre">ack</span></code> messages to indicate
|
|
655
|
+
the reason for the Status
|
|
656
|
+
acknowledgment.</td>
|
|
657
|
+
</tr>
|
|
658
|
+
<tr class="row-odd"><td>Timestamp</td>
|
|
659
|
+
<td><p class="first">Optionally set on <code class="docutils literal"><span class="pre">publish</span></code>
|
|
660
|
+
messages and <code class="docutils literal"><span class="pre">sow</span></code> messages to
|
|
661
|
+
indicate the time at which the local
|
|
662
|
+
AMPS instance processed the message.</p>
|
|
663
|
+
<p class="last">To receive a timestamp, the SOW
|
|
664
|
+
query or subscription must include
|
|
665
|
+
the <code class="docutils literal"><span class="pre">timestamp</span></code> option on the
|
|
666
|
+
command that creates the
|
|
667
|
+
subscription or runs the query.
|
|
668
|
+
The timestamp is returned in
|
|
669
|
+
ISO-8601 format.</p>
|
|
670
|
+
</td>
|
|
671
|
+
</tr>
|
|
672
|
+
</tbody>
|
|
673
|
+
</table>
|
|
674
|
+
<p>This section presents a few of the commonly used headers. See the <em>AMPS
|
|
675
|
+
Command Reference</em> for a full description of AMPS messages.</p>
|
|
676
|
+
<p id="index-6">AMPS does not provide the ability to add custom
|
|
677
|
+
header fields. However, AMPS composite message types provide an easy way
|
|
678
|
+
to add an additional section to a message type that contains metadata
|
|
679
|
+
for the message. Since composite message type parts fully support AMPS
|
|
680
|
+
content filtering, this approach provides more flexibility and allows
|
|
681
|
+
for more sophisticated metadata than simply adding a header field. See
|
|
682
|
+
<a class="reference internal" href="messageTypes.html#ug-messagetypes-composite"><span class="std std-ref">Composite Messages</span></a> for details.</p>
|
|
683
|
+
</div>
|
|
684
|
+
</div>
|
|
685
|
+
<div class="section" id="retrieving-part-of-a-message-with-a-select-list">
|
|
686
|
+
<span id="index-7"></span><h2>Retrieving Part of a Message with a Select List<a class="headerlink" href="#retrieving-part-of-a-message-with-a-select-list" title="Permalink to this headline">¶</a></h2>
|
|
687
|
+
<p>AMPS has the ability to allow a subscriber to retrieve only the relevant parts
|
|
688
|
+
of a message, in the same way that a SQL query can retrieve only specified
|
|
689
|
+
fields from a table. For example, consider a topic that stores an event ID,
|
|
690
|
+
a short description, and a detailed event record. A UI that presents an overview
|
|
691
|
+
of the contents of the topic might only need the event ID and short description
|
|
692
|
+
to present a high-level view of the topic contents, while retrieving the detailed
|
|
693
|
+
event record when a user explicitly requests the details for a
|
|
694
|
+
specific record.</p>
|
|
695
|
+
<p>With select lists, AMPS allows an individual subscription to control
|
|
696
|
+
which fields are retrieved from a subscription or query. In the example
|
|
697
|
+
above, the subscription would include a select list that requests that
|
|
698
|
+
AMPS provide the event ID and description, while excluding any other field.
|
|
699
|
+
To do this, the application would include the following option on the
|
|
700
|
+
command used to retrieve data for the overview:
|
|
701
|
+
<code class="docutils literal"><span class="pre">select=[-/,+/event_id,+/description]</span></code></p>
|
|
702
|
+
<p>When provided by an application as a part of a command to AMPS,
|
|
703
|
+
a select list is applied after any content filtering is applied.
|
|
704
|
+
The select list specifies the contents of the subscription, but
|
|
705
|
+
does not affect the underying messages, and the contents of the
|
|
706
|
+
subscription select list do not affect filter evaluation or
|
|
707
|
+
query results.</p>
|
|
708
|
+
<div class="admonition tip">
|
|
709
|
+
<p class="first admonition-title">Tip</p>
|
|
710
|
+
<p class="last">To use a select list, the message type format must allow
|
|
711
|
+
partial serialization of messages. Message formats that
|
|
712
|
+
require a full message, or that interpret missing fields
|
|
713
|
+
as having a specific value, cannot be used with
|
|
714
|
+
select lists, since a partial message would either
|
|
715
|
+
create an invalid message, or change the way the
|
|
716
|
+
data in the message is interpreted.</p>
|
|
717
|
+
</div>
|
|
718
|
+
<div class="section" id="creating-select-lists">
|
|
719
|
+
<h3>Creating Select Lists<a class="headerlink" href="#creating-select-lists" title="Permalink to this headline">¶</a></h3>
|
|
720
|
+
<p>As mentioned above, to provide a select list on a command,
|
|
721
|
+
add the keyword <code class="docutils literal"><span class="pre">select</span></code> and a comma-delimited list of <em>field directives</em>
|
|
722
|
+
to the options for a subscription or query in AMPS.</p>
|
|
723
|
+
<p>Each <em>field directive</em> is a combination of an <em>inclusion specifier</em> and
|
|
724
|
+
an <em>AMPS identifier</em>.</p>
|
|
725
|
+
<p>For example, the <em>field directive</em> <code class="docutils literal"><span class="pre">+/event_id</span></code> has an <em>inclusion_specifier</em>
|
|
726
|
+
of <code class="docutils literal"><span class="pre">+</span></code> and the AMPS identifier of <code class="docutils literal"><span class="pre">/event_id</span></code>. This <em>field directive</em>
|
|
727
|
+
specifies that the <code class="docutils literal"><span class="pre">/event_id</span></code> field is included in the message returned
|
|
728
|
+
to the subscriber.</p>
|
|
729
|
+
<p>AMPS recognizes the following <em>inclusion specifier</em> values:</p>
|
|
730
|
+
<table border="1" class="docutils" id="id4">
|
|
731
|
+
<caption><span class="caption-text"><em>Inclusion specifiers</em></span><a class="headerlink" href="#id4" title="Permalink to this table">¶</a></caption>
|
|
732
|
+
<colgroup>
|
|
733
|
+
<col width="50%" />
|
|
734
|
+
<col width="50%" />
|
|
735
|
+
</colgroup>
|
|
736
|
+
<thead valign="bottom">
|
|
737
|
+
<tr class="row-odd"><th class="head"><strong>Specifier</strong></th>
|
|
738
|
+
<th class="head"><strong>Meaning</strong></th>
|
|
739
|
+
</tr>
|
|
740
|
+
</thead>
|
|
741
|
+
<tbody valign="top">
|
|
742
|
+
<tr class="row-even"><td><code class="docutils literal"><span class="pre">-</span></code></td>
|
|
743
|
+
<td>Explicitly exclude the field for the identifier immediately following</td>
|
|
744
|
+
</tr>
|
|
745
|
+
</tbody>
|
|
746
|
+
</table>
|
|
747
|
+
<p>Identifiers for individual fields follow the syntax described in <a class="reference internal" href="amps_expressions.html#ug-expression-identifiers"><span class="std std-ref">Identifiers</span></a>.</p>
|
|
748
|
+
<p>For select lists, AMPS also recognizes the special field directive of <code class="docutils literal"><span class="pre">-/</span></code> to specify that all fields should
|
|
749
|
+
be excluded and the special field directive of <code class="docutils literal"><span class="pre">+/</span></code> to specify that all fields should be included.</p>
|
|
750
|
+
<p>If no field directive in the select list applies to a given field in a
|
|
751
|
+
message, that field is included in the message.</p>
|
|
752
|
+
<p>If a field is covered by multiple field directives, AMPS respects the most specific field directive. In
|
|
753
|
+
other words, a select list that contains the field directives <code class="docutils literal"><span class="pre">+/,-/details</span></code> will include all fields except the
|
|
754
|
+
details field. A select list that contains the field directives <code class="docutils literal"><span class="pre">-/event,+/event/description</span></code> will include the
|
|
755
|
+
<code class="docutils literal"><span class="pre">/event/description</span></code> subfield, but no other contents of the <code class="docutils literal"><span class="pre">/event</span></code> field. (If an identifier is provided
|
|
756
|
+
twice in the same select list, AMPS uses the first field specifier that contains the identifier.)</p>
|
|
757
|
+
<p>With select lists, AMPS does not create fields that are not in the original message. This means that if the
|
|
758
|
+
select list requests a field that does not exist in the original message, the message delivered to
|
|
759
|
+
the subscriber will not contain that field.</p>
|
|
760
|
+
<p>Notice that a select list only changes how a message is delivered to the
|
|
761
|
+
subscriber that the select list applies to. The original message is unaffected,
|
|
762
|
+
and the complete message is delivered to any subscriber that does not specify
|
|
763
|
+
a select list.</p>
|
|
764
|
+
<p>AMPS contains related functionality that may be more appropriate for
|
|
765
|
+
some applications:</p>
|
|
766
|
+
<ul class="simple">
|
|
767
|
+
<li>To modify a message as it is published to AMPS, use
|
|
768
|
+
<em>Enrichment and Preprocessing</em>. With those features, the original publish
|
|
769
|
+
message is modified and the modified message is stored in AMPS and
|
|
770
|
+
sent to all subscribers.</li>
|
|
771
|
+
<li>AMPS also offers the ability to create a view of a set of messages that
|
|
772
|
+
aggregates data across a set of messages and produces a result (for
|
|
773
|
+
example, the total value of all open orders for each customer). See
|
|
774
|
+
the chapter on <em>Aggregating and Analyzing Data in AMPS</em> for more details.</li>
|
|
775
|
+
</ul>
|
|
776
|
+
</div>
|
|
777
|
+
<div class="section" id="select-list-examples">
|
|
778
|
+
<h3>Select List Examples<a class="headerlink" href="#select-list-examples" title="Permalink to this headline">¶</a></h3>
|
|
779
|
+
<p>For example, consider an original message like the following JSON document:</p>
|
|
780
|
+
<div class="code javascript highlight-default"><div class="highlight"><pre><span></span><span class="p">{</span> <span class="s2">"id"</span><span class="p">:</span> <span class="mi">42</span><span class="p">,</span>
|
|
781
|
+
<span class="s2">"name"</span><span class="p">:</span><span class="s2">"Arthur"</span><span class="p">,</span>
|
|
782
|
+
<span class="s2">"day"</span><span class="p">:</span><span class="s2">"Thursday"</span><span class="p">,</span>
|
|
783
|
+
<span class="s2">"complaint"</span><span class="p">:</span><span class="s2">"Unannounced construction in neighborhood."</span><span class="p">,</span>
|
|
784
|
+
<span class="s2">"pocket_contents"</span><span class="p">:</span>
|
|
785
|
+
<span class="p">{</span> <span class="s2">"left"</span><span class="p">:</span><span class="s2">"twine"</span><span class="p">,</span>
|
|
786
|
+
<span class="s2">"right"</span><span class="p">:</span><span class="s2">"towel"</span> <span class="p">}</span>
|
|
787
|
+
<span class="p">}</span>
|
|
788
|
+
</pre></div>
|
|
789
|
+
</div>
|
|
790
|
+
<p>An application might only need to see the <code class="docutils literal"><span class="pre">id</span></code> and <code class="docutils literal"><span class="pre">complaint</span></code> description.
|
|
791
|
+
To retrieve just those fields of a message, the application could add the
|
|
792
|
+
following option to the command that retrieves the message:</p>
|
|
793
|
+
<div class="code bash highlight-default"><div class="highlight"><pre><span></span><span class="n">select</span><span class="o">=</span><span class="p">[</span><span class="o">-/</span><span class="p">,</span><span class="o">+/</span><span class="nb">id</span><span class="p">,</span><span class="o">+/</span><span class="n">complaint</span><span class="p">]</span>
|
|
794
|
+
</pre></div>
|
|
795
|
+
</div>
|
|
796
|
+
<p>This select list tells AMPS to remove all fields from the message except for
|
|
797
|
+
the <code class="docutils literal"><span class="pre">/id</span></code> field and the <code class="docutils literal"><span class="pre">/complaint</span></code> field. With this select list,
|
|
798
|
+
the message above will be delivered as:</p>
|
|
799
|
+
<div class="code javascript highlight-default"><div class="highlight"><pre><span></span><span class="p">{</span> <span class="s2">"id"</span><span class="p">:</span> <span class="mi">42</span><span class="p">,</span>
|
|
800
|
+
<span class="s2">"complaint"</span><span class="p">:</span><span class="s2">"Unannounced construction in neighborhood."</span>
|
|
801
|
+
<span class="p">}</span>
|
|
802
|
+
</pre></div>
|
|
803
|
+
</div>
|
|
804
|
+
<p>Likewise, an application could want to know the name of the person
|
|
805
|
+
making the complaint and the contents of that person’s left pocket:</p>
|
|
806
|
+
<div class="code bash highlight-default"><div class="highlight"><pre><span></span><span class="n">select</span><span class="o">=</span><span class="p">[</span><span class="o">-/</span><span class="p">,</span><span class="o">+/</span><span class="n">name</span><span class="p">,</span><span class="o">+/</span><span class="n">pocket_contents</span><span class="o">/</span><span class="n">left</span><span class="p">]</span>
|
|
807
|
+
</pre></div>
|
|
808
|
+
</div>
|
|
809
|
+
<p>From the original message, the result of providing this select list would be:</p>
|
|
810
|
+
<div class="code javascript highlight-default"><div class="highlight"><pre><span></span><span class="p">{</span> <span class="s2">"name"</span><span class="p">:</span> <span class="s2">"Arthur"</span><span class="p">,</span>
|
|
811
|
+
<span class="s2">"pocket_contents"</span><span class="p">:</span>
|
|
812
|
+
<span class="p">{</span> <span class="s2">"left"</span><span class="p">:</span><span class="s2">"twine"</span><span class="p">}</span>
|
|
813
|
+
<span class="p">}</span>
|
|
814
|
+
</pre></div>
|
|
815
|
+
</div>
|
|
816
|
+
<p>Last, consider an application that wants to see everything in the message
|
|
817
|
+
except the <code class="docutils literal"><span class="pre">pocket_contents</span></code>. That application could provide an option
|
|
818
|
+
such as:</p>
|
|
819
|
+
<div class="code bash highlight-default"><div class="highlight"><pre><span></span><span class="n">select</span><span class="o">=</span><span class="p">[</span><span class="o">-/</span><span class="n">pocket_contents</span><span class="p">]</span>
|
|
820
|
+
</pre></div>
|
|
821
|
+
</div>
|
|
822
|
+
<p>With that specifier, AMPS provides any field in the message except the
|
|
823
|
+
<code class="docutils literal"><span class="pre">pocket_contents</span></code>, producing the following result:</p>
|
|
824
|
+
<div class="code javascript highlight-default"><div class="highlight"><pre><span></span><span class="p">{</span> <span class="s2">"id"</span><span class="p">:</span> <span class="mi">42</span><span class="p">,</span>
|
|
825
|
+
<span class="s2">"name"</span><span class="p">:</span><span class="s2">"Arthur"</span><span class="p">,</span>
|
|
826
|
+
<span class="s2">"day"</span><span class="p">:</span><span class="s2">"Thursday"</span><span class="p">,</span>
|
|
827
|
+
<span class="s2">"complaint"</span><span class="p">:</span><span class="s2">"Unannounced construction in neighborhood."</span>
|
|
828
|
+
<span class="p">}</span>
|
|
829
|
+
</pre></div>
|
|
830
|
+
</div>
|
|
831
|
+
<div class="admonition tip">
|
|
832
|
+
<p class="first admonition-title">Tip</p>
|
|
833
|
+
<p class="last">Select lists are not available for <code class="docutils literal"><span class="pre">struct</span></code> message types,
|
|
834
|
+
since these types represent a single, contiguous block of memory
|
|
835
|
+
(and, therefore, cannot meaningfully have omitted fields).</p>
|
|
836
|
+
</div>
|
|
837
|
+
</div>
|
|
838
|
+
</div>
|
|
839
|
+
<div class="section" id="message-ordering">
|
|
840
|
+
<span id="pub-sub-ordering"></span><span id="index-8"></span><h2>Message Ordering<a class="headerlink" href="#message-ordering" title="Permalink to this headline">¶</a></h2>
|
|
841
|
+
<p>AMPS guarantees that, for each AMPS instance, each subscription to a topic
|
|
842
|
+
receives messages in the order in which AMPS received the messages (with
|
|
843
|
+
the exception of messages that have been returned to a message queue for
|
|
844
|
+
redelivery). Before a given message is delivered to a subscriber, all
|
|
845
|
+
previous messages for that topic are delivered to the subscriber. AMPS
|
|
846
|
+
does this by enforcing a total order across the instance for all
|
|
847
|
+
messages received from publishers, including messages received via
|
|
848
|
+
replication. When AMPS is using a transaction log, that order is
|
|
849
|
+
preserved in the transaction log for the instance, and persists across
|
|
850
|
+
instance restarts. When replaying from the transaction log, a subscriber
|
|
851
|
+
will always receive messages in the same order in which messages were
|
|
852
|
+
originally delivered by that instance of AMPS.</p>
|
|
853
|
+
<p>This guarantee also applies across topics for subscriptions that involve
|
|
854
|
+
multiple topics, for all topics <em>except</em> views, queues, and conflated
|
|
855
|
+
topics. Views and queues guarantee that every message on the view or the
|
|
856
|
+
queue appears in the order in which the message was published. However,
|
|
857
|
+
the computation involved in producing messages for views and queues may
|
|
858
|
+
introduce some amount of processing latency, and AMPS does not delay
|
|
859
|
+
messages on other topics while performing these computations. For a
|
|
860
|
+
queue that provides <code class="docutils literal"><span class="pre">at-least-once</span></code> delivery, if a processor fails and
|
|
861
|
+
returns a message to the queue, that message will be redelivered (which
|
|
862
|
+
means that the new processor may receive the message out of order).
|
|
863
|
+
Likewise, when AMPS is providing conflation (either through a conflated
|
|
864
|
+
topic or the conflation options on a subscription), AMPS does not
|
|
865
|
+
provide ordering guarantees for conflated messages.</p>
|
|
866
|
+
<p>Applications often use this guarantee to publish checkpoint messages,
|
|
867
|
+
indicating some external state of the system, to a checkpoint topic. For
|
|
868
|
+
example, you might publish messages marking the beginning of a business
|
|
869
|
+
day to a checkpoint topic, <code class="docutils literal"><span class="pre">MARKERS</span></code>, while the <code class="docutils literal"><span class="pre">ORDERS</span></code> topic
|
|
870
|
+
records the orders during that day. Subscribers to the regular
|
|
871
|
+
expression <code class="docutils literal"><span class="pre">^(ORDERS|MARKERS)$</span></code> are guaranteed to receive the message
|
|
872
|
+
that marks the business day before any of the messages published to the
|
|
873
|
+
<code class="docutils literal"><span class="pre">ORDERS</span></code> topic for that day, since AMPS preserves the original order of
|
|
874
|
+
the messages.</p>
|
|
875
|
+
<p>For messages constructed by AMPS, such as the output of a view, AMPS
|
|
876
|
+
processes messages for each topic in the order in which they arrive
|
|
877
|
+
(unless conflation is requested), and delivers each calculated message
|
|
878
|
+
to subscribers as soon as the calculation is finished and a message is
|
|
879
|
+
produced. This keeps the latency low for each individual topic. However,
|
|
880
|
+
this means that while AMPS guarantees the order in which messages are
|
|
881
|
+
produced within each view, messages produced for views that do simple
|
|
882
|
+
operations will generally take less time to be produced than messages
|
|
883
|
+
for views that perform complex calculations or require more complicated
|
|
884
|
+
serialization. This means that AMPS guarantees ordering within view
|
|
885
|
+
topics, but does not guarantee that messages for separate view topics
|
|
886
|
+
arrive in a particular order.</p>
|
|
887
|
+
<p>The figure below shows a possible ordering for messages received on an
|
|
888
|
+
underlying topic and two views that use the topic:</p>
|
|
889
|
+
<img alt="../_images/MessageOrdering.svg" src="../_images/MessageOrdering.svg" /><p>Notice that within each topic, AMPS enforces an absolute order. However,
|
|
890
|
+
the Simple View produces the results of Message 3 before the Complex
|
|
891
|
+
View produces the results of Message 2.</p>
|
|
892
|
+
<div class="section" id="replicated-message-ordering">
|
|
893
|
+
<h3>Replicated Message Ordering<a class="headerlink" href="#replicated-message-ordering" title="Permalink to this headline">¶</a></h3>
|
|
894
|
+
<p>When providing messages received via <em>replication</em> (see
|
|
895
|
+
<a class="reference internal" href="replication.html#ha-replication"><span class="std std-ref">Replicating Messages Between Instances</span></a>), the principles on message ordering
|
|
896
|
+
provided above still apply. AMPS records messages into the local
|
|
897
|
+
transaction log in the order in which messages are received by the
|
|
898
|
+
instance and provides messages to subscribers in that order. AMPS uses
|
|
899
|
+
the sequence of publishes assigned by the original publisher and the
|
|
900
|
+
order assigned by the upstream instance to ensure that all replicated
|
|
901
|
+
messages are received and recorded in order with no gaps or duplicates.
|
|
902
|
+
AMPS does not enforce a global total ordering across a replication
|
|
903
|
+
topology. This peer-to-peer approach means that an AMPS instance can
|
|
904
|
+
continue accepting messages from publishers and providing messages to
|
|
905
|
+
subscribers even when the remote side of a replication link is offline
|
|
906
|
+
or if replication is delayed due to network congestion. However, if two
|
|
907
|
+
messages are published to <em>different</em> instances at the same time by
|
|
908
|
+
different publishers, the two instances may record a different <em>overall</em>
|
|
909
|
+
message order for those messages, even though message order <em>from each
|
|
910
|
+
publisher</em> is preserved.</p>
|
|
911
|
+
</div>
|
|
912
|
+
</div>
|
|
913
|
+
</div>
|
|
914
|
+
|
|
915
|
+
|
|
916
|
+
</div>
|
|
917
|
+
</div>
|
|
918
|
+
</div>
|
|
919
|
+
<div class="clearer"></div>
|
|
920
|
+
</div>
|
|
921
|
+
<div class="footer">
|
|
922
|
+
©2023 60East Technologies, Inc. (version develop).
|
|
923
|
+
|
|
924
|
+
|
|
|
925
|
+
Powered by <a href="http://sphinx-doc.org/">Sphinx 1.5.3</a>
|
|
926
|
+
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.10</a>
|
|
927
|
+
|
|
928
|
+
</div>
|
|
929
|
+
|
|
930
|
+
|
|
931
|
+
|
|
932
|
+
|
|
933
|
+
</body>
|
|
934
|
+
</html>
|