-
Notifications
You must be signed in to change notification settings - Fork 3.3k
[ServiceBus] Track2 Preview1 #9937
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
147 commits
Select commit
Hold shift + click to select a range
344af7b
draft track2 sync client implementation
yunhaoling 42d438b
add retry and backoff for send and receive
yunhaoling 4b3b422
improve retry and implement iterator for receiver
yunhaoling 55e1969
improve sync implementation
yunhaoling e0389d4
draft ClientBaseAsync and SenderClientAsync implementation
yunhaoling 5661395
improve structure and implement async receiver client
yunhaoling dc4e247
add receiver client file
yunhaoling c905862
sync version constructor improvement
yunhaoling 4abe791
add sync samples
yunhaoling d2dc6e0
async implementation
yunhaoling ecf09ff
add async sample
yunhaoling 7916c79
refactor mixin and implement receiving deferred message
yunhaoling 1f6713a
add receiving defer message sample
yunhaoling 7d6a0dd
adjust method position
yunhaoling a1c291a
optimize async and implement receive deferred message
yunhaoling 13b79a5
adjust backoff method name
yunhaoling 6d20710
Update readme for track 2 preview 1 release
KieranBrantnerMagee d197d34
add sync client docstring
yunhaoling f1964b4
Convert to the modernized README structure.
KieranBrantnerMagee 760edd0
async client docstring
yunhaoling d0180ec
Remove en-us localized links
KieranBrantnerMagee f6b5bf5
Remove 3.4 from acceptable python version list
KieranBrantnerMagee 3a70ce7
introduce new top level servicebus client, rename old client design, …
yunhaoling 2e4264e
split message types
yunhaoling c5a5194
Merge from upstream servicebus-track2
KieranBrantnerMagee 0fcff0a
Add python 3.8 to acceptable versions
KieranBrantnerMagee beacbd4
Merge pull request #6 from KieranBrantnerMagee/kibrantn/servicebus/tr…
yunhaoling af7f669
Fix broken changelog URL markdown
KieranBrantnerMagee 7c003c3
update retry part
yunhaoling 7879e24
Merge branch 'servicebus-track2' of https://github.com/yunhaoling/azu…
yunhaoling dd8734c
add mgmt retry and update get_xxx factory methods
yunhaoling 020ce62
add renew_lock back to deferred message
yunhaoling f9e7ac6
remove track1 client/sender/receiver
yunhaoling b287784
fix bug in sample code and logging
yunhaoling 52392bf
remove t1 sample code
yunhaoling 96b49a9
fix pylint
yunhaoling 6c11fa5
update __init__.py to relative reference
yunhaoling 627918b
add new docstring sample
yunhaoling f72fcba
update docstring for the code
yunhaoling 84d6f0f
move session id to message
yunhaoling 6510472
Merge from yunhaoling upstream servicebus-track2
KieranBrantnerMagee 0e46a15
bring back the hotfix for ReceiveAndDetele
yunhaoling ace1e62
send batch feature
yunhaoling b17dbcc
add peek back and fix pylint
yunhaoling c15dc5c
Merge from upstream yunhaoling servicebus-track2
KieranBrantnerMagee c596d94
connection sharing in top level client
yunhaoling 52ca812
open handler in the mgmt request
yunhaoling 4aa091f
merge deferred message into received message
yunhaoling f72f8b9
draft schedule and cancel implementation
yunhaoling 4709067
Initial test conversion work, port sync tests, note failures with TOD…
KieranBrantnerMagee ef328c8
deferredmessage -> receivedmessage
KieranBrantnerMagee f31f14c
update common to _common and update module import accordingly
yunhaoling 1f4e582
update according to reviews
yunhaoling f038d62
update code according to comments
yunhaoling ad83053
session receive support
yunhaoling c89061e
Remove spurious comments into a formal doc, clean up tests and import…
KieranBrantnerMagee 73f39bc
add ServiceBusSession support
yunhaoling 2634e9e
Adjust with exception statements to the new and improved throw-at-cli…
KieranBrantnerMagee 134d67a
reenable batching
KieranBrantnerMagee 3a2f6bb
Make doc review comments to readme; adding links for key concepts, re…
KieranBrantnerMagee 23e7c81
improve connection sharing for entity-specific conn str, improve sess…
yunhaoling e425b31
add retry for iterator
yunhaoling 65e5393
Merge from upstream servicebus-track2
KieranBrantnerMagee e4fc6ee
Make PR comments.
KieranBrantnerMagee 12ebbd5
specify error type when entity mismatch and specify auth error in cre…
yunhaoling 4b74061
Merge from servicebus-track2 upstream
KieranBrantnerMagee 8ba7f6c
Adjust code post-merge to accomodate new path names and package struc…
KieranBrantnerMagee d83155b
Merge pull request #9 from KieranBrantnerMagee/kibrantn/servicebus/do…
yunhaoling 2b9ded6
Fix variable naming bugs,
KieranBrantnerMagee 3925cda
fix bug when resetting the error
yunhaoling b04b691
idle timeout fix
yunhaoling d9034b4
fix message settled not being set properly
yunhaoling c831db7
fix bug in session and improve error handling
yunhaoling 0434c6c
Merge branch 'servicebus-track2' of https://github.com/yunhaoling/azu…
yunhaoling c23d57c
add session_id into message constructor
yunhaoling 6431370
revert to separate connection
yunhaoling 9581c8b
fix several bugs in session implementation and error handling
yunhaoling 1da27af
Merge from upstream servicebus-track2
KieranBrantnerMagee d5cb254
add session expiration check
yunhaoling 1c75e51
Adjust tests after latest T2 changes, including making a public acces…
KieranBrantnerMagee 6e1bdb4
add comment for session locked until property
yunhaoling 9a2ef05
preparer resource caching framework (#10126)
KieranBrantnerMagee 7321fc4
Enable preparers to implicitly handle async tests (#10394)
KieranBrantnerMagee d1d55f5
add prefech back
yunhaoling 0b51dea
fix check session expiry error and align the behavior of prefetch wit…
yunhaoling 4f24446
fix bug in async receiver close
yunhaoling fd2c7f0
begin converting async queue tests to T2
KieranBrantnerMagee 6ad6b64
Add reconnect to async base handler
KieranBrantnerMagee 36085ec
Merge from upstream
KieranBrantnerMagee ab59524
remove test skip on now-passing test.
KieranBrantnerMagee 04a4667
move _open from get_receiver/sender into contextmgr
yunhaoling ea8f6c8
Tweak test notes
KieranBrantnerMagee 10d9b45
enable test to be cached in async queue test
KieranBrantnerMagee bed9a9e
Merge remote-tracking branch 'yunhaoling_upstream/servicebus-track2' …
KieranBrantnerMagee 014af6c
normalize caching preparers, and change session->session_id
KieranBrantnerMagee 5697418
update samples and code snippets
yunhaoling a02fb92
Fix async tests (batch addition, running/open naming) and enable logg…
KieranBrantnerMagee 83663ee
fix bug when a handler dont get closed if it failed to open
yunhaoling c7d67e6
Merge remote-tracking branch 'yunhaoling_upstream/servicebus-track2' …
KieranBrantnerMagee 22bd34e
continue removing todos as more tests become functional.
KieranBrantnerMagee 9d54370
orphan message error type changed from ValueError to MessageSettleFailed
yunhaoling b000f94
Merge remote-tracking branch 'yunhaoling_upstream/servicebus-track2' …
KieranBrantnerMagee cbfa01f
Update exception catches with latest changes. Use open_with_retry ra…
KieranBrantnerMagee 51cb47b
Move utility methods into separate file.
KieranBrantnerMagee 6accc80
PR comments
KieranBrantnerMagee a109f4a
Merge pull request #10 from KieranBrantnerMagee/kibrantn/servicebus/t…
yunhaoling 1deb525
merge mono master
yunhaoling 3e5509d
Fix small lingering bugs in stress_test,
KieranBrantnerMagee ab85245
improve stress test result printout
KieranBrantnerMagee 187a3ad
Merge pull request #11 from KieranBrantnerMagee/kibrantn/servicebus/t…
yunhaoling dd49a7b
fix ci bug
yunhaoling 3b9b86f
Merge branch 'servicebus-track2' of https://github.com/yunhaoling/azu…
yunhaoling 82f38f8
fix syntax error
yunhaoling 82fe178
bump version to v7 and fix syntax error in py3.5
yunhaoling f40a369
Adjust version to 7
KieranBrantnerMagee b787620
Merge pull request #12 from KieranBrantnerMagee/kibrantn/servicebus/t…
yunhaoling c422e34
merge master update
yunhaoling d63128b
Merge branch 'servicebus-track2' of https://github.com/yunhaoling/azu…
yunhaoling c1c2a13
Add additional detail to pending-features list in changelog
KieranBrantnerMagee 6833bde
Adjust sample readme product name
KieranBrantnerMagee bb59d43
Merge Kieran doc improvements
yunhaoling 924025c
add utc suffix to time relevant variables and parameters, fix pylint …
yunhaoling 49b7c2e
change MessageSettleFailed to MessageLockExpired where appropriate
KieranBrantnerMagee 484b960
add reson for dead_letter according to service spec
yunhaoling 04aec5a
constify strings
yunhaoling 99e97ba
more string constifying
yunhaoling 24514a3
add ivar docstring and remove async message lock token
yunhaoling e868b06
fix bug in kwargs and improve from_connection_string implementation
yunhaoling 01e13cc
add docstring, update async_message to be private module
yunhaoling 6b32bd2
Merge branch 'servicebus-track2' of https://github.com/yunhaoling/azu…
yunhaoling fa9aab7
convert tests to timezone aware datetimes
KieranBrantnerMagee 6e46c3d
Merge remote-tracking branch 'yunhaoling_upstream/servicebus-track2' …
KieranBrantnerMagee 4a1bc6f
make control_client module private
yunhaoling 2a9feb7
remove aio module duplicates
yunhaoling e6d86b8
rename timeout to max_wait_time in receive method
yunhaoling c870c3f
Make test timezone usage be py27 compatible via consuming the util ut…
KieranBrantnerMagee 33a65b4
update control_client to _contral_client
yunhaoling 7719941
Merge branch 'servicebus-track2' of https://github.com/yunhaoling/azu…
KieranBrantnerMagee b13a358
rename message_timeout to timeout in send to align with EH
yunhaoling 8ff0315
Merge branch 'servicebus-track2' of https://github.com/yunhaoling/azu…
yunhaoling 333c70d
make queue_name and topic_name docstrings more explicit about collisi…
KieranBrantnerMagee d27a8c6
Message expiration and Receiver expiration are subtlely different con…
KieranBrantnerMagee bd921cb
Readd buildtargetingstring that was removed in a merge
KieranBrantnerMagee 3eb79fb
set logging_enable=False by default for tests to not mess up OSX
KieranBrantnerMagee 1dee5d4
update migration_guide
yunhaoling ad671a5
remove additional dev_requirement from azure-mgmt-servicebus
KieranBrantnerMagee f0ecf26
Merge branch 'servicebus-track2' of https://github.com/yunhaoling/azu…
KieranBrantnerMagee File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,2 +1,2 @@ | ||
| -e ../../../tools/azure-sdk-tools | ||
| -e ../../../tools/azure-devtools | ||
| -e ../../../tools/azure-devtools |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,78 +1,197 @@ | ||
| # Microsoft Azure Service Bus SDK for Python | ||
| # Azure Service Bus client library for Python | ||
|
|
||
| This is the Microsoft Azure Service Bus Client Library. | ||
| This package has been tested with Python 2.7, 3.4, 3.5, 3.6 and 3.7. | ||
| Azure Service Bus is a high performance cloud-managed messaging service for providing real-time and fault-tolerant communication between distributed senders and receivers. | ||
|
|
||
| Microsoft Azure Service Bus supports a set of cloud-based, message-oriented middleware technologies including reliable message queuing and durable publish/subscribe messaging. | ||
| Service Bus provides multiple mechanisms for asynchronous highly reliable communication, such as structured first-in-first-out messaging, | ||
| publish/subscribe capabilities, and the ability to easily scale as your needs grow. | ||
|
|
||
| * [SDK source code](https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/servicebus/azure-servicebus) | ||
| * [SDK reference documentation](https://docs.microsoft.com/python/api/overview/azure/servicebus/client?view=azure-python) | ||
| * [Service Bus documentation](https://docs.microsoft.com/azure/service-bus-messaging/) | ||
| Use the Service Bus client library for Python to communicate between applications and services and implement asynchronous messaging patterns. | ||
|
|
||
| * Create Service Bus namespaces, queues, topics, and subscriptions, and modify their settings | ||
| * Send and receive messages within your Service Bus channels. | ||
| * Utilize message locks, sessions, and dead letter functionality to implement complex messaging patterns. | ||
|
|
||
| ## What's new in v0.50.2? | ||
| [Source code](./) | [Package (PyPi)][pypi] | [API reference documentation][api_docs] | [Product documentation][product_docs] | [Samples](./samples) | [Changelog](./CHANGELOG.md) | ||
|
|
||
| As of version 0.50.2 a new AMQP-based API is available for sending and receiving messages. This update involves **breaking changes**. | ||
| Please read [Migration from 0.21.1 to 0.50.2](#migration-from-0211-to-0502) to determine if upgrading is | ||
| right for you at this time. | ||
| ## Getting started | ||
|
|
||
| The new AMQP-based API offers improved message passing reliability, performance and expanded feature support going forward. | ||
| The new API also offers support for asynchronous operations (based on asyncio) for sending, receiving and handling messages. | ||
| ### Install the package | ||
|
|
||
| For documentation on the legacy HTTP-based operations please see [Using HTTP-based operations of the legacy API](https://docs.microsoft.com/python/api/overview/azure/servicebus?view=azure-python#using-http-based-operations-of-the-legacy-api). | ||
| Install the Azure Service Bus client library for Python with [pip][pip]: | ||
|
|
||
| ```Bash | ||
| pip install azure-servicebus --pre | ||
| ``` | ||
|
|
||
| ### Prerequisites: | ||
| To use this package, you must have: | ||
| * Azure subscription - [Create a free account][azure_sub] | ||
| * Azure Service Bus - [Namespace and management credentials][service_bus_namespace] | ||
| * Python 2.7, 3.5, 3.6, 3.7 or 3.8 - [Install Python][python] | ||
|
|
||
|
|
||
| If you need an Azure service bus namespace, you can create it via the [Azure Portal][azure_namespace_creation]. | ||
| If you do not wish to use the graphical portal UI, you can use the Azure CLI via [Cloud Shell][cloud_shell_bash], or Azure CLI run locally, to create one with this Azure CLI command: | ||
|
|
||
| ```Bash | ||
| az servicebus namespace create --resource-group <resource-group-name> --name <servicebus-namespace-name> --location <servicebus-namespace-location> | ||
| ``` | ||
|
|
||
| ### Authenticate the client | ||
|
|
||
| Interaction with Service Bus starts with an instance of the `ServiceBusClient` class. You either need a **connection string with SAS key**, or a **namespace** and one of its **account keys** to instantiate the client object. | ||
|
|
||
| #### Get credentials | ||
|
|
||
| Use the [Azure CLI][azure_cli] snippet below to populate an environment variable with the service bus connection string (you can also find these values in the [Azure portal][azure_portal]. The snippet is formatted for the Bash shell. | ||
|
|
||
| ```Bash | ||
| RES_GROUP=<resource-group-name> | ||
| NAMESPACE_NAME=<servicebus-namespace-name> | ||
|
|
||
| export SERVICE_BUS_CONN_STR=$(az servicebus namespace authorization-rule keys list --resource-group $RES_GROUP --namespace-name $NAMESPACE_NAME --query RootManageSharedAccessKey --output tsv) | ||
| ``` | ||
|
|
||
| #### Create client | ||
|
|
||
| Once you've populated the `SERVICE_BUS_CONN_STR` environment variable, you can create the `ServiceBusClient`. | ||
|
|
||
| ```Python | ||
| from azure.servicebus import ServiceBusClient | ||
|
|
||
| import os | ||
| connstr = os.environ['SERVICE_BUS_CONN_STR'] | ||
|
|
||
| with ServiceBusClient.from_connection_string(connstr) as client: | ||
| ... | ||
| ``` | ||
|
|
||
| ## Prerequisites | ||
| Note: client can be initialized without a context manager, but must be manually closed via client.close() to not leak resources. | ||
|
|
||
| * Azure subscription - [Create a free account](https://azure.microsoft.com/free/) | ||
| * Azure Service Bus [namespace and management credentials](https://docs.microsoft.com/azure/service-bus-messaging/service-bus-create-namespace-portal) | ||
| ## Key concepts | ||
|
|
||
| Once you've initialized a `ServiceBusClient`, you can interact with the primary resource types within a Service Bus Namespace, of which multiple can exist and on which actual message transmission takes place, the namespace often serving as an application container: | ||
|
|
||
| ## Installation | ||
| * [Queue][queue_concept]: Allows for Sending and Receiving of messages, ordered first-in-first-out. Often used for point-to-point communication. | ||
|
|
||
| ```shell | ||
| pip install azure-servicebus | ||
| * [Topic][topic_concept]: As opposed to Queues, Topics are better suited to publish/subscribe scenarios. A topic can be sent to, but requires a subscription, of which there can be multiple in parallel, to consume from. | ||
|
|
||
| * [Subscription][subscription_concept]: The mechanism to consume from a Topic. Each subscription is independent, and receaves a copy of each message sent to the topic. Rules and Filters can be used to tailor which messages are received by a specific subscription. | ||
|
|
||
| For more information about these resources, see [What is Azure Service Bus?][service_bus_overview]. | ||
|
|
||
| ## Examples | ||
|
|
||
| The following sections provide several code snippets covering some of the most common Service Bus tasks, including: | ||
|
|
||
| * [Send a message to a queue](#send-to-a-queue) | ||
| * [Receive a message from a queue](#receive-from-a-queue) | ||
| * [Defer a message on receipt](#defer-a-message) | ||
|
|
||
|
|
||
| ### Send to a queue | ||
|
|
||
| This example sends a message to a queue that is assumed to already exist, created via the Azure portal or az commands. | ||
|
|
||
| ```Python | ||
| from azure.servicebus import ServiceBusClient | ||
|
|
||
| import os | ||
| connstr = os.environ['SERVICE_BUS_CONN_STR'] | ||
|
|
||
| with ServiceBusClient.from_connection_string(connstr) as client: | ||
| with client.get_queue_sender(queue_name): | ||
|
|
||
| message = Message("Single message") | ||
| queue_sender.send(message) | ||
| ``` | ||
|
|
||
| ## Migration from 0.21.1 to 0.50.2 | ||
| ### Receive from a queue | ||
|
|
||
| Major breaking changes were introduced in version 0.50.2. | ||
| The original HTTP-based API is still available in v0.50.2 - however it now exists under a new namesapce: `azure.servicebus.control_client`. | ||
| To receive from a queue, you can either perform a one-off receive via "receiver.receive()" or receive persistently as follows: | ||
|
|
||
| ### Should I upgrade? | ||
| ```Python | ||
| from azure.servicebus import ServiceBusClient | ||
|
|
||
| The new package (v0.50.2) offers no improvements in HTTP-based operations over v0.21.1. The HTTP-based API is identical except that it now | ||
| exists under a new namespace. For this reason if you only wish to use HTTP-based operations (`create_queue`, `delete_queue` etc) - there will be | ||
| no additional benefit in upgrading at this time. | ||
| import os | ||
| connstr = os.environ['SERVICE_BUS_CONN_STR'] | ||
|
|
||
| with ServiceBusClient.from_connection_string(connstr) as client: | ||
| with client.get_queue_receiver(queue_name) as receiver: | ||
| for msg in receiver: | ||
| print(str(msg)) | ||
| msg.complete() | ||
| ``` | ||
|
|
||
| ### How do I migrate my code to the new version? | ||
| ### Defer a message | ||
|
|
||
| Code written against v0.21.0 can be ported to version 0.50.2 by simply changing the import namespace: | ||
| When receiving from a queue, you have multiple actions you can take on the messages you receive. Where the prior example completes a message, | ||
| permanently removing it from the queue and marking as complete, this example demonstrates how to defer the message, sending it back to the queue | ||
| such that it must now be received via sequence number: | ||
|
|
||
| ```python | ||
| # from azure.servicebus import ServiceBusService <- This will now raise an ImportError | ||
| from azure.servicebus.control_client import ServiceBusService | ||
| ```Python | ||
| from azure.servicebus import ServiceBusClient | ||
|
|
||
| key_name = 'RootManageSharedAccessKey' # SharedAccessKeyName from Azure portal | ||
| key_value = '' # SharedAccessKey from Azure portal | ||
| sbs = ServiceBusService(service_namespace, | ||
| shared_access_key_name=key_name, | ||
| shared_access_key_value=key_value) | ||
| import os | ||
| connstr = os.environ['SERVICE_BUS_CONN_STR'] | ||
|
|
||
| with ServiceBusClient.from_connection_string(connstr) as client: | ||
| with client.get_queue_receiver(queue_name) as receiver: | ||
| for msg in receiver: | ||
| print(str(msg)) | ||
| msg.defer() | ||
| ``` | ||
|
|
||
| ## Troubleshooting | ||
|
|
||
| ### Logging | ||
|
|
||
| - Enable `azure.servicebus` logger to collect traces from the library. | ||
| - Enable `uamqp` logger to collect traces from the underlying uAMQP library. | ||
| - Enable AMQP frame level trace by setting `logging_enable=True` when creating the client. | ||
|
|
||
| ## Next steps | ||
|
|
||
| ### More sample code | ||
|
|
||
| Please find further examples in the [samples](./samples) directory demonstrating common Service Bus scenarios such as sending, receiving, and message handling. | ||
|
|
||
| # Usage | ||
| ### Additional documentation | ||
|
|
||
| For reference documentation and code snippets see [Service Bus](https://docs.microsoft.com/python/api/overview/azure/servicebus) | ||
| on docs.microsoft.com. | ||
| For more extensive documentation on the Service Bus service, see the [Service Bus DB documentation][service_bus_docs] on docs.microsoft.com. | ||
|
|
||
| ## Contributing | ||
|
|
||
| # Provide Feedback | ||
| This project welcomes contributions and suggestions. Most contributions require you to agree to a | ||
| Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us | ||
| the rights to use your contribution. For details, visit https://cla.microsoft.com. | ||
|
|
||
| If you encounter any bugs or have suggestions, please file an issue in the | ||
| [Issues](https://github.com/Azure/azure-sdk-for-python/issues) | ||
| section of the project. | ||
| When you submit a pull request, a CLA-bot will automatically determine whether you need to provide | ||
| a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the instructions | ||
| provided by the bot. You will only need to do this once across all repos using our CLA. | ||
|
|
||
| This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). | ||
| For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or | ||
| contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. | ||
|
|
||
|  | ||
| <!-- LINKS --> | ||
| [azure_cli]: https://docs.microsoft.com/cli/azure | ||
| [api_docs]: https://docs.microsoft.com/python/api/overview/azure/servicebus/client?view=azure-python | ||
| [product_docs]: https://docs.microsoft.com/azure/service-bus-messaging/ | ||
| [azure_portal]: https://portal.azure.com | ||
| [azure_sub]: https://azure.microsoft.com/free/ | ||
| [cloud_shell]: https://docs.microsoft.com/azure/cloud-shell/overview | ||
| [cloud_shell_bash]: https://shell.azure.com/bash | ||
| [pip]: https://pypi.org/project/pip/ | ||
| [pypi]: https://pypi.org/project/azure-servicebus/ | ||
| [python]: https://www.python.org/downloads/ | ||
| [venv]: https://docs.python.org/3/library/venv.html | ||
| [virtualenv]: https://virtualenv.pypa.io | ||
| [service_bus_namespace]: https://docs.microsoft.com/azure/service-bus-messaging/service-bus-create-namespace-portal | ||
| [service_bus_overview]: https://docs.microsoft.com/azure/service-bus-messaging/service-bus-messaging-overview | ||
| [queue_status_codes]: https://docs.microsoft.com/rest/api/servicebus/create-queue#response-codes | ||
| [service_bus_docs]: https://docs.microsoft.com/azure/service-bus/ | ||
| [queue_concept]: https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-messaging-overview#queues | ||
| [topic_concept]: https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-messaging-overview#topics | ||
| [subscription_concept]: https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-queues-topics-subscriptions#topics-and-subscriptions | ||
| [azure_namespace_creation]: https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-create-namespace-portal |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.