amps-python-client 5.3.4.1__zip → 5.3.4.3__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.3/LICENSE +168 -0
- amps-python-client-5.3.4.3/PKG-INFO +112 -0
- amps-python-client-5.3.4.3/docs/command-reference/doctrees/chapters/ack-messages.doctree +0 -0
- amps-python-client-5.3.4.3/docs/command-reference/doctrees/chapters/content-messages.doctree +0 -0
- amps-python-client-5.3.4.3/docs/command-reference/doctrees/chapters/intro.doctree +0 -0
- amps-python-client-5.3.4.3/docs/command-reference/doctrees/chapters/logon.doctree +0 -0
- amps-python-client-5.3.4.3/docs/command-reference/doctrees/chapters/protocol-reference.doctree +0 -0
- amps-python-client-5.3.4.3/docs/command-reference/doctrees/chapters/publishing.doctree +0 -0
- amps-python-client-5.3.4.3/docs/command-reference/doctrees/chapters/query-delimiters.doctree +0 -0
- amps-python-client-5.3.4.3/docs/command-reference/doctrees/chapters/query-subscribe.doctree +0 -0
- amps-python-client-5.3.4.3/docs/command-reference/doctrees/chapters/removing.doctree +0 -0
- amps-python-client-5.3.4.3/docs/command-reference/doctrees/chapters/utilities.doctree +0 -0
- amps-python-client-5.3.4.3/docs/command-reference/doctrees/environment.pickle +0 -0
- amps-python-client-5.3.4.3/docs/command-reference/doctrees/index.doctree +0 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/.buildinfo +4 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/_sources/chapters/ack-messages.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/_sources/chapters/content-messages.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/_sources/chapters/intro.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/_sources/chapters/logon.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/_sources/chapters/protocol-reference.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/_sources/chapters/publishing.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/_sources/chapters/query-delimiters.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/_sources/chapters/query-subscribe.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/_sources/chapters/removing.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/_sources/chapters/utilities.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/_sources/index.rst.txt +36 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/_static/custom.css +161 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/chapters/ack-messages.html +95 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/chapters/content-messages.html +95 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/chapters/intro.html +95 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/chapters/logon.html +95 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/chapters/protocol-reference.html +93 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/chapters/publishing.html +95 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/chapters/query-delimiters.html +95 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/chapters/query-subscribe.html +95 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/chapters/removing.html +95 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/chapters/utilities.html +95 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/genindex.html +97 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/index.html +98 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/objects.inv +6 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/search.html +107 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/searchindex.js +1 -0
- amps-python-client-5.3.4.3/docs/html/.buildinfo +4 -0
- amps-python-client-5.3.4.3/docs/html/code.html +6851 -0
- amps-python-client-5.3.4.3/docs/html/genindex.html +1363 -0
- amps-python-client-5.3.4.3/docs/html/index.html +131 -0
- amps-python-client-5.3.4.3/docs/html/objects.inv +0 -0
- amps-python-client-5.3.4.3/docs/html/py-modindex.html +111 -0
- amps-python-client-5.3.4.3/docs/html/search.html +107 -0
- amps-python-client-5.3.4.3/docs/html/searchindex.js +1 -0
- amps-python-client-5.3.4.3/docs/python/doctrees/chapters/advanced-topics.doctree +0 -0
- amps-python-client-5.3.4.3/docs/python/doctrees/chapters/cpp-compiler-list.doctree +0 -0
- amps-python-client-5.3.4.3/docs/python/doctrees/chapters/cpp-feature-table.doctree +0 -0
- amps-python-client-5.3.4.3/docs/python/doctrees/chapters/creating-commands.doctree +0 -0
- amps-python-client-5.3.4.3/docs/python/doctrees/chapters/deltas.doctree +0 -0
- amps-python-client-5.3.4.3/docs/python/doctrees/chapters/error-handling.doctree +0 -0
- amps-python-client-5.3.4.3/docs/python/doctrees/chapters/exceptions.doctree +0 -0
- amps-python-client-5.3.4.3/docs/python/doctrees/chapters/first-program.doctree +0 -0
- amps-python-client-5.3.4.3/docs/python/doctrees/chapters/high-availability.doctree +0 -0
- amps-python-client-5.3.4.3/docs/python/doctrees/chapters/installing.doctree +0 -0
- amps-python-client-5.3.4.3/docs/python/doctrees/chapters/introduction.doctree +0 -0
- amps-python-client-5.3.4.3/docs/python/doctrees/chapters/moving-from-python-lite.doctree +0 -0
- amps-python-client-5.3.4.3/docs/python/doctrees/chapters/performance-tips.doctree +0 -0
- amps-python-client-5.3.4.3/docs/python/doctrees/chapters/queues.doctree +0 -0
- amps-python-client-5.3.4.3/docs/python/doctrees/chapters/sow.doctree +0 -0
- amps-python-client-5.3.4.3/docs/python/doctrees/chapters/subscriptions.doctree +0 -0
- amps-python-client-5.3.4.3/docs/python/doctrees/chapters/utilities.doctree +0 -0
- amps-python-client-5.3.4.3/docs/python/doctrees/environment.pickle +0 -0
- amps-python-client-5.3.4.3/docs/python/doctrees/index.doctree +0 -0
- amps-python-client-5.3.4.3/docs/python/html/.buildinfo +4 -0
- amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/advanced-topics.rst.txt +398 -0
- amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/cpp-feature-table.rst.txt +26 -0
- amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/creating-commands.rst.txt +159 -0
- amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/deltas.rst.txt +79 -0
- amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/error-handling.rst.txt +481 -0
- amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/exceptions.rst.txt +123 -0
- amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/first-program.rst.txt +168 -0
- amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/high-availability.rst.txt +879 -0
- amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/installing.rst.txt +184 -0
- amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/introduction.rst.txt +50 -0
- amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/moving-from-python-lite.rst.txt +32 -0
- amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/performance-tips.rst.txt +432 -0
- amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/queues.rst.txt +282 -0
- amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/sow.rst.txt +294 -0
- amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/subscriptions.rst.txt +374 -0
- amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/utilities.rst.txt +214 -0
- amps-python-client-5.3.4.3/docs/python/html/_static/custom.css +161 -0
- amps-python-client-5.3.4.3/docs/python/html/chapters/advanced-topics.html +447 -0
- amps-python-client-5.3.4.3/docs/python/html/chapters/cpp-compiler-list.html +92 -0
- amps-python-client-5.3.4.3/docs/python/html/chapters/cpp-feature-table.html +156 -0
- amps-python-client-5.3.4.3/docs/python/html/chapters/creating-commands.html +2882 -0
- amps-python-client-5.3.4.3/docs/python/html/chapters/deltas.html +169 -0
- amps-python-client-5.3.4.3/docs/python/html/chapters/error-handling.html +745 -0
- amps-python-client-5.3.4.3/docs/python/html/chapters/exceptions.html +266 -0
- amps-python-client-5.3.4.3/docs/python/html/chapters/first-program.html +526 -0
- amps-python-client-5.3.4.3/docs/python/html/chapters/high-availability.html +1017 -0
- amps-python-client-5.3.4.3/docs/python/html/chapters/installing.html +264 -0
- amps-python-client-5.3.4.3/docs/python/html/chapters/introduction.html +245 -0
- amps-python-client-5.3.4.3/docs/python/html/chapters/moving-from-python-lite.html +118 -0
- amps-python-client-5.3.4.3/docs/python/html/chapters/performance-tips.html +499 -0
- amps-python-client-5.3.4.3/docs/python/html/chapters/queues.html +352 -0
- amps-python-client-5.3.4.3/docs/python/html/chapters/sow.html +383 -0
- amps-python-client-5.3.4.3/docs/python/html/chapters/subscriptions.html +535 -0
- amps-python-client-5.3.4.3/docs/python/html/chapters/utilities.html +302 -0
- amps-python-client-5.3.4.3/docs/python/html/genindex.html +351 -0
- amps-python-client-5.3.4.3/docs/python/html/index.html +382 -0
- amps-python-client-5.3.4.3/docs/python/html/objects.inv +0 -0
- amps-python-client-5.3.4.3/docs/python/html/search.html +107 -0
- amps-python-client-5.3.4.3/docs/python/html/searchindex.js +1 -0
- amps-python-client-5.3.4.3/docs/python-quickstart/doctrees/chapters/crankitup.doctree +0 -0
- amps-python-client-5.3.4.3/docs/python-quickstart/doctrees/chapters/equipment.doctree +0 -0
- amps-python-client-5.3.4.3/docs/python-quickstart/doctrees/environment.pickle +0 -0
- amps-python-client-5.3.4.3/docs/python-quickstart/doctrees/index.doctree +0 -0
- amps-python-client-5.3.4.3/docs/python-quickstart/html/.buildinfo +4 -0
- amps-python-client-5.3.4.3/docs/python-quickstart/html/_static/custom.css +161 -0
- amps-python-client-5.3.4.3/docs/python-quickstart/html/chapters/crankitup.html +271 -0
- amps-python-client-5.3.4.3/docs/python-quickstart/html/chapters/equipment.html +105 -0
- amps-python-client-5.3.4.3/docs/python-quickstart/html/genindex.html +97 -0
- amps-python-client-5.3.4.3/docs/python-quickstart/html/index.html +381 -0
- amps-python-client-5.3.4.3/docs/python-quickstart/html/objects.inv +0 -0
- amps-python-client-5.3.4.3/docs/python-quickstart/html/search.html +107 -0
- amps-python-client-5.3.4.3/docs/python-quickstart/html/searchindex.js +1 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/acks.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/actions.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/amps-statistics.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/amps_expressions.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/amps_functions.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/auxiliary_modules.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/config-file-shortcuts.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/conflated_topics.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/constructing-fields.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/daemon.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/delta.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/distribution.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/enrichment.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/events.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/file_format_versions.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/glossary.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/ha.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/installing_and_starting.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/intro.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/logging.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/messageTypes.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/monitoring.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/oof.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/operation.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/pub_sub.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/queues.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/replication.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/securing.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/sow.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/sow_queries.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/spark.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/transports.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/troubleshooting.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/txlog.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/usecases.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/utilities.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/views.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/environment.pickle +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/index.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/.buildinfo +4 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/acks.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/actions.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/amps-statistics.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/amps_expressions.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/amps_functions.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/auxiliary_modules.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/config-file-shortcuts.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/conflated_topics.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/constructing-fields.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/daemon.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/delta.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/distribution.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/enrichment.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/events.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/file_format_versions.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/glossary.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/ha.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/installing_and_starting.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/intro.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/logging.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/messageTypes.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/monitoring.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/oof.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/operation.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/pub_sub.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/queues.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/replication.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/securing.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/sow.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/sow_queries.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/transports.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/troubleshooting.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/txlog.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/usecases.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/utilities.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/views.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/index.rst.txt +62 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_static/custom.css +161 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/acks.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/actions.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/amps-statistics.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/amps_expressions.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/amps_functions.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/auxiliary_modules.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/config-file-shortcuts.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/conflated_topics.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/constructing-fields.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/daemon.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/delta.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/distribution.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/enrichment.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/events.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/file_format_versions.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/glossary.html +92 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/ha.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/installing_and_starting.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/intro.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/logging.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/messageTypes.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/monitoring.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/oof.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/operation.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/pub_sub.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/queues.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/replication.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/securing.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/sow.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/sow_queries.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/spark.html +819 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/transports.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/troubleshooting.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/txlog.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/usecases.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/utilities.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/views.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/genindex.html +133 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/index.html +96 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/objects.inv +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/search.html +106 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/searchindex.js +1 -0
- amps-python-client-5.3.4.3/include/ampspy_bookmarkstore.hpp +63 -0
- amps-python-client-5.3.4.3/include/ampspy_compat.h +63 -0
- amps-python-client-5.3.4.3/include/ampspy_defs.hpp +181 -0
- amps-python-client-5.3.4.3/include/ampspy_recoverypointadapter.hpp +52 -0
- amps-python-client-5.3.4.3/include/ampspy_shims.hpp +113 -0
- amps-python-client-5.3.4.3/include/ampspy_type_object.hpp +242 -0
- amps-python-client-5.3.4.3/include/ampspy_types.hpp +1139 -0
- amps-python-client-5.3.4.3/include/ampspyver.h +30 -0
- amps-python-client-5.3.4.3/index.html +66 -0
- amps-python-client-5.3.4.3/samples/AMPSConsolePublisher.py +59 -0
- amps-python-client-5.3.4.3/samples/AMPSConsoleSubscriber.py +63 -0
- amps-python-client-5.3.4.3/samples/AMPSFIXBuilderPublisher.py +71 -0
- amps-python-client-5.3.4.3/samples/AMPSFIXShredderSubscriber.py +69 -0
- amps-python-client-5.3.4.3/samples/AMPSNVFIXBuilderPublisher.py +71 -0
- amps-python-client-5.3.4.3/samples/AMPSNVFIXShredderSubscriber.py +67 -0
- amps-python-client-5.3.4.3/samples/AMPSPublishForReplay.py +81 -0
- amps-python-client-5.3.4.3/samples/AMPSQueueConsumer.py +69 -0
- amps-python-client-5.3.4.3/samples/AMPSQueuePublisher.py +59 -0
- amps-python-client-5.3.4.3/samples/AMPSSOWConsolePublisher.py +67 -0
- amps-python-client-5.3.4.3/samples/AMPSSOWConsoleSubscriber.py +77 -0
- amps-python-client-5.3.4.3/samples/AMPSSOWandSubscribeConsoleSubscriber.py +79 -0
- amps-python-client-5.3.4.3/samples/AMPSSOWandSubscribeWithOOF.py +108 -0
- amps-python-client-5.3.4.3/samples/AMPSSubscribeForReplay.py +128 -0
- amps-python-client-5.3.4.3/samples/AMPSUpdateForOOF.py +123 -0
- amps-python-client-5.3.4.3/samples/CompositeMessagePublisher.py +84 -0
- amps-python-client-5.3.4.3/samples/CompositeMessageSubscriber.py +87 -0
- amps-python-client-5.3.4.3/samples/RandomServerChooser.py +66 -0
- amps-python-client-5.3.4.3/samples/sample.xml +335 -0
- amps-python-client-5.3.4.3/setup.py +210 -0
- amps-python-client-5.3.4.3/setup_amps.py +94 -0
- amps-python-client-5.3.4.3/src/ampspy_shims.cpp +214 -0
- amps-python-client-5.3.4.3/src/ampspy_type_object.cpp +495 -0
- amps-python-client-5.3.4.3/src/authenticator.cpp +128 -0
- amps-python-client-5.3.4.3/src/bookmarkstore.cpp +246 -0
- amps-python-client-5.3.4.3/src/client.cpp +2648 -0
- amps-python-client-5.3.4.3/src/client_docs.h +1210 -0
- amps-python-client-5.3.4.3/src/cmessagehandler.cpp +161 -0
- amps-python-client-5.3.4.3/src/command.cpp +164 -0
- amps-python-client-5.3.4.3/src/command_docs.h +274 -0
- amps-python-client-5.3.4.3/src/compositemessagebuilder.cpp +113 -0
- amps-python-client-5.3.4.3/src/compositemessageparser.cpp +151 -0
- amps-python-client-5.3.4.3/src/conflatingrecoverypointadapter.cpp +197 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/BlockPublishStore.hpp +2050 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/BlockStore.hpp +674 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/BookmarkStore.hpp +542 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/Buffer.hpp +214 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/CompositeMessageBuilder.hpp +174 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/CompositeMessageParser.hpp +151 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/DefaultServerChooser.hpp +162 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/Field.hpp +723 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/HAClient.hpp +370 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/HAClientImpl.hpp +460 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/HybridPublishStore.hpp +481 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/LoggedBookmarkStore.hpp +1256 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/MMapBookmarkStore.hpp +1283 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/MMapStoreBuffer.hpp +297 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/MemoryBookmarkStore.hpp +1628 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/MemoryPublishStore.hpp +66 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/MemoryStoreBuffer.hpp +247 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/MemorySubscriptionManager.hpp +850 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/Message.hpp +1827 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/MessageRouter.hpp +647 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/PublishStore.hpp +158 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/ReconnectDelayStrategy.hpp +106 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/ReconnectDelayStrategyImpl.hpp +317 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/RecoveryPoint.hpp +323 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/RecoveryPointAdapter.hpp +501 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/RingBookmarkStore.hpp +669 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/SOWRecoveryPointAdapter.hpp +494 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/ServerChooser.hpp +156 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/ServerChooserImpl.hpp +95 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/amps.h +815 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/amps_impl.h +220 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/amps_ssl.h +78 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/ampscrc.hpp +208 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/ampsplusplus.hpp +8846 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/ampsuri.h +84 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/ampsver.h +41 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/ampsver.h.in +41 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/constants.hpp +194 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/util.hpp +1722 -0
- amps-python-client-5.3.4.3/src/cpp/src/amps_protocol.c +693 -0
- amps-python-client-5.3.4.3/src/cpp/src/amps_ssl.c +565 -0
- amps-python-client-5.3.4.3/src/cpp/src/atfork.c +484 -0
- amps-python-client-5.3.4.3/src/cpp/src/client.c +498 -0
- amps-python-client-5.3.4.3/src/cpp/src/message.c +837 -0
- amps-python-client-5.3.4.3/src/cpp/src/message_generated.h +611 -0
- amps-python-client-5.3.4.3/src/cpp/src/tcp.c +1683 -0
- amps-python-client-5.3.4.3/src/cpp/src/tcps.c +2005 -0
- amps-python-client-5.3.4.3/src/cpp/src/transports.c +129 -0
- amps-python-client-5.3.4.3/src/cpp/src/unix.c +1063 -0
- amps-python-client-5.3.4.3/src/cpp/src/uri.c +301 -0
- amps-python-client-5.3.4.3/src/exponentialdelaystrategy.cpp +131 -0
- amps-python-client-5.3.4.3/src/failedwritehandler.cpp +116 -0
- amps-python-client-5.3.4.3/src/fixbuilder.cpp +146 -0
- amps-python-client-5.3.4.3/src/fixeddelaystrategy.cpp +115 -0
- amps-python-client-5.3.4.3/src/fixshredder.cpp +105 -0
- amps-python-client-5.3.4.3/src/fixshredder_docs.h +38 -0
- amps-python-client-5.3.4.3/src/haclient.cpp +691 -0
- amps-python-client-5.3.4.3/src/haclient_docs.h +200 -0
- amps-python-client-5.3.4.3/src/hybridpublishstore.cpp +137 -0
- amps-python-client-5.3.4.3/src/hybridpublishstore_docs.h +31 -0
- amps-python-client-5.3.4.3/src/memorybookmarkstore.cpp +373 -0
- amps-python-client-5.3.4.3/src/memorybookmarkstore_docs.h +39 -0
- amps-python-client-5.3.4.3/src/memorypublishstore.cpp +160 -0
- amps-python-client-5.3.4.3/src/memorypublishstore_docs.h +32 -0
- amps-python-client-5.3.4.3/src/message.cpp +765 -0
- amps-python-client-5.3.4.3/src/message_docs.h +306 -0
- amps-python-client-5.3.4.3/src/messagestream.cpp +630 -0
- amps-python-client-5.3.4.3/src/messagestream_docs.h +45 -0
- amps-python-client-5.3.4.3/src/mmapbookmarkstore.cpp +422 -0
- amps-python-client-5.3.4.3/src/nvfixbuilder.cpp +160 -0
- amps-python-client-5.3.4.3/src/nvfixbuilder_docs.h +35 -0
- amps-python-client-5.3.4.3/src/nvfixshredder.cpp +99 -0
- amps-python-client-5.3.4.3/src/nvfixshredder_docs.h +43 -0
- amps-python-client-5.3.4.3/src/publishstore.cpp +183 -0
- amps-python-client-5.3.4.3/src/raw_wrapper.cpp +765 -0
- amps-python-client-5.3.4.3/src/reason.cpp +71 -0
- amps-python-client-5.3.4.3/src/recoverypoint.cpp +135 -0
- amps-python-client-5.3.4.3/src/recoverypointadapter.cpp +171 -0
- amps-python-client-5.3.4.3/src/ringbookmarkstore.cpp +360 -0
- amps-python-client-5.3.4.3/src/serverchooser.cpp +245 -0
- amps-python-client-5.3.4.3/src/serverchooser_docs.h +41 -0
- amps-python-client-5.3.4.3/src/sowrecoverypointadapter.cpp +248 -0
- amps-python-client-5.3.4.3/src/store.cpp +62 -0
- amps-python-client-5.3.4.3/src/versioninfo.cpp +175 -0
- amps-python-client-5.3.4.1/LICENSE +0 -157
- amps-python-client-5.3.4.1/PKG-INFO +0 -112
- 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 +0 -4
- amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/ack-messages.rst.txt +0 -32
- amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/content-messages.rst.txt +0 -27
- amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/intro.rst.txt +0 -43
- amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/logon.rst.txt +0 -231
- amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/protocol-reference.rst.txt +0 -1474
- amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/publishing.rst.txt +0 -25
- amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/query-delimiters.rst.txt +0 -12
- amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/query-subscribe.rst.txt +0 -23
- amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/removing.rst.txt +0 -6
- amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/utilities.rst.txt +0 -13
- amps-python-client-5.3.4.1/docs/command-reference/html/_sources/index.rst.txt +0 -56
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/custom.css +0 -192
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/custom.css.backup +0 -161
- amps-python-client-5.3.4.1/docs/command-reference/html/chapters/ack-messages.html +0 -417
- amps-python-client-5.3.4.1/docs/command-reference/html/chapters/content-messages.html +0 -417
- amps-python-client-5.3.4.1/docs/command-reference/html/chapters/intro.html +0 -126
- amps-python-client-5.3.4.1/docs/command-reference/html/chapters/logon.html +0 -295
- amps-python-client-5.3.4.1/docs/command-reference/html/chapters/protocol-reference.html +0 -1190
- amps-python-client-5.3.4.1/docs/command-reference/html/chapters/publishing.html +0 -436
- amps-python-client-5.3.4.1/docs/command-reference/html/chapters/query-delimiters.html +0 -173
- amps-python-client-5.3.4.1/docs/command-reference/html/chapters/query-subscribe.html +0 -2123
- amps-python-client-5.3.4.1/docs/command-reference/html/chapters/removing.html +0 -299
- amps-python-client-5.3.4.1/docs/command-reference/html/chapters/utilities.html +0 -287
- amps-python-client-5.3.4.1/docs/command-reference/html/genindex.html +0 -97
- amps-python-client-5.3.4.1/docs/command-reference/html/index.html +0 -138
- 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 +0 -107
- amps-python-client-5.3.4.1/docs/command-reference/html/searchindex.js +0 -1
- amps-python-client-5.3.4.1/docs/html/.buildinfo +0 -4
- amps-python-client-5.3.4.1/docs/html/code.html +0 -6503
- amps-python-client-5.3.4.1/docs/html/genindex.html +0 -1361
- amps-python-client-5.3.4.1/docs/html/index.html +0 -131
- 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 +0 -111
- amps-python-client-5.3.4.1/docs/html/search.html +0 -107
- amps-python-client-5.3.4.1/docs/html/searchindex.js +0 -1
- 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 +0 -4
- amps-python-client-5.3.4.1/docs/python/html/_images/caution.svg +0 -25
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/advanced-topics.rst.txt +0 -398
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/cpp-feature-table.rst.txt +0 -26
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/creating-commands.rst.txt +0 -159
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/deltas.rst.txt +0 -79
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/error-handling.rst.txt +0 -482
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/exceptions.rst.txt +0 -128
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/first-program.rst.txt +0 -142
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/high-availability.rst.txt +0 -876
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/installing.rst.txt +0 -184
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/introduction.rst.txt +0 -50
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/moving-from-python-lite.rst.txt +0 -32
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/performance-tips.rst.txt +0 -434
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/queues.rst.txt +0 -282
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/sow.rst.txt +0 -292
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/subscriptions.rst.txt +0 -374
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/utilities.rst.txt +0 -214
- amps-python-client-5.3.4.1/docs/python/html/_static/custom.css +0 -192
- amps-python-client-5.3.4.1/docs/python/html/_static/custom.css.backup +0 -161
- amps-python-client-5.3.4.1/docs/python/html/chapters/advanced-topics.html +0 -447
- amps-python-client-5.3.4.1/docs/python/html/chapters/cpp-compiler-list.html +0 -92
- amps-python-client-5.3.4.1/docs/python/html/chapters/cpp-feature-table.html +0 -156
- amps-python-client-5.3.4.1/docs/python/html/chapters/creating-commands.html +0 -2837
- amps-python-client-5.3.4.1/docs/python/html/chapters/deltas.html +0 -169
- amps-python-client-5.3.4.1/docs/python/html/chapters/error-handling.html +0 -746
- amps-python-client-5.3.4.1/docs/python/html/chapters/exceptions.html +0 -272
- amps-python-client-5.3.4.1/docs/python/html/chapters/first-program.html +0 -499
- amps-python-client-5.3.4.1/docs/python/html/chapters/high-availability.html +0 -1014
- amps-python-client-5.3.4.1/docs/python/html/chapters/installing.html +0 -264
- amps-python-client-5.3.4.1/docs/python/html/chapters/introduction.html +0 -245
- amps-python-client-5.3.4.1/docs/python/html/chapters/moving-from-python-lite.html +0 -118
- amps-python-client-5.3.4.1/docs/python/html/chapters/performance-tips.html +0 -499
- amps-python-client-5.3.4.1/docs/python/html/chapters/queues.html +0 -352
- amps-python-client-5.3.4.1/docs/python/html/chapters/sow.html +0 -381
- amps-python-client-5.3.4.1/docs/python/html/chapters/subscriptions.html +0 -535
- amps-python-client-5.3.4.1/docs/python/html/chapters/utilities.html +0 -302
- amps-python-client-5.3.4.1/docs/python/html/genindex.html +0 -351
- amps-python-client-5.3.4.1/docs/python/html/index.html +0 -380
- 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 +0 -107
- amps-python-client-5.3.4.1/docs/python/html/searchindex.js +0 -1
- 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 +0 -4
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/custom.css +0 -192
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/custom.css.backup +0 -161
- amps-python-client-5.3.4.1/docs/python-quickstart/html/chapters/crankitup.html +0 -271
- amps-python-client-5.3.4.1/docs/python-quickstart/html/chapters/equipment.html +0 -105
- amps-python-client-5.3.4.1/docs/python-quickstart/html/genindex.html +0 -97
- amps-python-client-5.3.4.1/docs/python-quickstart/html/index.html +0 -382
- 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 +0 -107
- amps-python-client-5.3.4.1/docs/python-quickstart/html/searchindex.js +0 -1
- 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 +0 -4
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/AMPS-Queues-Intro.svg +0 -1330
- 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 +0 -235
- 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 +0 -1
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/PubSub2.svg +0 -1
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/SOWAndSubscribeAndReplace.svg +0 -684
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/SOWQuery1.svg +0 -402
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/SOWQuery2.svg +0 -505
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/UseCaseFig1.svg +0 -1
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/UseCaseFig2.svg +0 -1
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/UseCaseFig3.svg +0 -1
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/UseCaseFig4.svg +0 -1
- 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 +0 -25
- 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 +0 -25
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/inline_view_conflation.svg +0 -1
- 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 +0 -627
- 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 +0 -248
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/sow_overview_2.svg +0 -183
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/sow_update_sequence.svg +0 -1
- 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 +0 -31
- 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 +0 -23
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/acks.rst.txt +0 -232
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/actions.rst.txt +0 -111
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/amps-statistics.rst.txt +0 -358
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/amps_expressions.rst.txt +0 -83
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/amps_functions.rst.txt +0 -11
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/auxiliary_modules.rst.txt +0 -86
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/config-file-shortcuts.rst.txt +0 -9
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/conflated_topics.rst.txt +0 -111
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/constructing-fields.rst.txt +0 -269
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/daemon.rst.txt +0 -232
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/delta.rst.txt +0 -556
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/distribution.rst.txt +0 -186
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/enrichment.rst.txt +0 -191
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/events.rst.txt +0 -39
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/file_format_versions.rst.txt +0 -203
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/glossary.rst.txt +0 -101
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/ha.rst.txt +0 -465
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/installing_and_starting.rst.txt +0 -23
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/intro.rst.txt +0 -116
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/logging.rst.txt +0 -34
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/messageTypes.rst.txt +0 -1398
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/monitoring.rst.txt +0 -326
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/oof.rst.txt +0 -312
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/operation.rst.txt +0 -27
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/pub_sub.rst.txt +0 -49
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/queues.rst.txt +0 -1351
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/replication.rst.txt +0 -1228
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/securing.rst.txt +0 -657
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/sow.rst.txt +0 -57
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/sow_queries.rst.txt +0 -25
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/transports.rst.txt +0 -291
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/troubleshooting.rst.txt +0 -517
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/txlog.rst.txt +0 -62
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/usecases.rst.txt +0 -21
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/utilities.rst.txt +0 -62
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/views.rst.txt +0 -175
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/index.rst.txt +0 -110
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/custom.css +0 -192
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/custom.css.backup +0 -161
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/acks.html +0 -289
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/actions.html +0 -3782
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/amps-statistics.html +0 -439
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/amps_expressions.html +0 -1552
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/amps_functions.html +0 -1626
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/auxiliary_modules.html +0 -2548
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/config-file-shortcuts.html +0 -508
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/conflated_topics.html +0 -328
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/constructing-fields.html +0 -447
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/daemon.html +0 -295
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/delta.html +0 -609
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/distribution.html +0 -246
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/enrichment.html +0 -264
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/events.html +0 -449
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/file_format_versions.html +0 -229
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/glossary.html +0 -215
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/ha.html +0 -978
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/installing_and_starting.html +0 -357
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/intro.html +0 -572
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/logging.html +0 -972
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/messageTypes.html +0 -1280
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/monitoring.html +0 -718
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/oof.html +0 -341
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/operation.html +0 -1515
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/pub_sub.html +0 -934
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/queues.html +0 -1767
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/replication.html +0 -1777
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/securing.html +0 -697
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/sow.html +0 -1038
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/sow_queries.html +0 -621
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/spark.html +0 -819
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/transports.html +0 -352
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/troubleshooting.html +0 -530
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/txlog.html +0 -1013
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/usecases.html +0 -288
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/utilities.html +0 -133
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/views.html +0 -1120
- amps-python-client-5.3.4.1/docs/user-guide/html/genindex.html +0 -1261
- amps-python-client-5.3.4.1/docs/user-guide/html/index.html +0 -163
- 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 +0 -106
- amps-python-client-5.3.4.1/docs/user-guide/html/searchindex.js +0 -1
- amps-python-client-5.3.4.1/include/ampspy_bookmarkstore.hpp +0 -63
- amps-python-client-5.3.4.1/include/ampspy_compat.h +0 -63
- amps-python-client-5.3.4.1/include/ampspy_defs.hpp +0 -181
- amps-python-client-5.3.4.1/include/ampspy_recoverypointadapter.hpp +0 -52
- amps-python-client-5.3.4.1/include/ampspy_shims.hpp +0 -113
- amps-python-client-5.3.4.1/include/ampspy_type_object.hpp +0 -242
- amps-python-client-5.3.4.1/include/ampspy_types.hpp +0 -1139
- amps-python-client-5.3.4.1/include/ampspyver.h +0 -30
- amps-python-client-5.3.4.1/index.html +0 -66
- amps-python-client-5.3.4.1/samples/AMPSConsolePublisher.py +0 -59
- amps-python-client-5.3.4.1/samples/AMPSConsoleSubscriber.py +0 -63
- amps-python-client-5.3.4.1/samples/AMPSFIXBuilderPublisher.py +0 -71
- amps-python-client-5.3.4.1/samples/AMPSFIXShredderSubscriber.py +0 -69
- amps-python-client-5.3.4.1/samples/AMPSNVFIXBuilderPublisher.py +0 -71
- amps-python-client-5.3.4.1/samples/AMPSNVFIXShredderSubscriber.py +0 -67
- amps-python-client-5.3.4.1/samples/AMPSPublishForReplay.py +0 -81
- amps-python-client-5.3.4.1/samples/AMPSQueueConsumer.py +0 -69
- amps-python-client-5.3.4.1/samples/AMPSQueuePublisher.py +0 -59
- amps-python-client-5.3.4.1/samples/AMPSSOWConsolePublisher.py +0 -67
- amps-python-client-5.3.4.1/samples/AMPSSOWConsoleSubscriber.py +0 -77
- amps-python-client-5.3.4.1/samples/AMPSSOWandSubscribeConsoleSubscriber.py +0 -79
- amps-python-client-5.3.4.1/samples/AMPSSOWandSubscribeWithOOF.py +0 -108
- amps-python-client-5.3.4.1/samples/AMPSSubscribeForReplay.py +0 -128
- amps-python-client-5.3.4.1/samples/AMPSUpdateForOOF.py +0 -123
- amps-python-client-5.3.4.1/samples/CompositeMessagePublisher.py +0 -84
- amps-python-client-5.3.4.1/samples/CompositeMessageSubscriber.py +0 -87
- amps-python-client-5.3.4.1/samples/RandomServerChooser.py +0 -41
- amps-python-client-5.3.4.1/samples/sample.xml +0 -335
- amps-python-client-5.3.4.1/setup.py +0 -209
- amps-python-client-5.3.4.1/setup_amps.py +0 -94
- amps-python-client-5.3.4.1/src/ampspy_shims.cpp +0 -203
- amps-python-client-5.3.4.1/src/ampspy_type_object.cpp +0 -484
- amps-python-client-5.3.4.1/src/authenticator.cpp +0 -128
- amps-python-client-5.3.4.1/src/bookmarkstore.cpp +0 -238
- amps-python-client-5.3.4.1/src/client.cpp +0 -2430
- amps-python-client-5.3.4.1/src/client_docs.h +0 -956
- amps-python-client-5.3.4.1/src/cmessagehandler.cpp +0 -151
- amps-python-client-5.3.4.1/src/command.cpp +0 -164
- amps-python-client-5.3.4.1/src/command_docs.h +0 -194
- amps-python-client-5.3.4.1/src/compositemessagebuilder.cpp +0 -111
- amps-python-client-5.3.4.1/src/compositemessageparser.cpp +0 -146
- amps-python-client-5.3.4.1/src/conflatingrecoverypointadapter.cpp +0 -194
- amps-python-client-5.3.4.1/src/cpp/include/amps/BlockPublishStore.hpp +0 -2053
- amps-python-client-5.3.4.1/src/cpp/include/amps/BlockStore.hpp +0 -677
- amps-python-client-5.3.4.1/src/cpp/include/amps/BookmarkStore.hpp +0 -542
- amps-python-client-5.3.4.1/src/cpp/include/amps/Buffer.hpp +0 -214
- amps-python-client-5.3.4.1/src/cpp/include/amps/CompositeMessageBuilder.hpp +0 -174
- amps-python-client-5.3.4.1/src/cpp/include/amps/CompositeMessageParser.hpp +0 -151
- amps-python-client-5.3.4.1/src/cpp/include/amps/DefaultServerChooser.hpp +0 -162
- amps-python-client-5.3.4.1/src/cpp/include/amps/Field.hpp +0 -719
- amps-python-client-5.3.4.1/src/cpp/include/amps/HAClient.hpp +0 -370
- amps-python-client-5.3.4.1/src/cpp/include/amps/HAClientImpl.hpp +0 -460
- amps-python-client-5.3.4.1/src/cpp/include/amps/HybridPublishStore.hpp +0 -481
- amps-python-client-5.3.4.1/src/cpp/include/amps/LoggedBookmarkStore.hpp +0 -1255
- amps-python-client-5.3.4.1/src/cpp/include/amps/MMapBookmarkStore.hpp +0 -1283
- amps-python-client-5.3.4.1/src/cpp/include/amps/MMapStoreBuffer.hpp +0 -290
- amps-python-client-5.3.4.1/src/cpp/include/amps/MemoryBookmarkStore.hpp +0 -1622
- amps-python-client-5.3.4.1/src/cpp/include/amps/MemoryPublishStore.hpp +0 -66
- amps-python-client-5.3.4.1/src/cpp/include/amps/MemoryStoreBuffer.hpp +0 -244
- amps-python-client-5.3.4.1/src/cpp/include/amps/MemorySubscriptionManager.hpp +0 -850
- amps-python-client-5.3.4.1/src/cpp/include/amps/Message.hpp +0 -1819
- amps-python-client-5.3.4.1/src/cpp/include/amps/MessageRouter.hpp +0 -618
- amps-python-client-5.3.4.1/src/cpp/include/amps/PublishStore.hpp +0 -158
- amps-python-client-5.3.4.1/src/cpp/include/amps/ReconnectDelayStrategy.hpp +0 -106
- amps-python-client-5.3.4.1/src/cpp/include/amps/ReconnectDelayStrategyImpl.hpp +0 -317
- amps-python-client-5.3.4.1/src/cpp/include/amps/RecoveryPoint.hpp +0 -323
- amps-python-client-5.3.4.1/src/cpp/include/amps/RecoveryPointAdapter.hpp +0 -501
- amps-python-client-5.3.4.1/src/cpp/include/amps/RingBookmarkStore.hpp +0 -669
- amps-python-client-5.3.4.1/src/cpp/include/amps/SOWRecoveryPointAdapter.hpp +0 -490
- amps-python-client-5.3.4.1/src/cpp/include/amps/ServerChooser.hpp +0 -145
- amps-python-client-5.3.4.1/src/cpp/include/amps/ServerChooserImpl.hpp +0 -95
- amps-python-client-5.3.4.1/src/cpp/include/amps/amps.h +0 -775
- amps-python-client-5.3.4.1/src/cpp/include/amps/amps_impl.h +0 -204
- amps-python-client-5.3.4.1/src/cpp/include/amps/amps_ssl.h +0 -78
- amps-python-client-5.3.4.1/src/cpp/include/amps/ampscrc.hpp +0 -210
- amps-python-client-5.3.4.1/src/cpp/include/amps/ampsplusplus.hpp +0 -8817
- amps-python-client-5.3.4.1/src/cpp/include/amps/ampsuri.h +0 -84
- amps-python-client-5.3.4.1/src/cpp/include/amps/ampsver.h +0 -41
- amps-python-client-5.3.4.1/src/cpp/include/amps/ampsver.h.in +0 -41
- amps-python-client-5.3.4.1/src/cpp/include/amps/constants.hpp +0 -194
- amps-python-client-5.3.4.1/src/cpp/include/amps/util.hpp +0 -1692
- amps-python-client-5.3.4.1/src/cpp/src/amps_protocol.c +0 -688
- amps-python-client-5.3.4.1/src/cpp/src/amps_ssl.c +0 -489
- amps-python-client-5.3.4.1/src/cpp/src/atfork.c +0 -446
- amps-python-client-5.3.4.1/src/cpp/src/client.c +0 -483
- amps-python-client-5.3.4.1/src/cpp/src/message.c +0 -837
- amps-python-client-5.3.4.1/src/cpp/src/message_generated.h +0 -611
- amps-python-client-5.3.4.1/src/cpp/src/tcp.c +0 -1489
- amps-python-client-5.3.4.1/src/cpp/src/tcps.c +0 -1894
- amps-python-client-5.3.4.1/src/cpp/src/transports.c +0 -123
- amps-python-client-5.3.4.1/src/cpp/src/unix.c +0 -984
- amps-python-client-5.3.4.1/src/cpp/src/uri.c +0 -301
- amps-python-client-5.3.4.1/src/exponentialdelaystrategy.cpp +0 -137
- amps-python-client-5.3.4.1/src/failedwritehandler.cpp +0 -116
- amps-python-client-5.3.4.1/src/fixbuilder.cpp +0 -146
- amps-python-client-5.3.4.1/src/fixeddelaystrategy.cpp +0 -114
- amps-python-client-5.3.4.1/src/fixshredder.cpp +0 -105
- amps-python-client-5.3.4.1/src/fixshredder_docs.h +0 -38
- amps-python-client-5.3.4.1/src/haclient.cpp +0 -691
- amps-python-client-5.3.4.1/src/haclient_docs.h +0 -132
- amps-python-client-5.3.4.1/src/hybridpublishstore.cpp +0 -137
- amps-python-client-5.3.4.1/src/hybridpublishstore_docs.h +0 -31
- amps-python-client-5.3.4.1/src/memorybookmarkstore.cpp +0 -373
- amps-python-client-5.3.4.1/src/memorybookmarkstore_docs.h +0 -39
- amps-python-client-5.3.4.1/src/memorypublishstore.cpp +0 -160
- amps-python-client-5.3.4.1/src/memorypublishstore_docs.h +0 -32
- amps-python-client-5.3.4.1/src/message.cpp +0 -765
- amps-python-client-5.3.4.1/src/message_docs.h +0 -306
- amps-python-client-5.3.4.1/src/messagestream.cpp +0 -623
- amps-python-client-5.3.4.1/src/messagestream_docs.h +0 -45
- amps-python-client-5.3.4.1/src/mmapbookmarkstore.cpp +0 -422
- amps-python-client-5.3.4.1/src/nvfixbuilder.cpp +0 -160
- amps-python-client-5.3.4.1/src/nvfixbuilder_docs.h +0 -33
- amps-python-client-5.3.4.1/src/nvfixshredder.cpp +0 -99
- amps-python-client-5.3.4.1/src/nvfixshredder_docs.h +0 -39
- amps-python-client-5.3.4.1/src/publishstore.cpp +0 -183
- amps-python-client-5.3.4.1/src/raw_wrapper.cpp +0 -756
- amps-python-client-5.3.4.1/src/reason.cpp +0 -71
- amps-python-client-5.3.4.1/src/recoverypoint.cpp +0 -135
- amps-python-client-5.3.4.1/src/recoverypointadapter.cpp +0 -171
- amps-python-client-5.3.4.1/src/ringbookmarkstore.cpp +0 -360
- amps-python-client-5.3.4.1/src/serverchooser.cpp +0 -245
- amps-python-client-5.3.4.1/src/serverchooser_docs.h +0 -39
- amps-python-client-5.3.4.1/src/sowrecoverypointadapter.cpp +0 -248
- amps-python-client-5.3.4.1/src/store.cpp +0 -62
- amps-python-client-5.3.4.1/src/versioninfo.cpp +0 -175
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/HISTORY +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/README.md +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/ajax-loader.gif +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/alabaster.css +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/basic.css +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/comment-bright.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/comment-close.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/comment.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/doctools.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/down-pressed.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/down.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/file.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/flag_logo.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/flag_logo.svg +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/jquery-3.1.0.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/jquery.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/minus.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/plus.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/pygments.css +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/searchtools.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/underscore-1.3.1.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/underscore.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/up-pressed.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/up.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/websupport.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_sources/code.rst.txt +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_sources/index.rst.txt +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/ajax-loader.gif +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/basic.css +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/classic.css +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/comment-bright.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/comment-close.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/comment.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/default.css +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/doctools.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/down-pressed.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/down.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/file.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/jquery-3.1.0.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/jquery.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/minus.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/plus.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/pygments.css +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/searchtools.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/sidebar.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/underscore-1.3.1.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/underscore.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/up-pressed.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/up.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/websupport.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_images/caution.png +0 -0
- {amps-python-client-5.3.4.1/docs/command-reference → amps-python-client-5.3.4.3/docs/python}/html/_images/caution.svg +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_images/connection_string.svg +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_images/important.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_images/important.svg +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_images/tip.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_images/tip.svg +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_images/warning.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_sources/chapters/cpp-compiler-list.rst.txt +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_sources/index.rst.txt +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/ajax-loader.gif +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/alabaster.css +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/basic.css +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/comment-bright.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/comment-close.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/comment.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/doctools.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/down-pressed.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/down.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/file.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/flag_logo.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/flag_logo.svg +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/jquery-3.1.0.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/jquery.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/minus.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/plus.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/pygments.css +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/searchtools.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/underscore-1.3.1.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/underscore.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/up-pressed.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/up.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/websupport.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_sources/chapters/crankitup.rst.txt +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_sources/chapters/equipment.rst.txt +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_sources/index.rst.txt +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/ajax-loader.gif +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/alabaster.css +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/basic.css +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/comment-bright.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/comment-close.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/comment.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/doctools.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/down-pressed.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/down.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/file.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/flag_logo.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/flag_logo.svg +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/jquery-3.1.0.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/jquery.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/minus.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/plus.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/pygments.css +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/searchtools.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/underscore-1.3.1.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/underscore.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/up-pressed.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/up.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/websupport.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/resources/custom.css +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/resources/flag_logo.svg +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_sources/chapters/spark.rst.txt +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/ajax-loader.gif +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/alabaster.css +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/basic.css +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/comment-bright.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/comment-close.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/comment.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/doctools.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/down-pressed.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/down.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/file.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/flag_logo.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/flag_logo.svg +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/jquery-3.1.0.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/jquery.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/minus.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/plus.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/pygments.css +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/searchtools.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/underscore-1.3.1.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/underscore.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/up-pressed.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/up.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/websupport.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/src/cpp/include/amps/amps_generated.h +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/src/cpp/src/amps_protocol_generated.h +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/src/cpp/src/makefile +0 -0
|
@@ -1,1767 +0,0 @@
|
|
|
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>15. Message Queues — 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="16. Message Types" href="messageTypes.html" />
|
|
30
|
-
<link rel="prev" title="14. Transactional Messaging and Bookmark Subscriptions" href="txlog.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="#">15. Message Queues</a><ul>
|
|
49
|
-
<li><a class="reference internal" href="#getting-started-with-amps-queues">Getting Started with AMPS Queues</a><ul>
|
|
50
|
-
<li><a class="reference internal" href="#queue-replication-types">Queue Replication Types</a></li>
|
|
51
|
-
</ul>
|
|
52
|
-
</li>
|
|
53
|
-
<li><a class="reference internal" href="#understanding-amps-queuing">Understanding AMPS Queuing</a><ul>
|
|
54
|
-
<li><a class="reference internal" href="#delivery-semantics">Delivery Semantics</a><ul>
|
|
55
|
-
<li><a class="reference internal" href="#choosing-delivery-semantics-to-handle-failures">Choosing Delivery Semantics to Handle Failures</a></li>
|
|
56
|
-
</ul>
|
|
57
|
-
</li>
|
|
58
|
-
<li><a class="reference internal" href="#subscription-backlog">Subscription Backlog</a></li>
|
|
59
|
-
<li><a class="reference internal" href="#delivery-fairness">Delivery Fairness</a></li>
|
|
60
|
-
<li><a class="reference internal" href="#acknowledging-messages">Acknowledging Messages</a></li>
|
|
61
|
-
<li><a class="reference internal" href="#persisting-metadata-for-queues">Persisting Metadata for Queues</a></li>
|
|
62
|
-
<li><a class="reference internal" href="#optional-message-delivery-behaviors">Optional Message Delivery Behaviors</a></li>
|
|
63
|
-
<li><a class="reference internal" href="#message-flow-for-queues">Message Flow for Queues</a></li>
|
|
64
|
-
<li><a class="reference internal" href="#startup-and-recovery-for-queues">Startup and Recovery for Queues</a></li>
|
|
65
|
-
</ul>
|
|
66
|
-
</li>
|
|
67
|
-
<li><a class="reference internal" href="#advanced-messaging-and-queues">Advanced Messaging and Queues</a><ul>
|
|
68
|
-
<li><a class="reference internal" href="#querying-queues-as-a-view">Querying Queues as a View</a></li>
|
|
69
|
-
<li><a class="reference internal" href="#topic-in-the-state-of-the-world-as-an-underlying-topic-for-a-queue">Topic in the State of the World as an Underlying Topic for a Queue</a></li>
|
|
70
|
-
<li><a class="reference internal" href="#delta-messaging-with-queues">Delta Messaging with Queues</a></li>
|
|
71
|
-
<li><a class="reference internal" href="#views-and-aggregated-subscriptions-over-queues">Views and Aggregated Subscriptions over Queues</a></li>
|
|
72
|
-
<li><a class="reference internal" href="#bookmark-subscriptions-to-queues">Bookmark Subscriptions to Queues</a></li>
|
|
73
|
-
</ul>
|
|
74
|
-
</li>
|
|
75
|
-
<li><a class="reference internal" href="#queue-subscriptions-compared-to-bookmark-replays">Queue Subscriptions Compared to Bookmark Replays</a></li>
|
|
76
|
-
<li><a class="reference internal" href="#replacing-queue-subscriptions">Replacing Queue Subscriptions</a></li>
|
|
77
|
-
<li><a class="reference internal" href="#handling-unprocessed-messages">Handling Unprocessed Messages</a></li>
|
|
78
|
-
<li><a class="reference internal" href="#advanced-queue-configuration">Advanced Queue Configuration</a><ul>
|
|
79
|
-
<li><a class="reference internal" href="#using-multiple-underlying-topics">Using Multiple Underlying Topics</a></li>
|
|
80
|
-
<li><a class="reference internal" href="#priority-queues">Priority Queues</a></li>
|
|
81
|
-
<li><a class="reference internal" href="#synchronizing-work-with-barrier-messages">Synchronizing Work with Barrier Messages</a></li>
|
|
82
|
-
<li><a class="reference internal" href="#limiting-currently-deliverable-messages">Limiting Currently Deliverable Messages</a></li>
|
|
83
|
-
</ul>
|
|
84
|
-
</li>
|
|
85
|
-
<li><a class="reference internal" href="#sow-queue-sow-localqueue-and-sow-grouplocalqueue">SOW/Queue, SOW/LocalQueue, and SOW/GroupLocalQueue</a></li>
|
|
86
|
-
</ul>
|
|
87
|
-
</li>
|
|
88
|
-
</ul>
|
|
89
|
-
<div class="relations">
|
|
90
|
-
<h3>Related Topics</h3>
|
|
91
|
-
<ul>
|
|
92
|
-
<li><a href="../index.html">Documentation overview</a><ul>
|
|
93
|
-
<li>Previous: <a href="txlog.html" title="previous chapter">14. Transactional Messaging and Bookmark Subscriptions</a></li>
|
|
94
|
-
<li>Next: <a href="messageTypes.html" title="next chapter">16. Message Types</a></li>
|
|
95
|
-
</ul></li>
|
|
96
|
-
</ul>
|
|
97
|
-
</div>
|
|
98
|
-
<div id="searchbox" style="display: none" role="search">
|
|
99
|
-
<h3>Quick search</h3>
|
|
100
|
-
<form class="search" action="../search.html" method="get">
|
|
101
|
-
<div><input type="text" name="q" /></div>
|
|
102
|
-
<div><input type="submit" value="Go" /></div>
|
|
103
|
-
<input type="hidden" name="check_keywords" value="yes" />
|
|
104
|
-
<input type="hidden" name="area" value="default" />
|
|
105
|
-
</form>
|
|
106
|
-
</div>
|
|
107
|
-
<script type="text/javascript">$('#searchbox').show(0);</script>
|
|
108
|
-
</div>
|
|
109
|
-
</div>
|
|
110
|
-
<div class="documentwrapper">
|
|
111
|
-
<div class="bodywrapper">
|
|
112
|
-
<div class="body" role="main">
|
|
113
|
-
|
|
114
|
-
<div class="section" id="message-queues">
|
|
115
|
-
<span id="queues"></span><span id="ug-queues"></span><h1>15. Message Queues<a class="headerlink" href="#message-queues" title="Permalink to this headline">¶</a></h1>
|
|
116
|
-
<p id="index-0">AMPS includes high performance queuing built on
|
|
117
|
-
the AMPS messaging engine and transaction log. AMPS message queues
|
|
118
|
-
combine elements of classic message queuing with the advanced messaging
|
|
119
|
-
features of AMPS, including content filtering, aggregation and
|
|
120
|
-
projection, historical replay, and so on. This chapter presents an
|
|
121
|
-
overview of queues.</p>
|
|
122
|
-
<p>AMPS message queues help you easily solve some common messaging
|
|
123
|
-
problems:</p>
|
|
124
|
-
<ul class="simple">
|
|
125
|
-
<li>Ensuring that a message is only processed once.</li>
|
|
126
|
-
<li>Distributing tasks across workers in a fair manner.</li>
|
|
127
|
-
<li>Ensuring that a message is delivered to and processed by a worker.</li>
|
|
128
|
-
<li>Ensuring that when a worker fails to process a message, that message
|
|
129
|
-
is redelivered.</li>
|
|
130
|
-
<li>Setting limits for retries in processing a message, and taking an
|
|
131
|
-
action when those limits are exceeded (such as moving the message to
|
|
132
|
-
a dead-letter queue).</li>
|
|
133
|
-
</ul>
|
|
134
|
-
<p>While it’s possible to create applications with these properties by
|
|
135
|
-
using the other features of AMPS, message queues provide these functions
|
|
136
|
-
built into the AMPS server. In addition, message queues allow you to:</p>
|
|
137
|
-
<ul class="simple">
|
|
138
|
-
<li>Replicate messages between AMPS instances while preserving delivery
|
|
139
|
-
guarantees.</li>
|
|
140
|
-
<li>Create views and aggregates based on the current contents of a queue.</li>
|
|
141
|
-
<li>Filter messages into and out of a queue.</li>
|
|
142
|
-
<li>Provide a single published message to multiple queues.</li>
|
|
143
|
-
<li>Aggregate multiple topics into a single queue.</li>
|
|
144
|
-
</ul>
|
|
145
|
-
<div class="admonition tip">
|
|
146
|
-
<p class="first admonition-title">Tip</p>
|
|
147
|
-
<p class="last">Use message queues when it is important to ensure that a message
|
|
148
|
-
is processed once, by a single consumer. When it is important to
|
|
149
|
-
distribute messages to a number of consumers, use the AMPS
|
|
150
|
-
publish/subscribe delivery model rather than a message queue.</p>
|
|
151
|
-
</div>
|
|
152
|
-
<p>The following diagram illustrates a simple usage of a queue to
|
|
153
|
-
distribute work across three consumers:</p>
|
|
154
|
-
<a class="reference internal image-reference" href="../_images/queue_usage_overview.svg"><img alt="../_images/queue_usage_overview.svg" src="../_images/queue_usage_overview.svg" width="80.0%" /></a>
|
|
155
|
-
<p>This diagram shows a simple use of AMPS queues to distribute work. In
|
|
156
|
-
the diagram, the transaction log is configured to record a topic named
|
|
157
|
-
<code class="docutils literal"><span class="pre">Work</span></code>. AMPS is also configured with a queue named <code class="docutils literal"><span class="pre">WorkToDo</span></code>,
|
|
158
|
-
which is based on the underlying topic <code class="docutils literal"><span class="pre">Work</span></code>. The publisher publishes
|
|
159
|
-
three messages to the topic <code class="docutils literal"><span class="pre">Work</span></code>, and AMPS includes those messages
|
|
160
|
-
in the <code class="docutils literal"><span class="pre">WorkToDo</span></code> queue. Each message is delivered to one of the three
|
|
161
|
-
subscribers to the <code class="docutils literal"><span class="pre">WorkToDo</span></code> queue. Unlike pub/sub messaging, each
|
|
162
|
-
subscriber only receives one message, and each message is delivered to
|
|
163
|
-
only one subscriber.</p>
|
|
164
|
-
<p>Notice that, even though AMPS provides queue semantics over the
|
|
165
|
-
<code class="docutils literal"><span class="pre">WorkToDo</span></code> topic, the messages are recorded in the transaction log
|
|
166
|
-
once, in the <code class="docutils literal"><span class="pre">Work</span></code> topic. Other subscribers could subscribe to the
|
|
167
|
-
<code class="docutils literal"><span class="pre">Work</span></code> topic to receive the full stream of messages, or do a bookmark
|
|
168
|
-
replay over the <code class="docutils literal"><span class="pre">Work</span></code> topic to recreate the message flow or audit the
|
|
169
|
-
messages published to that topic.</p>
|
|
170
|
-
<p>Also notice that, while the <code class="docutils literal"><span class="pre">Work</span></code> topic (the underlying topic) must be
|
|
171
|
-
recorded in the transaction log, there is no need to define the <code class="docutils literal"><span class="pre">Work</span></code> topic
|
|
172
|
-
in the SOW section of the configuration file. Queues use the transaction log to
|
|
173
|
-
determine which messages to enqueue, and when a message is acknowledged, the
|
|
174
|
-
acknowledgment is also recorded in the transaction log.</p>
|
|
175
|
-
<div class="section" id="getting-started-with-amps-queues">
|
|
176
|
-
<h2>Getting Started with AMPS Queues<a class="headerlink" href="#getting-started-with-amps-queues" title="Permalink to this headline">¶</a></h2>
|
|
177
|
-
<p>To add a simple queue to AMPS, add the following options to your
|
|
178
|
-
configuration file.</p>
|
|
179
|
-
<p>First, create a transaction log that will record the messages for the
|
|
180
|
-
queue and the state of the queue, as described in
|
|
181
|
-
<a class="reference internal" href="txlog.html#ug-txlog"><span class="std std-ref">Transactional Messaging and Bookmark Subscriptions</span></a>.
|
|
182
|
-
You add the transaction log
|
|
183
|
-
entry if your AMPS configuration does not already have one. Otherwise,
|
|
184
|
-
you can simply add a <code class="docutils literal"><span class="pre">Topic</span></code> statement or modify an existing <code class="docutils literal"><span class="pre">Topic</span></code>
|
|
185
|
-
statement to record the messages. The sample below captures any JSON
|
|
186
|
-
messages published to the <code class="docutils literal"><span class="pre">Work</span></code> topic, and also tracks the state of the queue itself:</p>
|
|
187
|
-
<div class="highlight-xml"><div class="highlight"><pre><span></span><span class="nt"><AMPSConfig></span>
|
|
188
|
-
...
|
|
189
|
-
|
|
190
|
-
<span class="nt"><TransactionLog></span>
|
|
191
|
-
<span class="nt"><JournalDirectory></span>./journals<span class="nt"></JournalDirectory></span>
|
|
192
|
-
<span class="nt"><Topic></span>
|
|
193
|
-
<span class="nt"><Name></span>Work<span class="nt"></Name></span>
|
|
194
|
-
<span class="nt"><MessageType></span>json<span class="nt"></MessageType></span>
|
|
195
|
-
<span class="nt"></Topic></span>
|
|
196
|
-
<span class="nt"><Topic></span>
|
|
197
|
-
<span class="nt"><Name></span>WorkToDo<span class="nt"></Name></span>
|
|
198
|
-
<span class="nt"><MessageType></span>json<span class="nt"></MessageType></span>
|
|
199
|
-
<span class="nt"></Topic></span>
|
|
200
|
-
<span class="nt"></TransactionLog></span>
|
|
201
|
-
|
|
202
|
-
...
|
|
203
|
-
<span class="nt"></AMPSConfig></span>
|
|
204
|
-
</pre></div>
|
|
205
|
-
</div>
|
|
206
|
-
<p>Next, declare the queue topic itself. Queues are defined in the SOW
|
|
207
|
-
element of the <code class="docutils literal"><span class="pre">AMPSConfig</span></code> file, as shown below:</p>
|
|
208
|
-
<div class="highlight-xml"><div class="highlight"><pre><span></span><span class="nt"><AMPSConfig></span>
|
|
209
|
-
...
|
|
210
|
-
|
|
211
|
-
<span class="nt"><SOW></span>
|
|
212
|
-
<span class="nt"><Queue></span>
|
|
213
|
-
<span class="nt"><Name></span>WorkToDo<span class="nt"></Name></span>
|
|
214
|
-
<span class="nt"><MessageType></span>json<span class="nt"></MessageType></span>
|
|
215
|
-
<span class="nt"><Semantics></span>at-most-once<span class="nt"></Semantics></span>
|
|
216
|
-
<span class="nt"><UnderlyingTopic></span>Work<span class="nt"></UnderlyingTopic></span>
|
|
217
|
-
<span class="nt"></Queue></span>
|
|
218
|
-
<span class="nt"></SOW></span>
|
|
219
|
-
|
|
220
|
-
...
|
|
221
|
-
<span class="nt"></AMPSConfig></span>
|
|
222
|
-
</pre></div>
|
|
223
|
-
</div>
|
|
224
|
-
<p>These simple configuration changes create an AMPS message queue. Notice
|
|
225
|
-
that the <code class="docutils literal"><span class="pre">Topic</span></code> for the queue in this case is <code class="docutils literal"><span class="pre">WorkToDo</span></code>, which
|
|
226
|
-
includes every message published to the underlying topic <code class="docutils literal"><span class="pre">Work</span></code>. You
|
|
227
|
-
could also use a regular expression to include messages to more than one
|
|
228
|
-
topic, or leave out the <code class="docutils literal"><span class="pre">UnderlyingTopic</span></code> to include only messages
|
|
229
|
-
published to the topic with the same name as the queue.</p>
|
|
230
|
-
<p>This simple queue provides each message that arrives for the queue to at
|
|
231
|
-
most one subscriber. After AMPS delivers the message to one subscriber,
|
|
232
|
-
AMPS removes the message from the queue without waiting for the
|
|
233
|
-
subscriber to acknowledge the message.</p>
|
|
234
|
-
<p>While it’s easy to create a simple queue, AMPS offers a rich queuing
|
|
235
|
-
model that is designed to meet a wide variety of queuing needs. The
|
|
236
|
-
options are described in the following sections and the <a class="reference external" href="../../../configuration/html/index.html">AMPS Configuration Reference</a>.</p>
|
|
237
|
-
<div class="section" id="queue-replication-types">
|
|
238
|
-
<h3>Queue Replication Types<a class="headerlink" href="#queue-replication-types" title="Permalink to this headline">¶</a></h3>
|
|
239
|
-
<p>AMPS supports three different replication types for a queue. The
|
|
240
|
-
configuration tag used to define a queue specifies the replication
|
|
241
|
-
type for the queue.</p>
|
|
242
|
-
<table border="1" class="docutils" id="id1">
|
|
243
|
-
<caption><span class="caption-text"><em>Queue replication types</em></span><a class="headerlink" href="#id1" title="Permalink to this table">¶</a></caption>
|
|
244
|
-
<colgroup>
|
|
245
|
-
<col width="33%" />
|
|
246
|
-
<col width="33%" />
|
|
247
|
-
<col width="33%" />
|
|
248
|
-
</colgroup>
|
|
249
|
-
<thead valign="bottom">
|
|
250
|
-
<tr class="row-odd"><th class="head"><strong>Configuration Tag</strong></th>
|
|
251
|
-
<th class="head"><strong>Replication Type</strong></th>
|
|
252
|
-
<th class="head"><strong>Description</strong></th>
|
|
253
|
-
</tr>
|
|
254
|
-
</thead>
|
|
255
|
-
<tbody valign="top">
|
|
256
|
-
<tr class="row-even"><td><code class="docutils literal"><span class="pre">Queue</span></code></td>
|
|
257
|
-
<td>Distributed queue</td>
|
|
258
|
-
<td>Fully distributed queue.</td>
|
|
259
|
-
</tr>
|
|
260
|
-
<tr class="row-odd"><td><code class="docutils literal"><span class="pre">LocalQueue</span></code></td>
|
|
261
|
-
<td>Local queue</td>
|
|
262
|
-
<td><p class="first">Queue exists on a single
|
|
263
|
-
instance, delivery guarantees
|
|
264
|
-
only apply to that instance.</p>
|
|
265
|
-
<p class="last">Cannot be replicated.</p>
|
|
266
|
-
</td>
|
|
267
|
-
</tr>
|
|
268
|
-
<tr class="row-even"><td><code class="docutils literal"><span class="pre">GroupLocalQueue</span></code></td>
|
|
269
|
-
<td>Queue replicated
|
|
270
|
-
to specific instances,
|
|
271
|
-
most often in the
|
|
272
|
-
same replication
|
|
273
|
-
<code class="docutils literal"><span class="pre">Group</span></code></td>
|
|
274
|
-
<td><p class="first">Distributed queue on a
|
|
275
|
-
specific set of instances.</p>
|
|
276
|
-
<p>In version 5.3.4 and
|
|
277
|
-
higher, the instances that
|
|
278
|
-
contain the queue must all
|
|
279
|
-
be in the same <code class="docutils literal"><span class="pre">Group</span></code>
|
|
280
|
-
<em>or</em> define the same
|
|
281
|
-
<code class="docutils literal"><span class="pre">GroupLocalQueueDomain</span></code>
|
|
282
|
-
tag.</p>
|
|
283
|
-
<p class="last">In earlier versions of
|
|
284
|
-
AMPS, every queue with
|
|
285
|
-
the same name in the
|
|
286
|
-
replication fabric is
|
|
287
|
-
treated as an instance of
|
|
288
|
-
the same queue and must
|
|
289
|
-
have the same definition
|
|
290
|
-
and the same
|
|
291
|
-
<code class="docutils literal"><span class="pre">InitialOwner</span></code>.</p>
|
|
292
|
-
</td>
|
|
293
|
-
</tr>
|
|
294
|
-
</tbody>
|
|
295
|
-
</table>
|
|
296
|
-
<p>By default, AMPS queues are <em>distributed queues</em>. That is, if the queue
|
|
297
|
-
topic or the underlying topics are replicated, AMPS provides the queue
|
|
298
|
-
delivery guarantees (that is, <code class="docutils literal"><span class="pre">at-most-once</span></code> or <code class="docutils literal"><span class="pre">at-least-once</span></code> delivery)
|
|
299
|
-
as though all of the instances were delivering
|
|
300
|
-
messages from a single queue.</p>
|
|
301
|
-
<p>AMPS provides local queues (where each instance has a separate,
|
|
302
|
-
independent queue) when a queue is defined with the <code class="docutils literal"><span class="pre">LocalQueue</span></code> tag. In
|
|
303
|
-
this case, AMPS does not allow replication of the queue topic, and all
|
|
304
|
-
management of the queue is local to the individual instance.</p>
|
|
305
|
-
<p>AMPS also supports distributed queues that are restricted to a set of
|
|
306
|
-
instances within a mesh of replicated instances. These queues are defined
|
|
307
|
-
with the <code class="docutils literal"><span class="pre">GroupLocalQueue</span></code> tag, to indicate that the queue is
|
|
308
|
-
restricted to a subset of the servers involved in replication. In this
|
|
309
|
-
case, only the servers that define the <code class="docutils literal"><span class="pre">GroupLocalQueue</span></code> participate in
|
|
310
|
-
message delivery for the queue. In addition, the group must choose the
|
|
311
|
-
instance that will initially own messages for the queue, as described in
|
|
312
|
-
the section on distributed queues and <a class="reference internal" href="replication.html#ug-queue-message-ownership"><span class="std std-ref">queue message ownership</span></a>.
|
|
313
|
-
In version 5.3.4 and later, the identity of a <code class="docutils literal"><span class="pre">GroupLocalQueue</span></code> is defined
|
|
314
|
-
by the <code class="docutils literal"><span class="pre">Name</span></code> of the queue combined with the <code class="docutils literal"><span class="pre">GroupLocalQueueDomain</span></code>,
|
|
315
|
-
if one is set, or the <code class="docutils literal"><span class="pre">Group</span></code> of the AMPS instance if the definition
|
|
316
|
-
does not include a <code class="docutils literal"><span class="pre">GroupLocalQueueDomain</span></code> tag.
|
|
317
|
-
In previous versions of AMPS, the identity of the queue is determined only
|
|
318
|
-
by the <code class="docutils literal"><span class="pre">Name</span></code> of the group local queue, regardless of the instance that
|
|
319
|
-
defines the queue.</p>
|
|
320
|
-
<div class="admonition tip">
|
|
321
|
-
<p class="first admonition-title">Tip</p>
|
|
322
|
-
<p class="last">When defining a <code class="docutils literal"><span class="pre">GroupLocalQueue</span></code>, the instances that participate
|
|
323
|
-
in the queue do not need to be in the same replication group:
|
|
324
|
-
any instance in a replicated mesh that defines the queue can
|
|
325
|
-
host an instance of the queue, regardless of whether the instance
|
|
326
|
-
is in the same replication group or not. However, if the instances
|
|
327
|
-
that host the queue are in different groups, the queue definitions
|
|
328
|
-
should set the same <code class="docutils literal"><span class="pre">GroupLocalQueueDomain</span></code> to be considered
|
|
329
|
-
to be the same queue.</p>
|
|
330
|
-
</div>
|
|
331
|
-
<p>Each instance of AMPS manages its own subscriptions and backlog,
|
|
332
|
-
regardless of the replication model. Delivery guarantees are
|
|
333
|
-
provided by managing the ownership of each message in the queue,
|
|
334
|
-
as described in the <a class="reference internal" href="replication.html#ug-replicated-queues"><span class="std std-ref">Replicated Queues</span></a> section. Only messages
|
|
335
|
-
owned by the current instance will be delivered to subscribers,
|
|
336
|
-
and only the subscriptions on the current instance are considered
|
|
337
|
-
for delivery fairness and limits such as <code class="docutils literal"><span class="pre">MaxBacklog</span></code> (the overall
|
|
338
|
-
limit for leases from the queue).</p>
|
|
339
|
-
</div>
|
|
340
|
-
</div>
|
|
341
|
-
<div class="section" id="understanding-amps-queuing">
|
|
342
|
-
<h2>Understanding AMPS Queuing<a class="headerlink" href="#understanding-amps-queuing" title="Permalink to this headline">¶</a></h2>
|
|
343
|
-
<p>AMPS message queues take advantage of the full historical and
|
|
344
|
-
transactional power of the AMPS engine. Each queue is implemented as a
|
|
345
|
-
view over an underlying topic or set of topics. Each of the underlying
|
|
346
|
-
topics must be recorded in a transaction log. Publishers publish to the
|
|
347
|
-
underlying topic, and the messages are recorded in the transaction log.
|
|
348
|
-
Consumers simply subscribe to the queue. AMPS tracks which messages have
|
|
349
|
-
been delivered to subscribers and which messages have been processed by
|
|
350
|
-
subscribers. AMPS delivers the next available message to the next
|
|
351
|
-
subscriber.</p>
|
|
352
|
-
<p>Unlike traditional queues, which require consumers to poll for messages,
|
|
353
|
-
AMPS queues use a subscription model. In this model, each queue consumer
|
|
354
|
-
requests that AMPS provide messages from the queue. The consumer can
|
|
355
|
-
also request a maximum number of messages to have outstanding from the
|
|
356
|
-
queue at any given time, referred to as the backlog for that consumer.
|
|
357
|
-
When a message is available, and the consumer has fewer messages
|
|
358
|
-
outstanding than the backlog for that consumer, AMPS delivers the
|
|
359
|
-
message to the consumer. This improves latency and conserves bandwidth,
|
|
360
|
-
since there is no need for consumers to repeatedly poll the queue to see
|
|
361
|
-
if work is available. In addition, the server maintains an overall view
|
|
362
|
-
of the consumers, which allows the server to control message
|
|
363
|
-
distribution strategies to optimize for latency, optimize to
|
|
364
|
-
deliver to clients with the most unused capacity, or optimize for
|
|
365
|
-
general fairness.</p>
|
|
366
|
-
<p>The following diagram presents a simplified view of an AMPS queue:</p>
|
|
367
|
-
<img alt="../_images/AMPS-Queues-Intro.svg" src="../_images/AMPS-Queues-Intro.svg" /><p>As the diagram indicates, a queue tracks a set of messages in the
|
|
368
|
-
transaction log. The messages the queue is currently tracking are
|
|
369
|
-
considered to be in the queue. When the queue delivers a message, it
|
|
370
|
-
marks the message as having been delivered (shown as <em>leased</em> in the
|
|
371
|
-
diagram above). Messages that have been processed are no longer tracked
|
|
372
|
-
by the queue (for example, the message for the order 1 in the diagram
|
|
373
|
-
above). When a message has been delivered and processed, that event is
|
|
374
|
-
recorded in the transaction log to ensure that the queue meets the
|
|
375
|
-
delivery guarantees even across restarts of AMPS.</p>
|
|
376
|
-
<p>Since queues are implemented as views over underlying topics, AMPS
|
|
377
|
-
allows you to create any number of queues over the same underlying
|
|
378
|
-
topic. Each queue tracks messages to the topic independently, and can
|
|
379
|
-
have different policies for delivery and fairness. When a queue topic
|
|
380
|
-
has a different name than the underlying topic, you can subscribe to the
|
|
381
|
-
underlying topic directly, and that subscription is to the underlying
|
|
382
|
-
(non-queue) topic. When a queue topic has the same name as the
|
|
383
|
-
underlying topic (the default), all subscriptions to that topic are to
|
|
384
|
-
the queue. (Notice that bookmark subscriptions to a queue are pub/sub
|
|
385
|
-
subscriptions that replay from the underlying topic in the transaction log,
|
|
386
|
-
so the behavior in that case is the same as if the subscription was directly
|
|
387
|
-
to the underlying topic.)</p>
|
|
388
|
-
<p>Likewise, AMPS queues work seamlessly with the AMPS entitlement system.
|
|
389
|
-
Permissions to queues are managed the same way permissions are managed
|
|
390
|
-
to any other topic, as described in the
|
|
391
|
-
<a class="reference internal" href="securing.html#ug-entitlement"><span class="std std-ref">Entitlement</span></a> section of the <em>AMPS User Guide</em>.</p>
|
|
392
|
-
<p>While a message is in a queue, AMPS does not retain an extra copy of the message.
|
|
393
|
-
Instead, AMPS retains in memory a small data structure indicating
|
|
394
|
-
the state of the message and the position of the message in the transaction log.
|
|
395
|
-
The amount of memory consumed by a queue is approximately 200 bytes per message,
|
|
396
|
-
regardless of the size of the messages.</p>
|
|
397
|
-
<p>AMPS queues provide a variety of options to help you tailor the behavior
|
|
398
|
-
of each queue to meet your application’s needs.</p>
|
|
399
|
-
<div class="section" id="delivery-semantics">
|
|
400
|
-
<h3>Delivery Semantics<a class="headerlink" href="#delivery-semantics" title="Permalink to this headline">¶</a></h3>
|
|
401
|
-
<p>AMPS queues deliver a message to a single subscriber at a time. In the
|
|
402
|
-
most common case, a message is delivered to exactly one subscriber, and that
|
|
403
|
-
subscriber processes the message.</p>
|
|
404
|
-
<p>In the case that a subscriber does not successfully process a message,
|
|
405
|
-
AMPS provides two delivery semantics to precisely specify the handling of
|
|
406
|
-
the unprocessed message:</p>
|
|
407
|
-
<ul>
|
|
408
|
-
<li><p class="first">With <code class="docutils literal"><span class="pre">at-least-once</span></code> delivery, AMPS delivers the message to one
|
|
409
|
-
subscriber at a time, and expects that subscriber to explicitly
|
|
410
|
-
remove the message from the queue when the message has been received
|
|
411
|
-
and processed. With this guarantee, each message from the queue must
|
|
412
|
-
be processed within a specified timeout, or lease period. AMPS tracks
|
|
413
|
-
the amount of time since the message was sent to the subscriber. If
|
|
414
|
-
the subscriber has not responded by removing the message within the
|
|
415
|
-
lease period, AMPS revokes the lease and the message is available to
|
|
416
|
-
another subscriber. AMPS allows you to set limits on the number of
|
|
417
|
-
times a message is made available to another subscriber, using the
|
|
418
|
-
<code class="docutils literal"><span class="pre">MaxCancels</span></code> and <code class="docutils literal"><span class="pre">MaxDeliveries</span></code> configuration options.</p>
|
|
419
|
-
<p>In this model, receiving a message is the equivalent of a
|
|
420
|
-
non-destructive get from a traditional queue. To acknowledge and
|
|
421
|
-
remove the message, a subscriber uses the <code class="docutils literal"><span class="pre">sow_delete</span></code> command with
|
|
422
|
-
the bookmark of the message.</p>
|
|
423
|
-
<p>Leases are broken and messages are returned to the queue if the lease
|
|
424
|
-
holder disconnects from AMPS. This ensures that, if a message
|
|
425
|
-
processor fails or loses its connection to AMPS, the message can
|
|
426
|
-
immediately be processed by another message processor.</p>
|
|
427
|
-
</li>
|
|
428
|
-
<li><p class="first">With <code class="docutils literal"><span class="pre">at-most-once</span></code> delivery, AMPS removes the message from the
|
|
429
|
-
queue as soon as the message is sent to a subscriber. However, the
|
|
430
|
-
subscriber still needs to acknowledge that the message was processed,
|
|
431
|
-
so that AMPS can track the subscription backlog, as described below.</p>
|
|
432
|
-
<p>In this model, receiving a message is the equivalent of a destructive
|
|
433
|
-
get from a traditional queue. The message is immediately removed by
|
|
434
|
-
AMPS, and is no longer available in the queue.</p>
|
|
435
|
-
</li>
|
|
436
|
-
</ul>
|
|
437
|
-
<div class="section" id="choosing-delivery-semantics-to-handle-failures">
|
|
438
|
-
<h4>Choosing Delivery Semantics to Handle Failures<a class="headerlink" href="#choosing-delivery-semantics-to-handle-failures" title="Permalink to this headline">¶</a></h4>
|
|
439
|
-
<p>Regardless of the delivery semantics you choose, during typical message
|
|
440
|
-
processing from a queue, AMPS delivers each message in the queue to a single
|
|
441
|
-
subscriber, with no duplicates or redelivery.</p>
|
|
442
|
-
<p>The difference between <code class="docutils literal"><span class="pre">at-most-once</span></code> and <code class="docutils literal"><span class="pre">at-least-once</span></code> semantics is
|
|
443
|
-
important in cases where a failure happens. With <code class="docutils literal"><span class="pre">at-most-once</span></code> delivery,
|
|
444
|
-
the message will not be redelivered even if the subscriber fails to process
|
|
445
|
-
the message. With <code class="docutils literal"><span class="pre">at-least-once</span></code> delivery, the message will be redelivered
|
|
446
|
-
to subscribers until the message is either explicitly acknowledged, explicitly
|
|
447
|
-
removed, or expired based on the queue policy for expiration or retries.</p>
|
|
448
|
-
<p>With either setting, a message is delivered exactly once, to a single subscriber,
|
|
449
|
-
during normal processing.</p>
|
|
450
|
-
<p>Consider the following recommendations when deciding how you would like AMPS to
|
|
451
|
-
handle cases where the subscriber that receives the message fails to process the
|
|
452
|
-
message:</p>
|
|
453
|
-
<ol class="arabic simple">
|
|
454
|
-
<li>For ephemeral or lower-value data, where message loss in the case of failure is
|
|
455
|
-
preferable to duplicating message delivery, consider <code class="docutils literal"><span class="pre">at-most-once</span></code> semantics.
|
|
456
|
-
For example, processing a stream of events from sensors might fall into this
|
|
457
|
-
category: each message should be processed once, in order, during normal operation,
|
|
458
|
-
but missing a single data point from time to time may be less disruptive than
|
|
459
|
-
reconciling duplicates.</li>
|
|
460
|
-
<li>For higher value data, where duplicate message delivery in the event of failure is preferable
|
|
461
|
-
to message loss, consider <code class="docutils literal"><span class="pre">at-least-once</span></code> semantics. For example, if inserting the same
|
|
462
|
-
data into a database twice would simply be an in-place update of the same record with the
|
|
463
|
-
same information, having a duplicate insert happen occasionally in the event of failure
|
|
464
|
-
may be preferable to losing a message when a failure occurs.</li>
|
|
465
|
-
<li>For higher value data, where manual intervention is required to reconcile messages
|
|
466
|
-
when there is a question as to whether the message has been correctly processed,
|
|
467
|
-
consider using <code class="docutils literal"><span class="pre">at-least-once</span></code> message delivery with a <code class="docutils literal"><span class="pre">MaxDeliveries</span></code> setting
|
|
468
|
-
and an action to move failed messages to a dead-letter queue for manual reconciliation.</li>
|
|
469
|
-
<li>For higher value data that is part of a transactional dataflow, where processors
|
|
470
|
-
maintain state, it can be useful to include information about the message processed
|
|
471
|
-
in the transaction. This can be used with <code class="docutils literal"><span class="pre">at-least-once</span></code> messaging to guarantee that
|
|
472
|
-
the message is only processed once: if a processor receives a message that is already
|
|
473
|
-
marked as processed in the transactional store, the processor knows that the message
|
|
474
|
-
has already been acted on and should be acknowledged without further processing.
|
|
475
|
-
This is the most common pattern used to produce the result that each message is
|
|
476
|
-
processed “exactly once”. This pattern involves additional overhead and processing,
|
|
477
|
-
trading off increased work in the application for stronger guarantees that a message
|
|
478
|
-
is only processed one time.</li>
|
|
479
|
-
</ol>
|
|
480
|
-
</div>
|
|
481
|
-
</div>
|
|
482
|
-
<div class="section" id="subscription-backlog">
|
|
483
|
-
<h3>Subscription Backlog<a class="headerlink" href="#subscription-backlog" title="Permalink to this headline">¶</a></h3>
|
|
484
|
-
<p>For efficiency, queues in AMPS use a push model of delivery, providing
|
|
485
|
-
messages to consumers when the message becomes available rather than
|
|
486
|
-
requiring the consumer to poll the queue. To manage the workload among
|
|
487
|
-
consumers, AMPS queues keep track of a <em>subscription backlog</em>. This
|
|
488
|
-
backlog is the number of messages that have been provided to an
|
|
489
|
-
individual subscription that have not yet been acknowledged. This
|
|
490
|
-
backlog helps AMPS provide strong delivery guarantees while still
|
|
491
|
-
optimizing for high throughput processing. AMPS calculates the
|
|
492
|
-
subscription backlog for each subscription by calculating the
|
|
493
|
-
<em>minimum</em> of the following:</p>
|
|
494
|
-
<ul>
|
|
495
|
-
<li><p class="first">The <em>minimum</em> <code class="docutils literal"><span class="pre">MaxPerSubscriptionBacklog</span></code> setting for the queues
|
|
496
|
-
matched by the subscription</p>
|
|
497
|
-
<p><em>or</em></p>
|
|
498
|
-
</li>
|
|
499
|
-
<li><p class="first">The <code class="docutils literal"><span class="pre">max_backlog</span></code> specified on the subscribe command</p>
|
|
500
|
-
</li>
|
|
501
|
-
</ul>
|
|
502
|
-
<p>Notice that, if a subscriber does not provide a <code class="docutils literal"><span class="pre">max_backlog</span></code> on a
|
|
503
|
-
subscription, AMPS defaults to a <code class="docutils literal"><span class="pre">max_backlog</span></code> of <code class="docutils literal"><span class="pre">1</span></code>. In practical
|
|
504
|
-
terms, this means that an application must explicitly specify a backlog
|
|
505
|
-
to be able to receive more than one message from a queue at a time,
|
|
506
|
-
regardless of the queue configuration.</p>
|
|
507
|
-
<p>Subscribers request a <code class="docutils literal"><span class="pre">max_backlog</span></code> by adding the request to the
|
|
508
|
-
options string of the <code class="docutils literal"><span class="pre">subscribe</span></code> command. For example, to request a
|
|
509
|
-
<code class="docutils literal"><span class="pre">max_backlog</span></code> of 10, a subscriber includes <code class="docutils literal"><span class="pre">max_backlog=10</span></code> in the
|
|
510
|
-
options for the command.</p>
|
|
511
|
-
<div class="admonition tip">
|
|
512
|
-
<p class="first admonition-title">Tip</p>
|
|
513
|
-
<p class="last">To improve concurrency for subscribers, 60East recommends using a
|
|
514
|
-
backlog of at least <code class="docutils literal"><span class="pre">2</span></code>. This allows efficient pipelined delivery, as
|
|
515
|
-
the consumer can be processing one message while the previous message is
|
|
516
|
-
being acknowledged. With a <code class="docutils literal"><span class="pre">max_backlog</span></code> higher than <code class="docutils literal"><span class="pre">1</span></code>, the
|
|
517
|
-
consumer never needs to be stopped waiting for the next message from the
|
|
518
|
-
queue.</p>
|
|
519
|
-
</div>
|
|
520
|
-
</div>
|
|
521
|
-
<div class="section" id="delivery-fairness">
|
|
522
|
-
<h3>Delivery Fairness<a class="headerlink" href="#delivery-fairness" title="Permalink to this headline">¶</a></h3>
|
|
523
|
-
<p>When a queue provides <code class="docutils literal"><span class="pre">at-least-once</span></code> delivery, AMPS provides three
|
|
524
|
-
different algorithms for distributing messages among subscribers. Each
|
|
525
|
-
algorithm has different performance and fairness guarantees. For
|
|
526
|
-
<code class="docutils literal"><span class="pre">at-most-once</span></code> delivery, AMPS supports only the <code class="docutils literal"><span class="pre">round-robin</span></code> method
|
|
527
|
-
of distributing messages.</p>
|
|
528
|
-
<table border="1" class="docutils" id="id2">
|
|
529
|
-
<caption><span class="caption-text"><em>Message delivery strategies</em></span><a class="headerlink" href="#id2" title="Permalink to this table">¶</a></caption>
|
|
530
|
-
<colgroup>
|
|
531
|
-
<col width="50%" />
|
|
532
|
-
<col width="50%" />
|
|
533
|
-
</colgroup>
|
|
534
|
-
<thead valign="bottom">
|
|
535
|
-
<tr class="row-odd"><th class="head">Algorithm</th>
|
|
536
|
-
<th class="head">Description</th>
|
|
537
|
-
</tr>
|
|
538
|
-
</thead>
|
|
539
|
-
<tbody valign="top">
|
|
540
|
-
<tr class="row-even"><td><code class="docutils literal"><span class="pre">fast</span></code></td>
|
|
541
|
-
<td><p class="first">This strategy optimizes for the lowest latency.</p>
|
|
542
|
-
<p class="last">AMPS delivers the message to the first subscription found that does not have a full
|
|
543
|
-
backlog. With this algorithm, AMPS tries to minimize the time spent determining which
|
|
544
|
-
subscription receives the message without attempting to distribute messages fairly
|
|
545
|
-
across subscriptions.</p>
|
|
546
|
-
</td>
|
|
547
|
-
</tr>
|
|
548
|
-
<tr class="row-odd"><td><code class="docutils literal"><span class="pre">round-robin</span></code></td>
|
|
549
|
-
<td><p class="first">This strategy optimizes for general fairness across subscriptions.</p>
|
|
550
|
-
<p class="last">AMPS delivers the message to the next available subscription that does not have a full
|
|
551
|
-
backlog. With this algorithm, AMPS delivers messages evenly among the subscribers
|
|
552
|
-
that have space in their backlog.</p>
|
|
553
|
-
</td>
|
|
554
|
-
</tr>
|
|
555
|
-
<tr class="row-even"><td><code class="docutils literal"><span class="pre">proportional</span></code></td>
|
|
556
|
-
<td><p class="first">This strategy optimizes for delivery to subscriptions with the most unused capacity.</p>
|
|
557
|
-
<p>AMPS delivers the message to the subscription that has the highest proportion of
|
|
558
|
-
backlog capacity unused. AMPS determines this by taking the ratio of unacknowledged
|
|
559
|
-
messages to the maximum backlog.</p>
|
|
560
|
-
<p>For example, if there are three active subscribers for the queue, with backlog settings
|
|
561
|
-
and outstanding messages as follows:</p>
|
|
562
|
-
<ul class="simple">
|
|
563
|
-
<li>Subscriber <code class="docutils literal"><span class="pre">Inky</span></code>: <code class="docutils literal"><span class="pre">max_backlog=2</span></code>, currently leased 1 message</li>
|
|
564
|
-
<li>Subscriber <code class="docutils literal"><span class="pre">Blinky</span></code>: <code class="docutils literal"><span class="pre">max_backlog=4</span></code>, currently leased 3 messages</li>
|
|
565
|
-
<li>Subscriber <code class="docutils literal"><span class="pre">Clyde</span></code>: <code class="docutils literal"><span class="pre">max_backlog=10</span></code>, currently leased 4 messages</li>
|
|
566
|
-
</ul>
|
|
567
|
-
<p>In this case, with <code class="docutils literal"><span class="pre">proportional</span></code> delivery, a new message for the queue will be
|
|
568
|
-
delivered to Clyde, since that subscriber has only filled 40% of the backlog, as
|
|
569
|
-
compared with 50% for Inky and 75% for Blinky.</p>
|
|
570
|
-
<p class="last">If more than one subscription has the same unused capacity, AMPS delivers the
|
|
571
|
-
message to the first subscription found with that capacity.</p>
|
|
572
|
-
</td>
|
|
573
|
-
</tr>
|
|
574
|
-
</tbody>
|
|
575
|
-
</table>
|
|
576
|
-
<p>AMPS defaults to <code class="docutils literal"><span class="pre">proportional</span></code> delivery for <code class="docutils literal"><span class="pre">at-least-once</span></code> queues
|
|
577
|
-
and defaults to <code class="docutils literal"><span class="pre">round-robin</span></code> (the only valid delivery model) for
|
|
578
|
-
<code class="docutils literal"><span class="pre">at-most-once</span></code> queues.</p>
|
|
579
|
-
<div class="admonition tip">
|
|
580
|
-
<p class="first admonition-title">Tip</p>
|
|
581
|
-
<p>Each instance of AMPS manages delivery strategy from among the
|
|
582
|
-
messages that it currently owns and the subscriptions that are
|
|
583
|
-
present on that instance.</p>
|
|
584
|
-
<p class="last">Delivery strategies apply only to a single instance, and are
|
|
585
|
-
not applied across instances.</p>
|
|
586
|
-
</div>
|
|
587
|
-
</div>
|
|
588
|
-
<div class="section" id="acknowledging-messages">
|
|
589
|
-
<h3>Acknowledging Messages<a class="headerlink" href="#acknowledging-messages" title="Permalink to this headline">¶</a></h3>
|
|
590
|
-
<p>Subscribers must acknowledge each message to indicate to AMPS that a
|
|
591
|
-
message has been processed. The point at which a subscriber acknowledges
|
|
592
|
-
a message depends on the exact processing that the subscriber performs
|
|
593
|
-
and the processing guarantees for the application. In general,
|
|
594
|
-
applications acknowledge messages at the point at which the processing
|
|
595
|
-
has a result that is durable and which would require an explicit action
|
|
596
|
-
(such as another message) to change.</p>
|
|
597
|
-
<p>Some common points at which to acknowledge a message are:</p>
|
|
598
|
-
<ul class="simple">
|
|
599
|
-
<li>When processing is fully completed.</li>
|
|
600
|
-
<li>When work is performed that would require a compensating action (that
|
|
601
|
-
is, when information is committed to a database or forwarded to a
|
|
602
|
-
downstream system).</li>
|
|
603
|
-
<li>When work is submitted to a processor that is guaranteed to either
|
|
604
|
-
succeed or explicitly indicate failure.</li>
|
|
605
|
-
</ul>
|
|
606
|
-
<p>To acknowledge a message, the subscriber typically uses the acknowledge
|
|
607
|
-
convenience methods in the AMPS client. These commands issue a
|
|
608
|
-
<code class="docutils literal"><span class="pre">sow_delete</span></code> command with the bookmark from the message to
|
|
609
|
-
acknowledge. AMPS allows subscribers to acknowledge multiple messages
|
|
610
|
-
simultaneously by providing a comma-delimited list of bookmarks in the
|
|
611
|
-
<code class="docutils literal"><span class="pre">sow_delete</span></code> command: the AMPS clients provide facilities to batch
|
|
612
|
-
acknowledgments for efficiency.</p>
|
|
613
|
-
<p>AMPS allows an application to acknowledge messages by providing a filter on a
|
|
614
|
-
<code class="docutils literal"><span class="pre">sow_delete</span></code> command. In this case, the <code class="docutils literal"><span class="pre">sow_delete</span></code> acknowledges all
|
|
615
|
-
messages that match the filter, regardless of whether the application that
|
|
616
|
-
sends the command has a current lease on a given message or not. (The
|
|
617
|
-
<code class="docutils literal"><span class="pre">Leasing</span></code> parameter on the queue specifies whether AMPS allows a client to
|
|
618
|
-
successfully acknowledge messages that it does not currently have leased.)</p>
|
|
619
|
-
<p>For queues that use the <code class="docutils literal"><span class="pre">at-least-once</span></code> delivery model, there are two
|
|
620
|
-
additional options available for acknowledging messages.</p>
|
|
621
|
-
<ul class="simple">
|
|
622
|
-
<li><strong>To return a message to the queue without processing it</strong>, the
|
|
623
|
-
subscriber provides the <code class="docutils literal"><span class="pre">cancel</span></code> option on the acknowledgment.
|
|
624
|
-
In this case, AMPS returns the message to the queue just as though
|
|
625
|
-
the lease had expired. If the message is eligible for redelivery
|
|
626
|
-
(that is, it has not exceeded the maximum time or maximum cancels
|
|
627
|
-
configured for the queue), it is redelivered. Otherwise, the
|
|
628
|
-
message is expired from the queue. The <code class="docutils literal"><span class="pre">MaxCancels</span></code> option
|
|
629
|
-
allows you to configure how many times a message can be returned
|
|
630
|
-
to the queue for redelivery before AMPS expires the message.</li>
|
|
631
|
-
<li><strong>To immediately remove a message from the queue</strong>, the subscriber
|
|
632
|
-
provides the <code class="docutils literal"><span class="pre">expire</span></code> option. In this case, AMPS does not return
|
|
633
|
-
the message to the queue for redelivery, but instead immediately
|
|
634
|
-
expires the message from the queue and triggers any configured
|
|
635
|
-
<code class="docutils literal"><span class="pre">amps-action-on-sow-expire-message</span></code> actions that monitor the
|
|
636
|
-
queue. The <code class="docutils literal"><span class="pre">expire</span></code> option can be especially helpful if your
|
|
637
|
-
application can determine that the message cannot be successfully
|
|
638
|
-
processed (for example, the message is unparseable or contains
|
|
639
|
-
invalid data).</li>
|
|
640
|
-
</ul>
|
|
641
|
-
<p>Options for acknowledging messages delivered from <code class="docutils literal"><span class="pre">at-least-once</span></code> queues:</p>
|
|
642
|
-
<table border="1" class="docutils" id="id3">
|
|
643
|
-
<caption><span class="caption-text"><em>Acknowledgement options</em></span><a class="headerlink" href="#id3" title="Permalink to this table">¶</a></caption>
|
|
644
|
-
<colgroup>
|
|
645
|
-
<col width="50%" />
|
|
646
|
-
<col width="50%" />
|
|
647
|
-
</colgroup>
|
|
648
|
-
<thead valign="bottom">
|
|
649
|
-
<tr class="row-odd"><th class="head"><strong>Option</strong></th>
|
|
650
|
-
<th class="head"><strong>Result</strong></th>
|
|
651
|
-
</tr>
|
|
652
|
-
</thead>
|
|
653
|
-
<tbody valign="top">
|
|
654
|
-
<tr class="row-even"><td><none></td>
|
|
655
|
-
<td>Message is considered to be successfully processed
|
|
656
|
-
and removed from the queue.</td>
|
|
657
|
-
</tr>
|
|
658
|
-
<tr class="row-odd"><td><code class="docutils literal"><span class="pre">cancel</span></code></td>
|
|
659
|
-
<td>Message is returned to the queue. The count of cancels
|
|
660
|
-
for this message is incremented, and if the count
|
|
661
|
-
is greater than the configured <code class="docutils literal"><span class="pre">MaxCancels</span></code> for the
|
|
662
|
-
queue, the message is expired.</td>
|
|
663
|
-
</tr>
|
|
664
|
-
<tr class="row-even"><td><code class="docutils literal"><span class="pre">expire</span></code></td>
|
|
665
|
-
<td>Message is immediately expired from the queue.</td>
|
|
666
|
-
</tr>
|
|
667
|
-
</tbody>
|
|
668
|
-
</table>
|
|
669
|
-
<p>For <code class="docutils literal"><span class="pre">at-most-once</span></code> queues, these options to acknowledgments have no effect,
|
|
670
|
-
since the message is guaranteed not to be redelivered even if processing fails.</p>
|
|
671
|
-
</div>
|
|
672
|
-
<div class="section" id="persisting-metadata-for-queues">
|
|
673
|
-
<h3>Persisting Metadata for Queues<a class="headerlink" href="#persisting-metadata-for-queues" title="Permalink to this headline">¶</a></h3>
|
|
674
|
-
<p>A queue can, optionally, save the state of the queue as
|
|
675
|
-
metadata in the journal directory. This can reduce the
|
|
676
|
-
active memory footprint required for large queues, since
|
|
677
|
-
the state of the queue can be paged out if necessary.
|
|
678
|
-
This can also potentially improve recovery time if there
|
|
679
|
-
are a large number of unacknowledged messages in the queue
|
|
680
|
-
when AMPS starts. To persist metadata for a queue,
|
|
681
|
-
set the <code class="docutils literal"><span class="pre">FileBackedMetadata</span></code> option to <code class="docutils literal"><span class="pre">enabled</span></code>
|
|
682
|
-
for the queue.</p>
|
|
683
|
-
<div class="admonition tip">
|
|
684
|
-
<p class="first admonition-title">Tip</p>
|
|
685
|
-
<p>When <code class="docutils literal"><span class="pre">FileBackedMetadata</span></code> is enabled, queue
|
|
686
|
-
state that is not currently needed can be paged
|
|
687
|
-
out to the file. This can substantially reduce
|
|
688
|
-
the active memory needed for large queues that
|
|
689
|
-
are infrequently used.</p>
|
|
690
|
-
<p class="last">Notice that the state will only be paged
|
|
691
|
-
out as necessary. While this option increases
|
|
692
|
-
AMPS ability to manage queue state in
|
|
693
|
-
low-memory situations, AMPS will still
|
|
694
|
-
retain state in memory if memory is
|
|
695
|
-
available to improve performance.</p>
|
|
696
|
-
</div>
|
|
697
|
-
</div>
|
|
698
|
-
<div class="section" id="optional-message-delivery-behaviors">
|
|
699
|
-
<h3>Optional Message Delivery Behaviors<a class="headerlink" href="#optional-message-delivery-behaviors" title="Permalink to this headline">¶</a></h3>
|
|
700
|
-
<p>AMPS queues provide the following optional message delivery behaviors:</p>
|
|
701
|
-
<ul class="simple">
|
|
702
|
-
<li>A <code class="docutils literal"><span class="pre">Priority</span></code> can be specified for a queue, in which case
|
|
703
|
-
AMPS delivers messages in priority order rather than the
|
|
704
|
-
order in which the instance received the messages.</li>
|
|
705
|
-
<li>A <code class="docutils literal"><span class="pre">BarrierExpression</span></code> can be specified to provide a
|
|
706
|
-
synchronization point. When a message matches the
|
|
707
|
-
expression, all previous messages must be
|
|
708
|
-
acknowledged before AMPS will deliver the message
|
|
709
|
-
that matches the expression, or subsequent messages.</li>
|
|
710
|
-
</ul>
|
|
711
|
-
<p>These options are described in more detail in the
|
|
712
|
-
<a class="reference internal" href="#ug-queues-advanced"><span class="std std-ref">Advanced Queue Configuration</span></a> section below.</p>
|
|
713
|
-
</div>
|
|
714
|
-
<div class="section" id="message-flow-for-queues">
|
|
715
|
-
<h3>Message Flow for Queues<a class="headerlink" href="#message-flow-for-queues" title="Permalink to this headline">¶</a></h3>
|
|
716
|
-
<p>The message flow for AMPS queues is as follows. The message flow differs
|
|
717
|
-
depending on whether the queue is configured for <code class="docutils literal"><span class="pre">at-most-once</span></code>
|
|
718
|
-
delivery or <code class="docutils literal"><span class="pre">at-least-once</span></code> delivery.</p>
|
|
719
|
-
<p>When the queue is configured for <code class="docutils literal"><span class="pre">at-most-once</span></code> delivery:</p>
|
|
720
|
-
<ol class="arabic">
|
|
721
|
-
<li><p class="first">A publisher publishes a message to an underlying topic.</p>
|
|
722
|
-
</li>
|
|
723
|
-
<li><p class="first">The message becomes available in the queue.</p>
|
|
724
|
-
</li>
|
|
725
|
-
<li><p class="first">For a message that is not a barrier message, the message is published to a subscriber when:</p>
|
|
726
|
-
<ul class="simple">
|
|
727
|
-
<li>There is a subscription that matches the message, and the
|
|
728
|
-
subscriber is entitled to see the message</li>
|
|
729
|
-
<li>The message is the oldest message in the queue that matches the
|
|
730
|
-
subscription (if no <code class="docutils literal"><span class="pre">Priority</span></code> is specified for the queue)
|
|
731
|
-
or it has the highest priority value for messages in the queue
|
|
732
|
-
and is the oldest message at that priority (if <code class="docutils literal"><span class="pre">Priority</span></code>
|
|
733
|
-
is specified).</li>
|
|
734
|
-
<li>The subscription has remaining capacity in its backlog</li>
|
|
735
|
-
<li>The subscription is the next subscription to receive the message
|
|
736
|
-
as determined by the delivery fairness for the queue</li>
|
|
737
|
-
</ul>
|
|
738
|
-
<p>AMPS removes the message from the queue when the message is
|
|
739
|
-
published.</p>
|
|
740
|
-
</li>
|
|
741
|
-
<li><p class="first">For a message that is a barrier message, AMPS does not deliver the message
|
|
742
|
-
until all previous messages have been acknowledged. AMPS does not deliver
|
|
743
|
-
messages after the barrier message until the barrier message has been
|
|
744
|
-
delivered.</p>
|
|
745
|
-
</li>
|
|
746
|
-
<li><p class="first">If no subscription has requested the message, and the message has
|
|
747
|
-
been in the queue longer than the <code class="docutils literal"><span class="pre">Expiration</span></code> time, AMPS removes
|
|
748
|
-
the message from the queue. With AMPS queues, message expiration is
|
|
749
|
-
considered to be a normal way for the message to leave the queue, and
|
|
750
|
-
is not considered an error.</p>
|
|
751
|
-
</li>
|
|
752
|
-
<li><p class="first">The subscriber processes the message, and acknowledges the message
|
|
753
|
-
when processing is finished to indicate to AMPS that the subscriber
|
|
754
|
-
has capacity for another message.</p>
|
|
755
|
-
</li>
|
|
756
|
-
</ol>
|
|
757
|
-
<p>When the queue is configured for <code class="docutils literal"><span class="pre">at-least-once</span></code> delivery:</p>
|
|
758
|
-
<ol class="arabic">
|
|
759
|
-
<li><p class="first">A publisher publishes a message to an underlying topic.</p>
|
|
760
|
-
</li>
|
|
761
|
-
<li><p class="first">The message becomes available in the queue.</p>
|
|
762
|
-
</li>
|
|
763
|
-
<li><p class="first">For a message that is not a barrier message, the message is published to a subscriber when:</p>
|
|
764
|
-
<ul class="simple">
|
|
765
|
-
<li>There is a subscription that matches the message</li>
|
|
766
|
-
<li>The message is the oldest message in the queue that matches the
|
|
767
|
-
subscription (if no <code class="docutils literal"><span class="pre">Priority</span></code> is specified for the queue) or
|
|
768
|
-
it has the highest priority value for messages in the queue
|
|
769
|
-
and is the oldest message at that priority (if <code class="docutils literal"><span class="pre">Priority</span></code>
|
|
770
|
-
is specified).</li>
|
|
771
|
-
<li>The subscription has remaining capacity in its backlog</li>
|
|
772
|
-
<li>The subscription is the next subscription to receive a message as
|
|
773
|
-
determined by the delivery fairness for the queue</li>
|
|
774
|
-
</ul>
|
|
775
|
-
<p>AMPS calculates the lease time for the message and provides that time
|
|
776
|
-
to the subscriber along with the message.</p>
|
|
777
|
-
</li>
|
|
778
|
-
<li><p class="first">For a message that is a barrier message (that is, the queue
|
|
779
|
-
has a <code class="docutils literal"><span class="pre">BarrierExpression</span></code> specified and the message matches
|
|
780
|
-
that expression), AMPS does not deliver the message
|
|
781
|
-
until all previous messages have been acknowledged. AMPS will not deliver
|
|
782
|
-
messages after the barrier message until the barrier message is delivered.</p>
|
|
783
|
-
</li>
|
|
784
|
-
<li><p class="first">If the message has been in the queue longer than the <code class="docutils literal"><span class="pre">Expiration</span></code>
|
|
785
|
-
time, and there is no current lease on the message, AMPS removes the
|
|
786
|
-
message from the queue.</p>
|
|
787
|
-
</li>
|
|
788
|
-
<li><p class="first">If a subscriber has received the message, but has not removed the
|
|
789
|
-
message from the queue at the time the lease expires, AMPS returns
|
|
790
|
-
the message to the queue if the message has been in the queue less
|
|
791
|
-
than the <code class="docutils literal"><span class="pre">Expiration</span></code> time, and it has been delivered fewer than
|
|
792
|
-
the <code class="docutils literal"><span class="pre">MaxDeliveries</span></code> limit. If the message has been in the queue
|
|
793
|
-
longer than the <code class="docutils literal"><span class="pre">Expiration</span></code> time or has been delivered more than
|
|
794
|
-
the number of times specified by <code class="docutils literal"><span class="pre">MaxDeliveries</span></code>, AMPS removes the
|
|
795
|
-
message from the queue when the lease expires.</p>
|
|
796
|
-
</li>
|
|
797
|
-
<li><p class="first">The subscriber processes the message, and removes the message from
|
|
798
|
-
the queue by acknowledging the message (which is translated by the
|
|
799
|
-
AMPS client into the appropriate <code class="docutils literal"><span class="pre">sow_delete</span></code> command).</p>
|
|
800
|
-
</li>
|
|
801
|
-
</ol>
|
|
802
|
-
</div>
|
|
803
|
-
<div class="section" id="startup-and-recovery-for-queues">
|
|
804
|
-
<h3>Startup and Recovery for Queues<a class="headerlink" href="#startup-and-recovery-for-queues" title="Permalink to this headline">¶</a></h3>
|
|
805
|
-
<p>When the metadata for a queue is not persisted to a file,
|
|
806
|
-
or if that file is not fully up to date with the transaction
|
|
807
|
-
log, AMPS recovers the current state of a queue from the
|
|
808
|
-
transaction log when the instance starts.</p>
|
|
809
|
-
<p>The point at which AMPS chooses to start recovery
|
|
810
|
-
for a given queue is as follows:</p>
|
|
811
|
-
<ul class="simple">
|
|
812
|
-
<li>If this is a new queue,
|
|
813
|
-
or the configured <code class="docutils literal"><span class="pre">RecoveryPoint</span></code> for the queue
|
|
814
|
-
has changed since the last time AMPS started,
|
|
815
|
-
begin queue recovery at the configured recovery
|
|
816
|
-
point. (This defaults to the beginning of the
|
|
817
|
-
transaction log if no explicit <code class="docutils literal"><span class="pre">RecoveryPoint</span></code> is
|
|
818
|
-
configured for the queue.)</li>
|
|
819
|
-
<li>Otherwise, start from the most recent point in
|
|
820
|
-
the transaction log at which all previous messages
|
|
821
|
-
have been acknowledged. This recovery point is
|
|
822
|
-
stored in the <code class="docutils literal"><span class="pre">queues.ack</span></code> file in the journal
|
|
823
|
-
directory for all queues in the instance. If that
|
|
824
|
-
recovery point is older than the journals currently
|
|
825
|
-
available, begin from the beginning of the
|
|
826
|
-
transaction log.</li>
|
|
827
|
-
</ul>
|
|
828
|
-
<p>To recover the state of the queue, AMPS proceeds through
|
|
829
|
-
the journal file from the recovery point and restores
|
|
830
|
-
the state of the queue based on the operations in the
|
|
831
|
-
transaction log for that queue.</p>
|
|
832
|
-
<p>AMPS determines the oldest recovery point for all of
|
|
833
|
-
the queues in the instance, and reads journals
|
|
834
|
-
from that point forward to the end of the transaction log.
|
|
835
|
-
AMPS rebuilds the state of each queue as the replay progresses
|
|
836
|
-
past the recovery point for that queue.</p>
|
|
837
|
-
</div>
|
|
838
|
-
</div>
|
|
839
|
-
<div class="section" id="advanced-messaging-and-queues">
|
|
840
|
-
<h2>Advanced Messaging and Queues<a class="headerlink" href="#advanced-messaging-and-queues" title="Permalink to this headline">¶</a></h2>
|
|
841
|
-
<p>Queues are implemented as AMPS topics which lets you use the advanced
|
|
842
|
-
messaging features of AMPS to create your queues and provide insight
|
|
843
|
-
into your queues. For example, consumers can use content filtering to
|
|
844
|
-
select the messages from the queue that they want to consume. You can
|
|
845
|
-
use content filters to select only a subset of messages published to an
|
|
846
|
-
underlying topic to populate the queue. You can even create a view that
|
|
847
|
-
aggregates data from multiple topics, and use that view as the
|
|
848
|
-
underlying topic for the queue. Since messages for queues are recorded
|
|
849
|
-
in the transaction log, you can easily replay the messages that the
|
|
850
|
-
queue provided to subscribers by using a bookmark subscription.</p>
|
|
851
|
-
<div class="section" id="querying-queues-as-a-view">
|
|
852
|
-
<h3>Querying Queues as a View<a class="headerlink" href="#querying-queues-as-a-view" title="Permalink to this headline">¶</a></h3>
|
|
853
|
-
<p>For each queue, AMPS provides a view of the currently available
|
|
854
|
-
messages. Applications can query this queue just as though it were a
|
|
855
|
-
view. For example, if you have a queue named <code class="docutils literal"><span class="pre">PendingOrders</span></code>, you can
|
|
856
|
-
see the currently available messages in the queue by querying the queue
|
|
857
|
-
as though it were a view, with a <code class="docutils literal"><span class="pre">sow</span></code> command.</p>
|
|
858
|
-
<p>A query of a queue is <em>read-only</em>. AMPS does not lease the returned
|
|
859
|
-
messages to the querying application, or remove them from the queue.</p>
|
|
860
|
-
</div>
|
|
861
|
-
<div class="section" id="topic-in-the-state-of-the-world-as-an-underlying-topic-for-a-queue">
|
|
862
|
-
<span id="ug-sow-underlying-queue"></span><h3>Topic in the State of the World as an Underlying Topic for a Queue<a class="headerlink" href="#topic-in-the-state-of-the-world-as-an-underlying-topic-for-a-queue" title="Permalink to this headline">¶</a></h3>
|
|
863
|
-
<p>AMPS fully supports a topic that maintains a SOW as an underlying topic
|
|
864
|
-
for a queue. Since a queue records every individual publish to a topic
|
|
865
|
-
(rather than simply preserving the current state of a distinct message
|
|
866
|
-
identified by a SOW key), each publish to the SOW topic creates a new
|
|
867
|
-
message in the queue.</p>
|
|
868
|
-
<p>AMPS does not provide Out-of-Focus messages to the queue. Only publish
|
|
869
|
-
messages are added to the queue.</p>
|
|
870
|
-
<p>Deleting a message from an underlying topic that maintains a SOW does
|
|
871
|
-
not remove the corresponding messages from the queue. Likewise, when a
|
|
872
|
-
message expires from the SOW, it is not removed from the queue.</p>
|
|
873
|
-
<p>When a message is published to a topic in the SOW, and that topic uses
|
|
874
|
-
expiration, the message is stamped with the expiration value
|
|
875
|
-
set for the topic before being written to the transaction log.
|
|
876
|
-
This means that the message will have the same expiration in the queue.</p>
|
|
877
|
-
</div>
|
|
878
|
-
<div class="section" id="delta-messaging-with-queues">
|
|
879
|
-
<h3>Delta Messaging with Queues<a class="headerlink" href="#delta-messaging-with-queues" title="Permalink to this headline">¶</a></h3>
|
|
880
|
-
<p>AMPS delta subscriptions rely on being able to determine the last state
|
|
881
|
-
of a message delivered on a subscription and providing a set of changes
|
|
882
|
-
to the subscriber. With AMPS queues, AMPS treats each update to a SOW
|
|
883
|
-
record as a new message, so there’s no previous state that would
|
|
884
|
-
generate a delta message. When an underlying topic of a queue is a SOW
|
|
885
|
-
topic, AMPS supports delta publish to that underlying topic. The full,
|
|
886
|
-
merged message is added to the queue.</p>
|
|
887
|
-
<p>AMPS allows delta subscriptions to a queue, but treats each message as a
|
|
888
|
-
new publish and delivers the full message.</p>
|
|
889
|
-
</div>
|
|
890
|
-
<div class="section" id="views-and-aggregated-subscriptions-over-queues">
|
|
891
|
-
<h3>Views and Aggregated Subscriptions over Queues<a class="headerlink" href="#views-and-aggregated-subscriptions-over-queues" title="Permalink to this headline">¶</a></h3>
|
|
892
|
-
<p>AMPS fully supports creating a view or an aggregated subscription with a
|
|
893
|
-
queue as an underlying topic. In both cases, AMPS operates on the
|
|
894
|
-
messages that are currently available in the queue. When a message is
|
|
895
|
-
leased, that message is no longer available to the queue and does not
|
|
896
|
-
appear in the view or the aggregated subscription. If the message is
|
|
897
|
-
returned to the queue, then the message is again available to the view
|
|
898
|
-
or aggregated subscription. When a message expires, that message is no
|
|
899
|
-
longer available in the view or aggregated subscription.</p>
|
|
900
|
-
<p>Views and aggregated subscriptions are considered to be a query of the
|
|
901
|
-
queue, so they are <em>read-only</em>. Views and aggregated subscriptions do
|
|
902
|
-
not lease messages from the queue and do not affect message delivery.</p>
|
|
903
|
-
<p>Views over queues can be useful to show constantly-updated aggregates of
|
|
904
|
-
the activity in the queue. For example, you could create an aggregate
|
|
905
|
-
that shows the total value of unprocessed orders currently in the queue.</p>
|
|
906
|
-
</div>
|
|
907
|
-
<div class="section" id="bookmark-subscriptions-to-queues">
|
|
908
|
-
<h3>Bookmark Subscriptions to Queues<a class="headerlink" href="#bookmark-subscriptions-to-queues" title="Permalink to this headline">¶</a></h3>
|
|
909
|
-
<p>A queue itself supports <cite>at_most_once</cite> or <cite>at_least_once</cite> delivery.
|
|
910
|
-
It does not provide a way to replay messages once a subscriber
|
|
911
|
-
has acknowledged the message.</p>
|
|
912
|
-
<p>To support replay of messages from a queue, AMPS translates a
|
|
913
|
-
bookmark subscription to a queue to be a bookmark subscription
|
|
914
|
-
to the underlying topic for the queue. This allows you to replay
|
|
915
|
-
messages from the underlying topic <em>without</em> queue delivery semantics.
|
|
916
|
-
That is, a bookmark subscription to a queue becomes a
|
|
917
|
-
publish/subscribe bookmark subscription to the underlying topic,
|
|
918
|
-
<em>not</em> a subscription to the queue. Messages from this subscription do
|
|
919
|
-
not have <code class="docutils literal"><span class="pre">at-most-once</span></code> or <code class="docutils literal"><span class="pre">at-least-once</span></code> delivery, and do not need
|
|
920
|
-
to be acknowledged. The subscription is a publish/subscribe bookmark
|
|
921
|
-
subscription, just as though there was no queue for the topic.</p>
|
|
922
|
-
<p>To get queuing semantics, do not include a bookmark on subscriptions to
|
|
923
|
-
a queue.</p>
|
|
924
|
-
</div>
|
|
925
|
-
</div>
|
|
926
|
-
<div class="section" id="queue-subscriptions-compared-to-bookmark-replays">
|
|
927
|
-
<h2>Queue Subscriptions Compared to Bookmark Replays<a class="headerlink" href="#queue-subscriptions-compared-to-bookmark-replays" title="Permalink to this headline">¶</a></h2>
|
|
928
|
-
<p>At first glance, a subscription to a queue can look very similar to a bookmark
|
|
929
|
-
replay. In both cases, messages are provided in order from the transaction log.
|
|
930
|
-
In both cases, a message that is not processed can be retrieved and redelivered.
|
|
931
|
-
In both cases, AMPS allows a subscription to exactly specify the
|
|
932
|
-
messages of interest using content filtering.</p>
|
|
933
|
-
<p>There are a few main differences:</p>
|
|
934
|
-
<ul>
|
|
935
|
-
<li><p class="first"><strong>Delivery Model</strong></p>
|
|
936
|
-
<p>With a bookmark subscription, a message from a given topic can be delivered
|
|
937
|
-
to any number of subscribers and processed multiple times. A given
|
|
938
|
-
subscriber can replay the same messages any number of times, if needed.</p>
|
|
939
|
-
<p>With a queue subscription, the server guarantees that once a message
|
|
940
|
-
is processed, it is not delivered from that topic again.</p>
|
|
941
|
-
</li>
|
|
942
|
-
<li><p class="first"><strong>Delivery Limits</strong></p>
|
|
943
|
-
<p>With a bookmark subscription, by default AMPS will deliver messages to the
|
|
944
|
-
subscription as fast as the physical hardware, disk, and network
|
|
945
|
-
allow.</p>
|
|
946
|
-
<p>With a queue subscription, AMPS intentionally limits the number of messages
|
|
947
|
-
delivered to a subscriber, to help ensure that messages are processed in a
|
|
948
|
-
timely manner. Since each message should be delivered only once, delivering
|
|
949
|
-
every message to a single subscriber would run the risk of having a slow consumer
|
|
950
|
-
holding messages that it is unable to process, while a faster consumer sits idle.</p>
|
|
951
|
-
</li>
|
|
952
|
-
</ul>
|
|
953
|
-
<ul>
|
|
954
|
-
<li><p class="first"><strong>Acknowledgment</strong></p>
|
|
955
|
-
<p>With a bookmark subscription, the application and client libraries are
|
|
956
|
-
responsible for tracking which messages have been processed and providing
|
|
957
|
-
the correct recovery point. There is no state stored in the AMPS server
|
|
958
|
-
as to which messages have been consumed by a given subscription.</p>
|
|
959
|
-
<p>With a queue subscription, the AMPS server tracks whether a given message
|
|
960
|
-
has been processed. A queue subscriber must notify the server that it
|
|
961
|
-
is finished with a given message and is ready for more work. The AMPS
|
|
962
|
-
client libraries contain support for making this process easy, as well
|
|
963
|
-
as the ability to batch acknowledgments to provide high throughput
|
|
964
|
-
while maintaining efficient processing and the guarantees for queues.</p>
|
|
965
|
-
</li>
|
|
966
|
-
</ul>
|
|
967
|
-
</div>
|
|
968
|
-
<div class="section" id="replacing-queue-subscriptions">
|
|
969
|
-
<h2>Replacing Queue Subscriptions<a class="headerlink" href="#replacing-queue-subscriptions" title="Permalink to this headline">¶</a></h2>
|
|
970
|
-
<p>Queues support the <code class="docutils literal"><span class="pre">replace</span></code> option for subscriptions. As with
|
|
971
|
-
subscriptions to other topics, queue subscriptions can replace the
|
|
972
|
-
content filter, the topic, the options, or all of the above. Replacement
|
|
973
|
-
is atomic. The queue consumer is guaranteed that, after the replace
|
|
974
|
-
occurs, only messages that match the new subscription will be delivered.</p>
|
|
975
|
-
<p>Replacing queue subscriptions differs from unsubscribing and
|
|
976
|
-
resubscribing with new parameters in two ways:</p>
|
|
977
|
-
<ol class="arabic">
|
|
978
|
-
<li><p class="first">AMPS does not break message leases or adjust the number of
|
|
979
|
-
currently-unacknowledged messages for the subscription, even if the
|
|
980
|
-
messages no longer match the current subscription. AMPS makes no
|
|
981
|
-
assumptions about the state of the messages, and requires the
|
|
982
|
-
subscriber to acknowledge them or allow the lease to expire.</p>
|
|
983
|
-
</li>
|
|
984
|
-
<li><p class="first">AMPS may change the maximum backlog for the subscription if either
|
|
985
|
-
the <code class="docutils literal"><span class="pre">max_backlog</span></code> option <em>or</em> the topic for the subscription has
|
|
986
|
-
changed. AMPS adjusts the backlog using the same logic as when the
|
|
987
|
-
subscription was entered: the maximum backlog will be the smaller of
|
|
988
|
-
the option set by the consumer or the limit on the queue. This can
|
|
989
|
-
result in a situation where the consumer has more messages leased
|
|
990
|
-
than the current maximum for the subscription, and no new messages
|
|
991
|
-
will be delivered until that number drops below the current maximum.</p>
|
|
992
|
-
<p>For example, if the consumer has a requested <code class="docutils literal"><span class="pre">max_backlog</span></code> of 10 and
|
|
993
|
-
updates a subscription from a queue with a configured maximum of 10
|
|
994
|
-
to a queue with a configured maximum of 5, the new backlog for the
|
|
995
|
-
subscription will be 5. However, the consumer may still have 10
|
|
996
|
-
messages outstanding.</p>
|
|
997
|
-
</li>
|
|
998
|
-
</ol>
|
|
999
|
-
<p>In all other ways, AMPS behaves as though the replaced subscription was
|
|
1000
|
-
a new subscription to the queue.</p>
|
|
1001
|
-
</div>
|
|
1002
|
-
<div class="section" id="handling-unprocessed-messages">
|
|
1003
|
-
<span id="index-1"></span><h2>Handling Unprocessed Messages<a class="headerlink" href="#handling-unprocessed-messages" title="Permalink to this headline">¶</a></h2>
|
|
1004
|
-
<p>Queuing applications occasionally encounter data that cannot be successfully
|
|
1005
|
-
processed or completed. AMPS allows you to configure actions that occur when
|
|
1006
|
-
a message expires from a message queue. You can create a dead-letter queue or
|
|
1007
|
-
topic by using the <code class="docutils literal"><span class="pre">amps-action-on-sow-expire-message</span></code> action in conjunction
|
|
1008
|
-
with the <code class="docutils literal"><span class="pre">MaxCancels</span></code> and <code class="docutils literal"><span class="pre">MaxDeliveries</span></code> options and the <code class="docutils literal"><span class="pre">cancel</span></code>
|
|
1009
|
-
and <code class="docutils literal"><span class="pre">expire</span></code> options on the <code class="docutils literal"><span class="pre">sow_delete</span></code> command.</p>
|
|
1010
|
-
<p>As an example, suppose your queue <code class="docutils literal"><span class="pre">Jobs</span></code> is used to coordinate computation
|
|
1011
|
-
jobs, and in the rare case where a job cannot be completed successfully, you
|
|
1012
|
-
would like AMPS to automatically move the job to another queue, <code class="docutils literal"><span class="pre">FailedJobs</span></code>.
|
|
1013
|
-
AMPS provides <code class="docutils literal"><span class="pre">MaxCancels</span></code> and <code class="docutils literal"><span class="pre">MaxDeliveries</span></code> options to specify how many
|
|
1014
|
-
attempts it should make to deliver a message to a subscriber:</p>
|
|
1015
|
-
<div class="highlight-xml"><div class="highlight"><pre><span></span><span class="nt"><AMPSConfig></span>
|
|
1016
|
-
...
|
|
1017
|
-
|
|
1018
|
-
<span class="nt"><SOW></span>
|
|
1019
|
-
<span class="nt"><Queue></span>
|
|
1020
|
-
<span class="nt"><Name></span>Jobs<span class="nt"></Name></span>
|
|
1021
|
-
<span class="nt"><MessageType></span>json<span class="nt"></MessageType></span>
|
|
1022
|
-
<span class="nt"><MaxCancels></span>3<span class="nt"></MaxCancels></span>
|
|
1023
|
-
<span class="nt"><MaxDeliveries></span>10<span class="nt"></MaxDeliveries></span>
|
|
1024
|
-
<span class="nt"></Queue></span>
|
|
1025
|
-
<span class="nt"><Queue></span>
|
|
1026
|
-
<span class="nt"><Name></span>FailedJobs<span class="nt"></Name></span>
|
|
1027
|
-
<span class="nt"><MessageType></span>json<span class="nt"></MessageType></span>
|
|
1028
|
-
<span class="nt"></Queue></span>
|
|
1029
|
-
<span class="nt"></SOW></span>
|
|
1030
|
-
<span class="nt"></AMPSConfig></span>
|
|
1031
|
-
</pre></div>
|
|
1032
|
-
</div>
|
|
1033
|
-
<p>In this configuration, AMPS will automatically expire a message from <code class="docutils literal"><span class="pre">Jobs</span></code>
|
|
1034
|
-
on the 3rd time it receives a <code class="docutils literal"><span class="pre">sow_delete</span></code> with the <code class="docutils literal"><span class="pre">cancel</span></code> operation
|
|
1035
|
-
for that message, or after the 10th unsuccessful delivery of the message.
|
|
1036
|
-
By default, expiring a message simply means the message is removed from the
|
|
1037
|
-
queue, but in this case, we also want the <code class="docutils literal"><span class="pre">FailedJobs</span></code> queue to receive
|
|
1038
|
-
the message so that it can be manually reviewed later. To accomplish this,
|
|
1039
|
-
AMPS provides the <code class="docutils literal"><span class="pre">amps-action-on-sow-expire-message</span></code> action which can be
|
|
1040
|
-
configured to do so:</p>
|
|
1041
|
-
<div class="highlight-xml"><div class="highlight"><pre><span></span><span class="nt"><AMPSConfig></span>
|
|
1042
|
-
...
|
|
1043
|
-
<span class="nt"><Actions></span>
|
|
1044
|
-
<span class="nt"><Action></span>
|
|
1045
|
-
<span class="nt"><On></span>
|
|
1046
|
-
<span class="nt"><Module></span>amps-action-on-sow-expire-message<span class="nt"></Module></span>
|
|
1047
|
-
<span class="nt"><Options></span>
|
|
1048
|
-
<span class="nt"><Topic></span>Jobs<span class="nt"></Topic></span>
|
|
1049
|
-
<span class="nt"><MessageType></span>json<span class="nt"></MessageType></span>
|
|
1050
|
-
<span class="nt"></Options></span>
|
|
1051
|
-
<span class="nt"></On></span>
|
|
1052
|
-
<span class="nt"><Do></span>
|
|
1053
|
-
<span class="nt"><Module></span>amps-action-do-publish-message<span class="nt"></Module></span>
|
|
1054
|
-
<span class="nt"><Options></span>
|
|
1055
|
-
<span class="nt"><Topic></span>FailedJobs<span class="nt"></Topic></span>
|
|
1056
|
-
<span class="nt"><MessageType></span>json<span class="nt"></MessageType></span>
|
|
1057
|
-
<span class="nt"><Data></span>{ "message": {{AMPS_DATA}}, "reason": "{{AMPS_REASON}}" }<span class="nt"></Data></span>
|
|
1058
|
-
<span class="nt"></Options></span>
|
|
1059
|
-
<span class="nt"></Do></span>
|
|
1060
|
-
<span class="nt"></Action></span>
|
|
1061
|
-
<span class="nt"></Actions></span>
|
|
1062
|
-
...
|
|
1063
|
-
<span class="nt"></AMPSConfig></span>
|
|
1064
|
-
</pre></div>
|
|
1065
|
-
</div>
|
|
1066
|
-
<p>With this action configured, any expired message from <code class="docutils literal"><span class="pre">Jobs</span></code> will result in a
|
|
1067
|
-
message automatically published to <code class="docutils literal"><span class="pre">FailedJobs</span></code> containing the original
|
|
1068
|
-
message inside the <code class="docutils literal"><span class="pre">message</span></code> element, and an AMPS-supplied reason code in
|
|
1069
|
-
the <code class="docutils literal"><span class="pre">reason</span></code> field.</p>
|
|
1070
|
-
</div>
|
|
1071
|
-
<div class="section" id="advanced-queue-configuration">
|
|
1072
|
-
<span id="ug-queues-advanced"></span><h2>Advanced Queue Configuration<a class="headerlink" href="#advanced-queue-configuration" title="Permalink to this headline">¶</a></h2>
|
|
1073
|
-
<p>This section describes more advanced configuration settings for
|
|
1074
|
-
AMPS message queues.</p>
|
|
1075
|
-
<div class="section" id="using-multiple-underlying-topics">
|
|
1076
|
-
<h3>Using Multiple Underlying Topics<a class="headerlink" href="#using-multiple-underlying-topics" title="Permalink to this headline">¶</a></h3>
|
|
1077
|
-
<p>AMPS queues can contain messages from any number of underlying topics. This provides
|
|
1078
|
-
a flexible delivery model, and allows applications to populate multiple queues
|
|
1079
|
-
with a single publish to AMPS, which simplifies publisher code, reduces bandwidth,
|
|
1080
|
-
and ensures that the message is provided to all queues from the same point in
|
|
1081
|
-
the message stream.</p>
|
|
1082
|
-
<p>To create a queue that includes messages from underlying topics, you provide a
|
|
1083
|
-
regular expression that matches the set of topic names that contain messages for
|
|
1084
|
-
the queue. You also provide a <code class="docutils literal"><span class="pre">DefaultPublishTarget</span></code> that specifies the topic
|
|
1085
|
-
name for AMPS to use when a message is published directly to the queue topic.</p>
|
|
1086
|
-
<p>For example, you might configure a set of topics as follows:</p>
|
|
1087
|
-
<div class="highlight-xml"><div class="highlight"><pre><span></span><span class="nt"><SOW></span>
|
|
1088
|
-
...
|
|
1089
|
-
<span class="nt"><Queue></span>
|
|
1090
|
-
<span class="nt"><Name></span>ORDERS_ANALYTICS<span class="nt"></Name></span>
|
|
1091
|
-
<span class="nt"><MessageType></span>json<span class="nt"></MessageType></span>
|
|
1092
|
-
<span class="nt"><UnderlyingTopic></span>^ORDERS$|^ORDERS_ANALYTICS_DIRECT$<span class="nt"></UnderlyingTopic></span>
|
|
1093
|
-
<span class="nt"><DefaultPublishTarget></span>ORDERS_ANALYTICS_DIRECT<span class="nt"></DefaultPublishTarget></span>
|
|
1094
|
-
<span class="nt"></Queue></span>
|
|
1095
|
-
<span class="nt"><Queue></span>
|
|
1096
|
-
<span class="nt"><Name></span>ORDERS_RISK<span class="nt"></Name></span>
|
|
1097
|
-
<span class="nt"><MessageType></span>json<span class="nt"></MessageType></span>
|
|
1098
|
-
<span class="nt"><UnderlyingTopic></span>^ORDERS$|^ORDERS_RISK_DIRECT$<span class="nt"></UnderlyingTopic></span>
|
|
1099
|
-
<span class="nt"><DefaultPublishTarget></span>ORDERS_RISK_DIRECT<span class="nt"></DefaultPublishTarget></span>
|
|
1100
|
-
<span class="nt"></Queue></span>
|
|
1101
|
-
...
|
|
1102
|
-
<span class="nt"></SOW></span>
|
|
1103
|
-
</pre></div>
|
|
1104
|
-
</div>
|
|
1105
|
-
<p>In this case, when a message is published to the <code class="docutils literal"><span class="pre">ORDERS</span></code> topic, both the
|
|
1106
|
-
<code class="docutils literal"><span class="pre">ORDERS_ANALYTICS</span></code> and the <code class="docutils literal"><span class="pre">ORDERS_RISK</span></code> queues deliver the message.
|
|
1107
|
-
However, a publisher can also publish directly to each queue by publishing
|
|
1108
|
-
a message to the <code class="docutils literal"><span class="pre">_DIRECT</span></code> topic for that queue. Furthermore, any publish
|
|
1109
|
-
to the name of the queue will be routed to the appropriate <code class="docutils literal"><span class="pre">_DIRECT</span></code> topic.</p>
|
|
1110
|
-
<p>The following table demonstrates how messages are provided to topics with
|
|
1111
|
-
this configuration:</p>
|
|
1112
|
-
<table border="1" class="docutils">
|
|
1113
|
-
<colgroup>
|
|
1114
|
-
<col width="50%" />
|
|
1115
|
-
<col width="50%" />
|
|
1116
|
-
</colgroup>
|
|
1117
|
-
<thead valign="bottom">
|
|
1118
|
-
<tr class="row-odd"><th class="head">Publish To</th>
|
|
1119
|
-
<th class="head">Results</th>
|
|
1120
|
-
</tr>
|
|
1121
|
-
</thead>
|
|
1122
|
-
<tbody valign="top">
|
|
1123
|
-
<tr class="row-even"><td><code class="docutils literal"><span class="pre">ORDERS</span></code></td>
|
|
1124
|
-
<td>Both <code class="docutils literal"><span class="pre">ORDERS_ANALYTICS</span></code> and <code class="docutils literal"><span class="pre">ORDERS_RISK</span></code> enqueue the
|
|
1125
|
-
message, since <code class="docutils literal"><span class="pre">ORDERS</span></code> matches the <code class="docutils literal"><span class="pre">UnderlyingTopic</span></code> of
|
|
1126
|
-
both queues.</td>
|
|
1127
|
-
</tr>
|
|
1128
|
-
<tr class="row-odd"><td><code class="docutils literal"><span class="pre">ORDERS_ANALYTICS</span></code></td>
|
|
1129
|
-
<td>The message is published to the <code class="docutils literal"><span class="pre">DefaultPublishTarget</span></code>
|
|
1130
|
-
of <code class="docutils literal"><span class="pre">ORDERS_ANALYTICS</span></code>, which is <code class="docutils literal"><span class="pre">ORDERS_ANALYTICS_DIRECT</span></code>.
|
|
1131
|
-
The message is then enqueued to <code class="docutils literal"><span class="pre">ORDERS_ANALYTICS</span></code>, since
|
|
1132
|
-
<code class="docutils literal"><span class="pre">ORDERS_ANALYTICS_DIRECT</span></code> matches the <code class="docutils literal"><span class="pre">UnderlyingTopic</span></code> of
|
|
1133
|
-
<code class="docutils literal"><span class="pre">ORDERS_ANALYTICS</span></code>.</td>
|
|
1134
|
-
</tr>
|
|
1135
|
-
<tr class="row-even"><td><code class="docutils literal"><span class="pre">ORDERS_RISK</span></code></td>
|
|
1136
|
-
<td>The message is published to the <code class="docutils literal"><span class="pre">DefaultPublishTarget</span></code>
|
|
1137
|
-
of <code class="docutils literal"><span class="pre">ORDERS_RISK</span></code>, which is <code class="docutils literal"><span class="pre">ORDERS_RISK_DIRECT</span></code>.
|
|
1138
|
-
The message is then enqueued to <code class="docutils literal"><span class="pre">ORDERS_RISK</span></code>, since
|
|
1139
|
-
<code class="docutils literal"><span class="pre">ORDERS_RISK_DIRECT</span></code> matches the <code class="docutils literal"><span class="pre">UnderlyingTopic</span></code>
|
|
1140
|
-
<code class="docutils literal"><span class="pre">ORDERS_RISK</span></code>.</td>
|
|
1141
|
-
</tr>
|
|
1142
|
-
<tr class="row-odd"><td><code class="docutils literal"><span class="pre">ORDERS_ANALYTICS_DIRECT</span></code></td>
|
|
1143
|
-
<td>The message is published to <code class="docutils literal"><span class="pre">ORDERS_ANALYTICS_DIRECT</span></code>,
|
|
1144
|
-
and is then enqueued to <code class="docutils literal"><span class="pre">ORDERS_ANALYTICS</span></code>.</td>
|
|
1145
|
-
</tr>
|
|
1146
|
-
<tr class="row-even"><td><code class="docutils literal"><span class="pre">ORDERS_RISK_DIRECT</span></code></td>
|
|
1147
|
-
<td>The message is published to <code class="docutils literal"><span class="pre">ORDERS_RISK_DIRECT</span></code>,
|
|
1148
|
-
and is then enqueued to <code class="docutils literal"><span class="pre">ORDERS_RISK</span></code>.</td>
|
|
1149
|
-
</tr>
|
|
1150
|
-
</tbody>
|
|
1151
|
-
</table>
|
|
1152
|
-
</div>
|
|
1153
|
-
<div class="section" id="priority-queues">
|
|
1154
|
-
<h3>Priority Queues<a class="headerlink" href="#priority-queues" title="Permalink to this headline">¶</a></h3>
|
|
1155
|
-
<p>AMPS includes the ability to specify that messages from a queue are delivered
|
|
1156
|
-
in order of <em>priority</em> rather than being delivered strictly in publication order.
|
|
1157
|
-
To enable prioritization on a <code class="docutils literal"><span class="pre">Queue</span></code>, add the <code class="docutils literal"><span class="pre">Priority</span></code> tag to the queue
|
|
1158
|
-
configuration and specify the field or expression to use to set the priority.
|
|
1159
|
-
When a queue definition specifies <code class="docutils literal"><span class="pre">Priority</span></code>, AMPS orders delivery based on
|
|
1160
|
-
a descending sort of the value calculated for the <code class="docutils literal"><span class="pre">Priority</span></code> rather than
|
|
1161
|
-
in descending order of age.</p>
|
|
1162
|
-
<p><code class="docutils literal"><span class="pre">Priority</span></code> expressions use the same grammar as other expressions in AMPS, as
|
|
1163
|
-
described in <a class="reference internal" href="amps_expressions.html#ug-amps-expressions"><span class="std std-ref">AMPS Expressions</span></a>. The results of the <code class="docutils literal"><span class="pre">Priority</span></code> expression
|
|
1164
|
-
are interpreted as an <code class="docutils literal"><span class="pre">unsigned</span> <span class="pre">long</span></code>. That is, the result should be a positive
|
|
1165
|
-
integer that can be represented in 64 bits. Non-numeric values or <code class="docutils literal"><span class="pre">NULL</span></code> are treated
|
|
1166
|
-
as <code class="docutils literal"><span class="pre">NaN</span></code>, and have the lowest priority.</p>
|
|
1167
|
-
<p>For example, to create a queue that delivers messages in order of the product of
|
|
1168
|
-
the price and quantity specified in the message, you could use the following
|
|
1169
|
-
queue definition:</p>
|
|
1170
|
-
<div class="highlight-xml"><div class="highlight"><pre><span></span><span class="nt"><AMPSConfig></span>
|
|
1171
|
-
...
|
|
1172
|
-
<span class="c"><!-- Other configuration, including</span>
|
|
1173
|
-
<span class="c"> recording that OrderPriority</span>
|
|
1174
|
-
<span class="c"> and Orders are recorded in the</span>
|
|
1175
|
-
<span class="c"> transaction log.</span>
|
|
1176
|
-
<span class="c"> --></span>
|
|
1177
|
-
|
|
1178
|
-
<span class="nt"><SOW></span>
|
|
1179
|
-
...
|
|
1180
|
-
<span class="nt"><Queue></span>
|
|
1181
|
-
<span class="nt"><Name></span>OrderPriority<span class="nt"></Name></span>
|
|
1182
|
-
<span class="nt"><MessageType></span>json<span class="nt"></MessageType></span>
|
|
1183
|
-
<span class="nt"><Semantics></span>at-least-once<span class="nt"></Semantics></span>
|
|
1184
|
-
<span class="nt"><UnderlyingTopic></span>Orders<span class="nt"></UnderlyingTopic></span>
|
|
1185
|
-
<span class="nt"><Priority></span>/price * /qty<span class="nt"></Priority></span>
|
|
1186
|
-
<span class="nt"></Queue></span>
|
|
1187
|
-
<span class="nt"></SOW></span>
|
|
1188
|
-
|
|
1189
|
-
...
|
|
1190
|
-
<span class="nt"></AMPSConfig></span>
|
|
1191
|
-
</pre></div>
|
|
1192
|
-
</div>
|
|
1193
|
-
</div>
|
|
1194
|
-
<div class="section" id="synchronizing-work-with-barrier-messages">
|
|
1195
|
-
<h3>Synchronizing Work with Barrier Messages<a class="headerlink" href="#synchronizing-work-with-barrier-messages" title="Permalink to this headline">¶</a></h3>
|
|
1196
|
-
<p>AMPS queues provide the ability to synchronize work across a set of
|
|
1197
|
-
subscribers by sending the same message to all subscribers simultaneously,
|
|
1198
|
-
when the queue is fully processed up to the point of the message.</p>
|
|
1199
|
-
<p>These messages are referred to as <em>barrier messages</em>, since they are roughly
|
|
1200
|
-
equivalent to the concept of a barrier in multithreaded programming.</p>
|
|
1201
|
-
<p>Barrier messages simplify coordination between current subscribers to
|
|
1202
|
-
a queue. They allow you to easily coordinate operations (such as end of day
|
|
1203
|
-
processing), update reference data at the precise point in the message
|
|
1204
|
-
stream that the update should take effect, send a shutdown message
|
|
1205
|
-
when all available work is processed, and so on. Since barrier messages
|
|
1206
|
-
are integrated with queue delivery, there is no need to write extra code
|
|
1207
|
-
to correlate the barrier message with the correct point in the queue,
|
|
1208
|
-
to manage multiple subscriptions, or to write code that guarantees
|
|
1209
|
-
delivery to all current subscribers.</p>
|
|
1210
|
-
<p>To specify which messages should be treated as barrier messages, the
|
|
1211
|
-
queue configuration includes a <code class="docutils literal"><span class="pre">BarrierExpression</span></code> element that contains
|
|
1212
|
-
a filter. All messages that match that filter are considered barrier
|
|
1213
|
-
expressions.</p>
|
|
1214
|
-
<p>When a message matches the <code class="docutils literal"><span class="pre">BarrierExpression</span></code>, AMPS delivers the
|
|
1215
|
-
message in the following way:</p>
|
|
1216
|
-
<ul class="simple">
|
|
1217
|
-
<li>AMPS does not deliver the message until all previous messages in the
|
|
1218
|
-
queue are acknowledged.</li>
|
|
1219
|
-
<li>AMPS does not deliver messages that are after the barrier message
|
|
1220
|
-
until the barrier message is sent to subscribers.</li>
|
|
1221
|
-
<li>When all previous messages in the queue are acknowledged, AMPS
|
|
1222
|
-
delivers the barrier message to all current subscribers to the
|
|
1223
|
-
queue.</li>
|
|
1224
|
-
<li>AMPS immediately removes the message from the queue, without
|
|
1225
|
-
requiring acknowledgment from any subscriber.</li>
|
|
1226
|
-
</ul>
|
|
1227
|
-
<p>A barrier message sent to a subscriber does not count toward that subscriber’s
|
|
1228
|
-
backlog, since the barrier message is immediately acknowledged. When
|
|
1229
|
-
sending the barrier message, AMPS does not consider the current backlog
|
|
1230
|
-
of the subscriber (so, subscribers that request <code class="docutils literal"><span class="pre">max_backlog=0</span></code> or which
|
|
1231
|
-
use a regular expression topic and have their backlog filled by messages
|
|
1232
|
-
from other topics will still receive the barrier message).</p>
|
|
1233
|
-
<p>AMPS does, however, apply content filters and entitlement filters for each
|
|
1234
|
-
subscription when delivering the message. If the content filter or entitlement
|
|
1235
|
-
filter for a subscription does not match the barrier message, that subscription
|
|
1236
|
-
will not receive the message. The fact that this subscription does not
|
|
1237
|
-
receive the actual barrier message does not affect the behavior of the
|
|
1238
|
-
barrier itself. A subscription that does not match the message will still
|
|
1239
|
-
see message delivery pause until the barrier is released, but will not
|
|
1240
|
-
receive the actual barrier message.</p>
|
|
1241
|
-
<p>Each AMPS instance manages the delivery of barrier messages for the subscribers
|
|
1242
|
-
connected to that instance, when all messages prior to the barrier message in
|
|
1243
|
-
the local queue have been acknowledged.</p>
|
|
1244
|
-
</div>
|
|
1245
|
-
<div class="section" id="limiting-currently-deliverable-messages">
|
|
1246
|
-
<h3>Limiting Currently Deliverable Messages<a class="headerlink" href="#limiting-currently-deliverable-messages" title="Permalink to this headline">¶</a></h3>
|
|
1247
|
-
<p>In some cases, it may be important to limit the maximum number of
|
|
1248
|
-
messages that AMPS considers to be part of the currently active,
|
|
1249
|
-
deliverable part of the queue. This can be advantageous in cases
|
|
1250
|
-
where memory is limited, or in cases where it is expected that
|
|
1251
|
-
a queue is only processed infrequently (for example, a
|
|
1252
|
-
reconciliation process that runs at the end of each day).</p>
|
|
1253
|
-
<p>The <code class="docutils literal"><span class="pre">TargetQueueDepth</span></code> option on a queue allows you to set
|
|
1254
|
-
the target depth for the number of messages that AMPS will
|
|
1255
|
-
consider to be deliverable at a given time.</p>
|
|
1256
|
-
<p>If the number of messages for the queue exceeds the <code class="docutils literal"><span class="pre">TargetQueueDepth</span></code>
|
|
1257
|
-
on an instance, messages beyond the specified depth are considered to
|
|
1258
|
-
be inactive (though still part of the queue). Those messages are not
|
|
1259
|
-
deliverable to subscribers on this instance. They do not appear in
|
|
1260
|
-
a <code class="docutils literal"><span class="pre">sow</span></code> query of the queue, and are not considered when a view
|
|
1261
|
-
over the queue is calculated. A <code class="docutils literal"><span class="pre">sow_delete</span></code> that uses a filter
|
|
1262
|
-
will only apply to the messages in the queue that are currently deliverable.
|
|
1263
|
-
As messages are acknowledged from the queue, AMPS will add messages
|
|
1264
|
-
to the active part of the queue until the active part of the queue
|
|
1265
|
-
once again reaches the <code class="docutils literal"><span class="pre">TargetQueueDepth</span></code>. For messages that are
|
|
1266
|
-
not currently deliverable, AMPS will not read those messages
|
|
1267
|
-
from the transaction log and will not maintain queue state for
|
|
1268
|
-
those messages. This also means that, if no messages within the
|
|
1269
|
-
<code class="docutils literal"><span class="pre">TargetQueueDepth</span></code> match a given subscription, no messages will
|
|
1270
|
-
be delivered to that subscription even if later messages in the
|
|
1271
|
-
transaction log match the subscription.</p>
|
|
1272
|
-
<p>Although AMPS does not consider messages that are currently inactive
|
|
1273
|
-
to be deliverable, AMPS will preserve queue delivery guarantees in
|
|
1274
|
-
the event that a message that is not currently deliverable is
|
|
1275
|
-
acknowledged before it enters the queue and becomes deliverable.
|
|
1276
|
-
To do this, AMPS keeps a list of acknowledgments that
|
|
1277
|
-
have been received for messages that are not in the queue. When
|
|
1278
|
-
a message that would be added to the active part of the queue
|
|
1279
|
-
has already been acknowledged, AMPS does not add that message to
|
|
1280
|
-
the queue. Applications that use <code class="docutils literal"><span class="pre">TargetQueueDepth</span></code> to limit memory
|
|
1281
|
-
growth should avoid a pattern where messages are acknowledged before
|
|
1282
|
-
they enter the queue to reduce memory consumption for acknowledgments
|
|
1283
|
-
that cannot yet be processed.</p>
|
|
1284
|
-
<p>Likewise, if a transfer request from another instance arrives for
|
|
1285
|
-
a message that is in the transaction log, but is beyond the limit
|
|
1286
|
-
set by the <code class="docutils literal"><span class="pre">TargetQueueDepth</span></code>, AMPS will process messages further
|
|
1287
|
-
into the queue until it reaches the message to be transferred. At
|
|
1288
|
-
that point, AMPS will transfer the message and stop processing further
|
|
1289
|
-
messages until either:</p>
|
|
1290
|
-
<ul class="simple">
|
|
1291
|
-
<li>The current depth drops below the <code class="docutils literal"><span class="pre">TargetQueueDepth</span></code>, <em>or</em></li>
|
|
1292
|
-
<li>AMPS once again receives a request for a message that is in the
|
|
1293
|
-
transaction log, but beyond the current active messages in the queue.</li>
|
|
1294
|
-
</ul>
|
|
1295
|
-
<div class="admonition important">
|
|
1296
|
-
<p class="first admonition-title">Important</p>
|
|
1297
|
-
<p class="last">A <code class="docutils literal"><span class="pre">TargetQueueDepth</span></code> <em>cannot</em> be set for a queue that specifies
|
|
1298
|
-
a <code class="docutils literal"><span class="pre">Priority</span></code> or a <code class="docutils literal"><span class="pre">BarrierExpression</span></code>.</p>
|
|
1299
|
-
</div>
|
|
1300
|
-
</div>
|
|
1301
|
-
</div>
|
|
1302
|
-
<div class="section" id="sow-queue-sow-localqueue-and-sow-grouplocalqueue">
|
|
1303
|
-
<span id="index-2"></span><h2>SOW/Queue, SOW/LocalQueue, and SOW/GroupLocalQueue<a class="headerlink" href="#sow-queue-sow-localqueue-and-sow-grouplocalqueue" title="Permalink to this headline">¶</a></h2>
|
|
1304
|
-
<p id="index-3">This section lists configuration parameters for queues.</p>
|
|
1305
|
-
<p>The <code class="docutils literal"><span class="pre">Queue</span></code> tag, the <code class="docutils literal"><span class="pre">LocalQueue</span></code> tag and the <code class="docutils literal"><span class="pre">GroupLocalQueue</span></code> tag
|
|
1306
|
-
are used to configure message queues.</p>
|
|
1307
|
-
<p>When an AMPS queue is defined with the <code class="docutils literal"><span class="pre">Queue</span></code> tag, the queue will be
|
|
1308
|
-
a distributed queue. To make a queue that is limited to the local
|
|
1309
|
-
instance, use the <code class="docutils literal"><span class="pre">LocalQueue</span></code> configuration element. To make a queue
|
|
1310
|
-
that is restricted to a subset of instances, in a set of replicated instances
|
|
1311
|
-
(typically all in the same group), use the <code class="docutils literal"><span class="pre">GroupLocalQueue</span></code> tag.</p>
|
|
1312
|
-
<p>AMPS accepts <code class="docutils literal"><span class="pre">QueueDefinition</span></code> as a synonym for <code class="docutils literal"><span class="pre">Queue</span></code>.</p>
|
|
1313
|
-
<p>The following configuration items apply to queues regardless
|
|
1314
|
-
of whether they are fully distributed, local, or distributed
|
|
1315
|
-
within a replication group:</p>
|
|
1316
|
-
<table border="1" class="docutils">
|
|
1317
|
-
<colgroup>
|
|
1318
|
-
<col width="30%" />
|
|
1319
|
-
<col width="70%" />
|
|
1320
|
-
</colgroup>
|
|
1321
|
-
<thead valign="bottom">
|
|
1322
|
-
<tr class="row-odd"><th class="head"><strong>Element</strong></th>
|
|
1323
|
-
<th class="head"><strong>Description</strong></th>
|
|
1324
|
-
</tr>
|
|
1325
|
-
</thead>
|
|
1326
|
-
<tbody valign="top">
|
|
1327
|
-
<tr class="row-even"><td><div class="req first last docutils container">
|
|
1328
|
-
Name</div>
|
|
1329
|
-
</td>
|
|
1330
|
-
<td><p class="first">The name of the queue topic. This name is the name that consumers
|
|
1331
|
-
subscribe to.</p>
|
|
1332
|
-
<p class="last">If no <code class="docutils literal"><span class="pre">Name</span></code> is provided, AMPS accepts <code class="docutils literal"><span class="pre">Topic</span></code> as a synonym for
|
|
1333
|
-
<code class="docutils literal"><span class="pre">Name</span></code> in the <code class="docutils literal"><span class="pre">Queue</span></code> definition.</p>
|
|
1334
|
-
</td>
|
|
1335
|
-
</tr>
|
|
1336
|
-
<tr class="row-odd"><td><div class="req first last docutils container">
|
|
1337
|
-
MessageType</div>
|
|
1338
|
-
</td>
|
|
1339
|
-
<td>The message type of the queue.</td>
|
|
1340
|
-
</tr>
|
|
1341
|
-
<tr class="row-even"><td><code class="docutils literal"><span class="pre">UnderlyingTopic</span></code></td>
|
|
1342
|
-
<td><p class="first">A topic name or regular expression for the topic that contains the
|
|
1343
|
-
messages to capture in the queue. These topics must be recorded in a
|
|
1344
|
-
transaction log, and all must be of the same message type as the queue.</p>
|
|
1345
|
-
<p class="last">If an <code class="docutils literal"><span class="pre">UnderlyingTopic</span></code> is not provided, the <code class="docutils literal"><span class="pre">UnderlyingTopic</span></code>
|
|
1346
|
-
defaults to the <code class="docutils literal"><span class="pre">Name</span></code> of the queue.</p>
|
|
1347
|
-
</td>
|
|
1348
|
-
</tr>
|
|
1349
|
-
<tr class="row-odd"><td><code class="docutils literal"><span class="pre">DefaultPublishTarget</span></code></td>
|
|
1350
|
-
<td><p class="first">The topic to publish to when an application publishes a message to
|
|
1351
|
-
the queue. For simplicity, AMPS allows applications to publish
|
|
1352
|
-
messages to the queue, and for those messages to be routed to one of the
|
|
1353
|
-
underlying topics.</p>
|
|
1354
|
-
<p>The <code class="docutils literal"><span class="pre">DefaultPublishTarget</span></code> must be one of the topics included in
|
|
1355
|
-
the queue.</p>
|
|
1356
|
-
<p class="last"><em>This element is required if</em> the <code class="docutils literal"><span class="pre">UnderlyingTopic</span></code> contains regular
|
|
1357
|
-
expression characters. Otherwise, the <code class="docutils literal"><span class="pre">UnderlyingTopic</span></code> is a single
|
|
1358
|
-
topic and this element is optional and defaults to the
|
|
1359
|
-
<code class="docutils literal"><span class="pre">UnderlyingTopic</span></code>.</p>
|
|
1360
|
-
</td>
|
|
1361
|
-
</tr>
|
|
1362
|
-
<tr class="row-even"><td><code class="docutils literal"><span class="pre">LeasePeriod</span></code></td>
|
|
1363
|
-
<td><p class="first">The amount of time that a subscriber has ownership of the message before
|
|
1364
|
-
the message is returned to the queue. For <code class="docutils literal"><span class="pre">at-least-once</span></code> delivery
|
|
1365
|
-
semantics, the consumer must process and acknowledge the message within
|
|
1366
|
-
this lease period, or the message may be provided to another subscriber.</p>
|
|
1367
|
-
<p>The <code class="docutils literal"><span class="pre">LeasePeriod</span></code> is measured from the time that AMPS sends the
|
|
1368
|
-
message to the subscriber. Set the <code class="docutils literal"><span class="pre">LeasePeriod</span></code> to account for round
|
|
1369
|
-
trip network latency as well as the expected processing time for the
|
|
1370
|
-
subscribers.</p>
|
|
1371
|
-
<p class="last">Default: <code class="docutils literal"><span class="pre">infinite</span></code> (no expiration)</p>
|
|
1372
|
-
</td>
|
|
1373
|
-
</tr>
|
|
1374
|
-
<tr class="row-odd"><td><code class="docutils literal"><span class="pre">Semantics</span></code></td>
|
|
1375
|
-
<td><p class="first">The delivery semantics to use for this queue. Regardless of the delivery
|
|
1376
|
-
semantics, AMPS queues deliver a given message to a single subscriber
|
|
1377
|
-
at a time. When a subscriber fails to process a message (that is, the
|
|
1378
|
-
connection to the subscriber closes before the message is
|
|
1379
|
-
acknowledged, or the lease expires before the message is acknowledged),
|
|
1380
|
-
the semantics specify how the failure is handled.</p>
|
|
1381
|
-
<ul class="simple">
|
|
1382
|
-
<li><code class="docutils literal"><span class="pre">at-least-once</span></code> With these semantics, you can guarantee that a
|
|
1383
|
-
message has been processed by at least one subscriber, as described
|
|
1384
|
-
in the introduction to Queues in the <em>AMPS User Guide</em>. With this
|
|
1385
|
-
value, a subscriber must explicitly remove the message from the queue
|
|
1386
|
-
once the message is processed. If the subscriber connection closes
|
|
1387
|
-
before acknowledging the message, the subscriber returns the message
|
|
1388
|
-
to the queue or the lease expires, the AMPS server can deliver the
|
|
1389
|
-
message again to allow another attempt to process the message.</li>
|
|
1390
|
-
<li><code class="docutils literal"><span class="pre">at-most-once</span></code> With these semantics, AMPS removes the message from
|
|
1391
|
-
the queue immediately when AMPS sends the message. This allows you to
|
|
1392
|
-
guarantee that no more than one subscriber will process the message,
|
|
1393
|
-
even if the subscriber that receives the message fails without
|
|
1394
|
-
acknowledging the message.</li>
|
|
1395
|
-
</ul>
|
|
1396
|
-
<p class="last">Default: <code class="docutils literal"><span class="pre">at-least-once</span></code></p>
|
|
1397
|
-
</td>
|
|
1398
|
-
</tr>
|
|
1399
|
-
<tr class="row-even"><td><code class="docutils literal"><span class="pre">MaxBacklog</span></code></td>
|
|
1400
|
-
<td><p class="first">The maximum number of outstanding, unacknowledged messages in the queue
|
|
1401
|
-
at any one time. This parameter allows you to set limits on the
|
|
1402
|
-
number of pending messages from the queue overall. When the queue
|
|
1403
|
-
reaches the MaxBacklog, no incoming messages are delivered from the
|
|
1404
|
-
queue until a message is removed from the queue (either by expiring, or
|
|
1405
|
-
being acknowledged by a client). This parameter allows you to avoid
|
|
1406
|
-
overwhelming clients during periods of heavy activity.</p>
|
|
1407
|
-
<p>Notice that this does not set a limit of any sort on the capacity of the
|
|
1408
|
-
queue. This parameter allows you to limit the number of messages that
|
|
1409
|
-
the queue will make available to subscribers at a given time, but does
|
|
1410
|
-
not restrict the capacity of the queue to track messages.</p>
|
|
1411
|
-
<p>This backlog number is applied <em>per instance</em> of the queue. That is,
|
|
1412
|
-
each instance of AMPS that hosts an instance of a replicated queue will
|
|
1413
|
-
deliver messages up to the <code class="docutils literal"><span class="pre">MaxBacklog</span></code> if messages are available
|
|
1414
|
-
on that instance.</p>
|
|
1415
|
-
<p class="last">Default: <code class="docutils literal"><span class="pre">infinite</span></code></p>
|
|
1416
|
-
</td>
|
|
1417
|
-
</tr>
|
|
1418
|
-
<tr class="row-odd"><td><code class="docutils literal"><span class="pre">MaxPerSubscriptionBacklog</span></code></td>
|
|
1419
|
-
<td><p class="first">The maximum number of outstanding, unacknowledged messages in the queue
|
|
1420
|
-
for an individual subscription. This parameter allows you to avoid
|
|
1421
|
-
overwhelming a single subscriber during a period of heavy activity.</p>
|
|
1422
|
-
<p>Subscribers can declare the maximum number of messages that the
|
|
1423
|
-
subscription is prepared to lease at a given time. This maximum defaults
|
|
1424
|
-
to 1 when there is no maximum explicitly specified for a subscription.
|
|
1425
|
-
AMPS will lease the number specified in the subscription or the maximum
|
|
1426
|
-
set for the queue, whichever is lower.</p>
|
|
1427
|
-
<p>Notice that this does not set a limit of any sort on the capacity of the
|
|
1428
|
-
queue. This parameter allows you to limit the number of messages that
|
|
1429
|
-
the queue will make available for a single subscription at a given time,
|
|
1430
|
-
but does not restrict the capacity of the queue to track messages.</p>
|
|
1431
|
-
<p class="last">Default: <code class="docutils literal"><span class="pre">1</span></code></p>
|
|
1432
|
-
</td>
|
|
1433
|
-
</tr>
|
|
1434
|
-
<tr class="row-even"><td><code class="docutils literal"><span class="pre">TargetQueueDepth</span></code></td>
|
|
1435
|
-
<td><p class="first">The target number of messages to keep active state on.</p>
|
|
1436
|
-
<p>Providing this option limits the amount of state that AMPS keeps for
|
|
1437
|
-
unacknowledged messages. In most circumstances, the limit will be the
|
|
1438
|
-
number of messages specified in this parameter. If this instance
|
|
1439
|
-
receives a transfer request for a message that is in the transaction
|
|
1440
|
-
log, but outside the currently active set of messages, AMPS will
|
|
1441
|
-
process the queue until it reaches the message to be transferred.</p>
|
|
1442
|
-
<p>Messages that are present in the transaction log, but
|
|
1443
|
-
for which AMPS does not currently have active state, are not deliverable
|
|
1444
|
-
from the queue topic, cannot be queried, cannot be deleted using a
|
|
1445
|
-
<code class="docutils literal"><span class="pre">sow_delete</span></code> by filter, and so on. They are not yet in the set of
|
|
1446
|
-
messages that AMPS considers to be an active part of the queue.</p>
|
|
1447
|
-
<p>This option is not set by default. When this option is not set, all
|
|
1448
|
-
messages in the queue are active.</p>
|
|
1449
|
-
<p>This option is typically unnecessary if the <code class="docutils literal"><span class="pre">FileBackedMetadata</span></code>
|
|
1450
|
-
option is enabled. In that case, AMPS will process the full state
|
|
1451
|
-
of the queue, but state that is not currently in use can be
|
|
1452
|
-
paged out to the file.</p>
|
|
1453
|
-
<p>This option cannot be set if <code class="docutils literal"><span class="pre">Priority</span></code> or <code class="docutils literal"><span class="pre">BarrierExpression</span></code>
|
|
1454
|
-
is specified.</p>
|
|
1455
|
-
<p>When this parameter is set, it should be set to a number that accounts
|
|
1456
|
-
for several seconds of traffic to the queue, considering replication
|
|
1457
|
-
and acknowledgment speeds. For example, if a queue is typically
|
|
1458
|
-
processed at a rate of 2500 messages per second within minimal
|
|
1459
|
-
replication delays, a reasonable minimum target value might be
|
|
1460
|
-
12500 or 15000.</p>
|
|
1461
|
-
<p>Notice that, if subscribers use content filters to selectively
|
|
1462
|
-
process the queue, if no currently active messages match the
|
|
1463
|
-
subscription, no messages will be delivered (even if there are matching
|
|
1464
|
-
messages in the queue that are not currently active).</p>
|
|
1465
|
-
<p class="last">Default: unset (no limit)
|
|
1466
|
-
Minimum: <code class="docutils literal"><span class="pre">1000</span></code></p>
|
|
1467
|
-
</td>
|
|
1468
|
-
</tr>
|
|
1469
|
-
<tr class="row-odd"><td><code class="docutils literal"><span class="pre">Expiration</span></code></td>
|
|
1470
|
-
<td><p class="first">The length of time a message can remain in the queue before AMPS
|
|
1471
|
-
considers the message undeliverable.</p>
|
|
1472
|
-
<p>Messages may expire while a subscriber has a lease on the message. AMPS
|
|
1473
|
-
does not send an additional notification in this case.</p>
|
|
1474
|
-
<p>A publisher can override this setting by providing an expiration
|
|
1475
|
-
value on an incoming message. If an individual message in the
|
|
1476
|
-
transaction log has an expiration value, AMPS will use that expiration
|
|
1477
|
-
value for the message rather than the default for the queue.</p>
|
|
1478
|
-
<p class="last">Default: <code class="docutils literal"><span class="pre">infinite</span></code></p>
|
|
1479
|
-
</td>
|
|
1480
|
-
</tr>
|
|
1481
|
-
<tr class="row-even"><td><code class="docutils literal"><span class="pre">Filter</span></code></td>
|
|
1482
|
-
<td><p class="first">An AMPS <code class="docutils literal"><span class="pre">Filter</span></code> that is applied to the <code class="docutils literal"><span class="pre">UnderlyingTopic</span></code>. When a
|
|
1483
|
-
<code class="docutils literal"><span class="pre">Filter</span></code> is specified, only messages matching the <code class="docutils literal"><span class="pre">Filter</span></code> appear in
|
|
1484
|
-
the queue.</p>
|
|
1485
|
-
<p class="last">By default, there is no filter and all messages from the
|
|
1486
|
-
<code class="docutils literal"><span class="pre">UnderlyingTopic</span></code> are presented in the queue.</p>
|
|
1487
|
-
</td>
|
|
1488
|
-
</tr>
|
|
1489
|
-
<tr class="row-odd"><td><code class="docutils literal"><span class="pre">RecoveryPoint</span></code></td>
|
|
1490
|
-
<td><p class="first">This option allows you to specify the point at which AMPS begins
|
|
1491
|
-
reviewing the transaction log to recover the state of the queue when
|
|
1492
|
-
AMPS restarts and there is no existing information about the state of
|
|
1493
|
-
the queue. By default, AMPS reviews the full log to determine the
|
|
1494
|
-
contents and state of the queue.</p>
|
|
1495
|
-
<p>If AMPS has a record of the last point in the transaction log at which
|
|
1496
|
-
all previous messages are acknowledged (stored in the <code class="docutils literal"><span class="pre">queues.ack</span></code>
|
|
1497
|
-
file), and the recovery point specified in the configuration file has
|
|
1498
|
-
not changed, AMPS will recover from that point rather than the
|
|
1499
|
-
configured <code class="docutils literal"><span class="pre">RecoveryPoint</span></code>, since using the cached information will
|
|
1500
|
-
reduce recovery time.</p>
|
|
1501
|
-
<p>The <code class="docutils literal"><span class="pre">RecoveryPoint</span></code> can be one of the following:</p>
|
|
1502
|
-
<ul class="simple">
|
|
1503
|
-
<li><code class="docutils literal"><span class="pre">epoch</span></code> - Recovery begins at the beginning of the transaction log</li>
|
|
1504
|
-
<li><code class="docutils literal"><span class="pre">now</span></code> - Recovery begins at the time AMPS starts queue recovery,
|
|
1505
|
-
so only new messages are added to the queue</li>
|
|
1506
|
-
<li><code class="docutils literal"><span class="pre">creation</span></code> - Recovery begins at the time the queue was created</li>
|
|
1507
|
-
<li>AMPS bookmark - When an AMPS bookmark is provided, AMPS starts
|
|
1508
|
-
recovery at the specified bookmark.</li>
|
|
1509
|
-
<li>ISO-8601 timestamp - When a timestamp is provided, AMPS starts
|
|
1510
|
-
recovery at the specified timestamp. The timestamp must be
|
|
1511
|
-
provided in the format AMPS uses for timestamp bookmarks.</li>
|
|
1512
|
-
</ul>
|
|
1513
|
-
<p class="last">Default: <code class="docutils literal"><span class="pre">epoch</span></code></p>
|
|
1514
|
-
</td>
|
|
1515
|
-
</tr>
|
|
1516
|
-
<tr class="row-even"><td><code class="docutils literal"><span class="pre">FairnessModel</span></code></td>
|
|
1517
|
-
<td><p class="first">AMPS provides different methods to distribute messages across active
|
|
1518
|
-
subscriptions:</p>
|
|
1519
|
-
<ul class="simple">
|
|
1520
|
-
<li><code class="docutils literal"><span class="pre">fast</span></code> - AMPS delivers to the first subscription found that can
|
|
1521
|
-
process the message</li>
|
|
1522
|
-
<li><code class="docutils literal"><span class="pre">round-robin</span></code> - AMPS distributes to the next subscription found
|
|
1523
|
-
that can process the message</li>
|
|
1524
|
-
<li><code class="docutils literal"><span class="pre">proportional</span></code> - AMPS delivers to the subscription with the
|
|
1525
|
-
lowest ratio of active messages to available backlog</li>
|
|
1526
|
-
</ul>
|
|
1527
|
-
<p>Each instance of AMPS independently manages the fairness model for
|
|
1528
|
-
subscriptions on that instance. Fairness model information is not
|
|
1529
|
-
replicated across instances.</p>
|
|
1530
|
-
<p class="last">Default: <code class="docutils literal"><span class="pre">proportional</span></code> for <code class="docutils literal"><span class="pre">at-least-once</span></code> queues, <code class="docutils literal"><span class="pre">round-robin</span></code>
|
|
1531
|
-
(the only valid delivery model) for <code class="docutils literal"><span class="pre">at-most-once</span></code> queues</p>
|
|
1532
|
-
</td>
|
|
1533
|
-
</tr>
|
|
1534
|
-
<tr class="row-odd"><td><code class="docutils literal"><span class="pre">Leasing</span></code></td>
|
|
1535
|
-
<td><p class="first">Ownership model for leased messages. AMPS supports the following models:</p>
|
|
1536
|
-
<ul class="simple">
|
|
1537
|
-
<li><code class="docutils literal"><span class="pre">strict</span></code> - AMPS allows a client to acknowledge (<code class="docutils literal"><span class="pre">sow_delete</span></code>)
|
|
1538
|
-
only messages that are leased to the client or currently unleased.
|
|
1539
|
-
If a client acknowledges a message leased to another client, there is
|
|
1540
|
-
no effect.</li>
|
|
1541
|
-
<li><code class="docutils literal"><span class="pre">sublet</span></code> - AMPS allows any client to acknowledge any message,
|
|
1542
|
-
regardless of whether another client has a lease on the message.</li>
|
|
1543
|
-
</ul>
|
|
1544
|
-
<p class="last">Default: <code class="docutils literal"><span class="pre">sublet</span></code></p>
|
|
1545
|
-
</td>
|
|
1546
|
-
</tr>
|
|
1547
|
-
<tr class="row-even"><td><code class="docutils literal"><span class="pre">MaxDeliveries</span></code></td>
|
|
1548
|
-
<td><p class="first">Specifies an upper bound to the number of times AMPS may deliver a queue
|
|
1549
|
-
message before automatically expiring it. For example, if AMPS delivers
|
|
1550
|
-
a message twice and <code class="docutils literal"><span class="pre">MaxDeliveries</span></code> is set to <code class="docutils literal"><span class="pre">2</span></code>, the message will
|
|
1551
|
-
be expired if the subscriber disconnects or unsubscribes before
|
|
1552
|
-
acknowledging it.</p>
|
|
1553
|
-
<p>This counter is reset if the server restarts and the counter is not
|
|
1554
|
-
replicated to other instances.</p>
|
|
1555
|
-
<p class="last">Default: no maximum (<code class="docutils literal"><span class="pre">0</span></code>).</p>
|
|
1556
|
-
</td>
|
|
1557
|
-
</tr>
|
|
1558
|
-
<tr class="row-odd"><td><code class="docutils literal"><span class="pre">MaxCancels</span></code></td>
|
|
1559
|
-
<td><p class="first">Specifies a limit to the number of times a subscriber may cancel a lease
|
|
1560
|
-
on a message before it is expired. For example, if a message is canceled
|
|
1561
|
-
for the second time and <code class="docutils literal"><span class="pre">MaxCancels</span></code> is set to 2, AMPS automatically
|
|
1562
|
-
expires the message instead of returning it to the message queue.</p>
|
|
1563
|
-
<p>This counter is reset if the server restarts and the counter is not
|
|
1564
|
-
replicated to other instances.</p>
|
|
1565
|
-
<p class="last">Default: no maximum (<code class="docutils literal"><span class="pre">0</span></code>).</p>
|
|
1566
|
-
</td>
|
|
1567
|
-
</tr>
|
|
1568
|
-
<tr class="row-even"><td><code class="docutils literal"><span class="pre">Priority</span></code></td>
|
|
1569
|
-
<td><p class="first">Specifies the order in which messages will be distributed from the
|
|
1570
|
-
queue. When present, this element constructs a value that specifies
|
|
1571
|
-
the priority for messages in the queue. Higher priority messages are
|
|
1572
|
-
delivered first, regardless of the order in which messages have been
|
|
1573
|
-
published to the queue.</p>
|
|
1574
|
-
<p>The contents of the element can be either the name of a field in the
|
|
1575
|
-
message or an AMPS expression. Either way, the result is treated as an
|
|
1576
|
-
<code class="docutils literal"><span class="pre">unsigned</span> <span class="pre">long</span></code> value.</p>
|
|
1577
|
-
<p>For example, to order message delivery based on the <code class="docutils literal"><span class="pre">/priority</span></code> field
|
|
1578
|
-
of the message, specify the following element:</p>
|
|
1579
|
-
<div class="highlight-xml"><div class="highlight"><pre><span></span><span class="nt"><Priority></span>/priority<span class="nt"></Priority></span>
|
|
1580
|
-
</pre></div>
|
|
1581
|
-
</div>
|
|
1582
|
-
<p>To order message delivery based on the product of the <code class="docutils literal"><span class="pre">/price</span></code> field
|
|
1583
|
-
and the <code class="docutils literal"><span class="pre">/quantity</span></code> field in the message, specify the following
|
|
1584
|
-
element:</p>
|
|
1585
|
-
<div class="highlight-xml"><div class="highlight"><pre><span></span><span class="nt"><Priority></span>/price * /qty<span class="nt"></Priority></span>
|
|
1586
|
-
</pre></div>
|
|
1587
|
-
</div>
|
|
1588
|
-
<p>Default: there is no default for this value. When not provided, the
|
|
1589
|
-
delivery order is the order in which messages were processed by this
|
|
1590
|
-
instance of AMPS.</p>
|
|
1591
|
-
<p class="last"><em>This option cannot be specified on a queue if</em> <code class="docutils literal"><span class="pre">BarrierExpression</span></code>
|
|
1592
|
-
or <code class="docutils literal"><span class="pre">TargetQueueDepth</span></code> is specified.</p>
|
|
1593
|
-
</td>
|
|
1594
|
-
</tr>
|
|
1595
|
-
<tr class="row-odd"><td><code class="docutils literal"><span class="pre">BarrierExpression</span></code></td>
|
|
1596
|
-
<td><p class="first">Specifies the filter used to identify a barrier message
|
|
1597
|
-
(synchronization point) for this queue. When a message matches
|
|
1598
|
-
this expression, it will be delivered to <em>all</em> current subscribers
|
|
1599
|
-
on the queue when every previous message in the queue has been
|
|
1600
|
-
acknowledged. This provides a simple, reliable way to synchronize
|
|
1601
|
-
workers.</p>
|
|
1602
|
-
<div class="highlight-xml"><div class="highlight"><pre><span></span><span class="nt"><BarrierExpression></span>/isSyncPoint IS NOT NULL<span class="nt"></BarrierExpression></span>
|
|
1603
|
-
</pre></div>
|
|
1604
|
-
</div>
|
|
1605
|
-
<p>The <code class="docutils literal"><span class="pre">BarrierExpression</span></code> filter is evaluated when AMPS adds the
|
|
1606
|
-
message to the in-memory state of the queue, and is not re-evaluated
|
|
1607
|
-
(unless the in-memory state of the queue is rebuilt after an instance
|
|
1608
|
-
restart).</p>
|
|
1609
|
-
<p>Default: there is no default for this value. When not provided, no
|
|
1610
|
-
messages are considered to be barrier messages</p>
|
|
1611
|
-
<p class="last"><em>This option cannot be specified on a queue if</em> <code class="docutils literal"><span class="pre">Priority</span></code>
|
|
1612
|
-
or <code class="docutils literal"><span class="pre">TargetQueueDepth</span></code> is specified.</p>
|
|
1613
|
-
</td>
|
|
1614
|
-
</tr>
|
|
1615
|
-
<tr class="row-even"><td><code class="docutils literal"><span class="pre">DeferredAckExpiration</span></code></td>
|
|
1616
|
-
<td><p class="first">Specifies the amount of time for AMPS to retain information about an
|
|
1617
|
-
acknowledgment (<code class="docutils literal"><span class="pre">sow_delete</span></code>) message received when the corresponding
|
|
1618
|
-
message is not in the queue. This can occur during failover, when
|
|
1619
|
-
messages are received over replication, or in cases where an application
|
|
1620
|
-
that uses a publish store has been offline for an extended period of
|
|
1621
|
-
time.</p>
|
|
1622
|
-
<p>This element is configured as an interval, for example, <code class="docutils literal"><span class="pre">15m</span></code> or
|
|
1623
|
-
<code class="docutils literal"><span class="pre">2h</span></code>.</p>
|
|
1624
|
-
<p>The default value is generally recommended. However, in cases where
|
|
1625
|
-
an instance may receive large volumes of acknowledgments for messages
|
|
1626
|
-
that are not currently in the queue, and are not expected to arrive,
|
|
1627
|
-
setting this to a lower value may somewhat reduce the memory
|
|
1628
|
-
required for managing these acknowledgments.</p>
|
|
1629
|
-
<p class="last">Default: <code class="docutils literal"><span class="pre">1d</span></code></p>
|
|
1630
|
-
</td>
|
|
1631
|
-
</tr>
|
|
1632
|
-
<tr class="row-odd"><td><code class="docutils literal"><span class="pre">FileBackedMetadata</span></code></td>
|
|
1633
|
-
<td><p class="first">Specifies whether AMPS should persist metadata about the queue in the
|
|
1634
|
-
journal directory. This could reduce the active memory footprint of
|
|
1635
|
-
an AMPS instance in cases where a queue has a large number of messages,
|
|
1636
|
-
but it is not being actively consumed. In cases where the queue has a
|
|
1637
|
-
large number of unacknowledged messages when AMPS is restarted, this
|
|
1638
|
-
may also improve recovery time.</p>
|
|
1639
|
-
<p>This option can be unset or set to a value of <code class="docutils literal"><span class="pre">enabled</span></code>.</p>
|
|
1640
|
-
<p class="last">Default: unset, which indicates that queue metadata will not be
|
|
1641
|
-
persisted</p>
|
|
1642
|
-
</td>
|
|
1643
|
-
</tr>
|
|
1644
|
-
</tbody>
|
|
1645
|
-
</table>
|
|
1646
|
-
<p><em>Queue configuration elements</em></p>
|
|
1647
|
-
<p>When a queue is defined as a <code class="docutils literal"><span class="pre">GroupLocalQueue</span></code>, the following configuration item must be provided:</p>
|
|
1648
|
-
<table border="1" class="docutils">
|
|
1649
|
-
<colgroup>
|
|
1650
|
-
<col width="30%" />
|
|
1651
|
-
<col width="70%" />
|
|
1652
|
-
</colgroup>
|
|
1653
|
-
<thead valign="bottom">
|
|
1654
|
-
<tr class="row-odd"><th class="head"><strong>Element</strong></th>
|
|
1655
|
-
<th class="head"><strong>Description</strong></th>
|
|
1656
|
-
</tr>
|
|
1657
|
-
</thead>
|
|
1658
|
-
<tbody valign="top">
|
|
1659
|
-
<tr class="row-even"><td><div class="req first last docutils container">
|
|
1660
|
-
InitialOwner</div>
|
|
1661
|
-
</td>
|
|
1662
|
-
<td><p class="first">For a group local queue, provides the instance <code class="docutils literal"><span class="pre">Name</span></code> of the instance
|
|
1663
|
-
that will own the message when the message is first published.</p>
|
|
1664
|
-
<p>This configuration element is required for a <code class="docutils literal"><span class="pre">GroupLocalQueue</span></code>. It is
|
|
1665
|
-
not supported for fully distributed queues or for local only queues
|
|
1666
|
-
(that is, a queue defined with the <code class="docutils literal"><span class="pre">Queue</span></code> or <code class="docutils literal"><span class="pre">LocalQueue</span></code> element).</p>
|
|
1667
|
-
<p>All instances in a replicated system that define this queue must
|
|
1668
|
-
define the same <code class="docutils literal"><span class="pre">InitialOwner</span></code>.</p>
|
|
1669
|
-
<p>Notice that AMPS does not validate that the <code class="docutils literal"><span class="pre">InitialOwner</span></code> exists
|
|
1670
|
-
and is reachable through replication from the current instance.
|
|
1671
|
-
When configuring a <code class="docutils literal"><span class="pre">GroupLocalQueue</span></code>, take care to validate the
|
|
1672
|
-
name and ensure that a replication path exists to and from that
|
|
1673
|
-
instance.</p>
|
|
1674
|
-
<p class="last">This element is required. There is no default for this element.</p>
|
|
1675
|
-
</td>
|
|
1676
|
-
</tr>
|
|
1677
|
-
</tbody>
|
|
1678
|
-
</table>
|
|
1679
|
-
<p>When a queue is defined as a <code class="docutils literal"><span class="pre">GroupLocalQueue</span></code>, the following optional configuration element may
|
|
1680
|
-
be provided.</p>
|
|
1681
|
-
<table border="1" class="docutils">
|
|
1682
|
-
<colgroup>
|
|
1683
|
-
<col width="30%" />
|
|
1684
|
-
<col width="70%" />
|
|
1685
|
-
</colgroup>
|
|
1686
|
-
<thead valign="bottom">
|
|
1687
|
-
<tr class="row-odd"><th class="head"><strong>Element</strong></th>
|
|
1688
|
-
<th class="head"><strong>Description</strong></th>
|
|
1689
|
-
</tr>
|
|
1690
|
-
</thead>
|
|
1691
|
-
<tbody valign="top">
|
|
1692
|
-
<tr class="row-even"><td><code class="docutils literal"><span class="pre">GroupLocalQueueDomain</span></code></td>
|
|
1693
|
-
<td><p class="first">For a group local queue, provides a way to allow a queue that is hosted
|
|
1694
|
-
in instances that are in different replication groups to be identified
|
|
1695
|
-
as the same queue and function as a single distributed queue.</p>
|
|
1696
|
-
<p>By default, a <code class="docutils literal"><span class="pre">GroupLocalQueue</span></code> is identified using the queue
|
|
1697
|
-
<code class="docutils literal"><span class="pre">Name</span></code> and the <code class="docutils literal"><span class="pre">Group</span></code> of the AMPS instance that hosts the queue.
|
|
1698
|
-
Queues with the same identity are considered to be instances of the
|
|
1699
|
-
same distributed queue.</p>
|
|
1700
|
-
<p>When this element is defined, the <code class="docutils literal"><span class="pre">GroupLocalQueue</span></code> is identified
|
|
1701
|
-
using the queue <code class="docutils literal"><span class="pre">Name</span></code> and the <code class="docutils literal"><span class="pre">GroupLocalQueueDomain</span></code> rather than
|
|
1702
|
-
the <code class="docutils literal"><span class="pre">Group</span></code> of the instance that hosts the queue.</p>
|
|
1703
|
-
<p class="last">This element was introduced in version 5.3.4. Previous versions do
|
|
1704
|
-
not consider the <code class="docutils literal"><span class="pre">Group</span></code> of the instance or the
|
|
1705
|
-
<code class="docutils literal"><span class="pre">GroupLocalQueueDomain</span></code>: instances of the queue with the same
|
|
1706
|
-
<code class="docutils literal"><span class="pre">Name</span></code> are considered to be the same distributed queue in those
|
|
1707
|
-
versions regardless of the <code class="docutils literal"><span class="pre">Group</span></code> that hosts the queue.</p>
|
|
1708
|
-
</td>
|
|
1709
|
-
</tr>
|
|
1710
|
-
</tbody>
|
|
1711
|
-
</table>
|
|
1712
|
-
<p><em>Additional configuration elements for GroupLocalQueue</em></p>
|
|
1713
|
-
<p>The following configuration snippet shows one way to configure a queue.</p>
|
|
1714
|
-
<div class="highlight-xml"><div class="highlight"><pre><span></span><span class="c"><!-- Notice that the topics to use for the queue (ORDERS_.*) must be</span>
|
|
1715
|
-
<span class="c"> recorded in a transaction log. --></span>
|
|
1716
|
-
<span class="nt"><SOW></span>
|
|
1717
|
-
<span class="nt"><Queue></span>
|
|
1718
|
-
<span class="nt"><Name></span>MQ<span class="nt"></Name></span>
|
|
1719
|
-
<span class="nt"><MessageType></span>json<span class="nt"></MessageType></span>
|
|
1720
|
-
<span class="nt"><UnderlyingTopic></span>ORDERS_.*<span class="nt"></UnderlyingTopic></span>
|
|
1721
|
-
<span class="nt"><DefaultPublishTarget></span>ORDERS_DIRECT<span class="nt"></DefaultPublishTarget></span>
|
|
1722
|
-
<span class="nt"><LeasePeriod></span>60s<span class="nt"></LeasePeriod></span>
|
|
1723
|
-
<span class="nt"><Expiration></span>1d<span class="nt"></Expiration></span>
|
|
1724
|
-
<span class="nt"><MaxBacklog></span>3<span class="nt"></MaxBacklog></span>
|
|
1725
|
-
<span class="nt"></Queue></span>
|
|
1726
|
-
<span class="nt"></SOW></span>
|
|
1727
|
-
</pre></div>
|
|
1728
|
-
</div>
|
|
1729
|
-
<p>The following configuration snippet shows the configuration for a
|
|
1730
|
-
<code class="docutils literal"><span class="pre">GroupLocalQueue</span></code>. Any instance of the queue in the group
|
|
1731
|
-
named <code class="docutils literal"><span class="pre">CONSUME_INSTANCES</span></code> or that uses the <code class="docutils literal"><span class="pre">GroupLocalQueueDomain</span></code>
|
|
1732
|
-
tag of <code class="docutils literal"><span class="pre">CONSUME_INSTANCES</span></code> will be treated as an instance
|
|
1733
|
-
of the same queue.</p>
|
|
1734
|
-
<div class="highlight-xml"><div class="highlight"><pre><span></span><span class="nt"><SOW></span>
|
|
1735
|
-
<span class="nt"><GroupLocalQueue></span>
|
|
1736
|
-
<span class="nt"><Name></span>GroupQueue<span class="nt"></Name></span>
|
|
1737
|
-
<span class="nt"><MessageType></span>json<span class="nt"></MessageType></span>
|
|
1738
|
-
<span class="nt"><UnderlyingTopic></span>ORDERS_.*<span class="nt"></UnderlyingTopic></span>
|
|
1739
|
-
<span class="nt"><DefaultPublishTarget></span>ORDERS_DIRECT<span class="nt"></DefaultPublishTarget></span>
|
|
1740
|
-
<span class="nt"><GroupLocalQueueDomain></span>CONSUME_INSTANCES<span class="nt"></GroupLocalQueueDomain></span>
|
|
1741
|
-
<span class="nt"></GroupLocalQueue></span>
|
|
1742
|
-
<span class="nt"></SOW></span>
|
|
1743
|
-
</pre></div>
|
|
1744
|
-
</div>
|
|
1745
|
-
</div>
|
|
1746
|
-
</div>
|
|
1747
|
-
|
|
1748
|
-
|
|
1749
|
-
</div>
|
|
1750
|
-
</div>
|
|
1751
|
-
</div>
|
|
1752
|
-
<div class="clearer"></div>
|
|
1753
|
-
</div>
|
|
1754
|
-
<div class="footer">
|
|
1755
|
-
©2023 60East Technologies, Inc. (version develop).
|
|
1756
|
-
|
|
1757
|
-
|
|
|
1758
|
-
Powered by <a href="http://sphinx-doc.org/">Sphinx 1.5.3</a>
|
|
1759
|
-
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.10</a>
|
|
1760
|
-
|
|
1761
|
-
</div>
|
|
1762
|
-
|
|
1763
|
-
|
|
1764
|
-
|
|
1765
|
-
|
|
1766
|
-
</body>
|
|
1767
|
-
</html>
|