# Hands-on: Azure Service Bus ###### tags: `Workshop` `Azure Service Bus` `Python` > 本篇將使用 Azure Cloud Shell 的方式,並以 Python 為範例進行 Azure Service Bus 的資源建立教學及開發 [ToC] ## Prerequisites - Azure Subscription - 該訂閱或資源群組 Owner 或 Contributor 的權限(可在訂閱中建立所需資源) - 可建立 Service Principle,需被允許可以在 AAD 中註冊應用程式 ➜ [操作說明:使用入口網站來建立可存取資源的 Azure AD 應用程式和服務主體](https://docs.microsoft.com/zh-tw/azure/active-directory/develop/howto-create-service-principal-portal) - 如有多個訂閱要做切換可使用以下指令 ```azurecli-interactive az account set --subscription "subsctiprion name" ``` ## 1/ Service Bus Queue ### 建立 Service Bus Queue > 詳細可參考 [Use the Azure CLI to create a Service Bus namespace and a queue](https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-quickstart-cli) - 建立資源群組 ```azurecli-interactive az group create --name RG_mySB --location eastus ``` - 在剛剛建立的資源群組中建立 Service Bus 的 Namespace ```azurecli-interactive az servicebus namespace create --resource-group RG_mySB --name NSmySB --location eastus ``` - 在上步驟建立的 Namespace 下建立 Service Bus 的 queue ```azurecli-interactive az servicebus queue create --resource-group RG_mySB --namespace-name NSmySB --name QueuemySBOrders ``` - 取得上一步驟建立的 queue 的連線字串,提供給之後在應用程式中發送/接收訊息使用 ```azurecli-interactive az servicebus namespace authorization-rule keys list --resource-group RG_mySB --namespace-name NSmySB --name RootManageSharedAccessKey --query primaryConnectionString --output tsv ``` - 將上述產生的 Connection String 記錄下來 ### 發送及接收訊息 > 詳細可參考 [Send messages to and receive messages from Azure Service Bus queues (Python)](https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-python-how-to-use-queues) - 安裝 [azure-servicebus python package](https://pypi.org/project/azure-servicebus/),建議使用 virtualenv 安裝在 python 虛擬環境中 ```.sh pip install azure-servicebus ``` - 下載 Sample Code (queue) - 執行程式碼 ```.sh python queue_send_and_receive_msg.py ``` ## 2/ Service Bus Topic 及 Subsciption ### 建立所需的 Topic 及 Subscription 資源 - 設定所需變數 ```azurecli-interactive myResourceGroup=RG_mySB namespaceName=MyNameSpace$RANDOM location=eastus ``` - 建立 Namespace ```azurecli-interactive az servicebus namespace create --resource-group $myResourceGroup --name $namespaceName --location $location ``` - 建立 Topic ```azurecli-interactive az servicebus topic create --resource-group $myResourceGroup --namespace-name $namespaceName --name MyTopic ``` > **於 Azure portal 上建立:** > - 建立 Topic  > - 建立 Subscription,Namespace > + Subscription  > - 瀏覽建立過的 Subscription,Namespace > Entitie | Subscription  - 建立第一個 Subsctiption `S1`,用來訂閱上步驟建立的 Topic ```azurecli-interactive az servicebus topic subscription create --resource-group $myResourceGroup --namespace-name $namespaceName --topic-name MyTopic --name S1 ``` - 建立第二個 Subscription `S2`,訂閱同一個 Topic ```azurecli-interactive az servicebus topic subscription create --resource-group $myResourceGroup --namespace-name $namespaceName --topic-name MyTopic --name S2 ``` - 建立第三個 Subscription `S3`,訂閱同一個 Topic ```azurecli-interactive az servicebus topic subscription create --resource-group $myResourceGroup --namespace-name $namespaceName --topic-name MyTopic --name S3 ``` - 建立第四個 Subscription `Taipei` 訂閱同一個 Topic ```azurecli-interactive az servicebus topic subscription create --resource-group $myResourceGroup --namespace-name $namespaceName --topic-name MyTopic --name Taipei ``` - 建立第五個 Subscription `ALL` 訂閱同一個 Topic ```azurecli-interactive az servicebus topic subscription create --resource-group $myResourceGroup --namespace-name $namespaceName --topic-name MyTopic --name ALL ``` ### 建立 Subscription 的 filter - 建立 `S1` Subscription 的 filter:設定只要 StoreID 為 `Store1`、`Store2` 及 `Store3` 其一的店家的資訊都取得 ```azurecli-interacitve az servicebus topic subscription rule create --resource-group $myResourceGroup --namespace-name $namespaceName --topic-name MyTopic --subscription-name S1 --name MyFilter --filter-sql-expression "StoreId IN ('Store1','Store2','Store3')" ``` - 建立 `S2` Subscription 的 filter:設定只獲取 StoreID 為 `Store4` 的店家資訊 ```azurecli-interacitve az servicebus topic subscription rule create --resource-group $myResourceGroup --namespace-name $namespaceName --topic-name myTopic --subscription-name S2 --name MySecondFilter --filter-sql-expression "StoreId = 'Store4'" ``` - 建立 `S3` Subscription 的 filter:設定只獲取 StoreID 為 `Store1`、`Store2`、`Store3`、`Stroe4`以外的店家資訊 ```azurecli-interacitve az servicebus topic subscription rule create --resource-group $myResourceGroup --namespace-name $namespaceName --topic-name MyTopic --subscription-name S3 --name MyThirdFilter --filter-sql-expression "StoreId NOT IN ('Store1','Store2','Store3', 'Store4')" ``` - 建立 `Taipei` Subscription 的 filter:設定只獲取地區為 `Taipei` 的店家資訊 ```azurecli-interacitve az servicebus topic subscription rule create --resource-group $myResourceGroup --namespace-name $namespaceName --topic-name MyTopic --subscription-name S3 --name MyThirdFilter --filter-sql-expression "location = 'Taipei'" ``` - 取得此建立的 Namespace 的 Connection String ```azurecli-interacitve az servicebus namespace authorization-rule keys list --resource-group $myResourceGroup --namespace-name $namespaceName --name RootManageSharedAccessKey --query primaryConnectionString --output tsv ``` - 取得 endpoint 並記錄下來以供後續開發使用 > **在 portal 上建立:**  ### 發布及訂閱 message > 詳細可參考 [Send messages to an Azure Service Bus topic and receive messages from subscriptions to the topic (Python)](https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-python-how-to-use-topics-subscriptions) - 安裝 [azure-servicebus python package](https://pypi.org/project/azure-servicebus/),建議使用 virtualenv 安裝在 python 虛擬環境中 ```.sh pip install azure-servicebus ``` - 下載 Sample Code (topic) - 執行程式碼 ```.sh python send_msg.py ``` ## Reference - [Azure Service Bus python SDK](https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/servicebus/azure-servicebus) - [Azure Service Bus client library for Python Samples](https://docs.microsoft.com/en-us/samples/azure/azure-sdk-for-python/servicebus-samples/) - [Azure Service Bus client library for Python](https://azuresdkdocs.blob.core.windows.net/$web/python/azure-servicebus/latest/index.html#azure-service-bus-client-library-for-python) - [Azure Service Bus Quota](https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-quotas) ## (Delete)Resource - ==hightlight== - Super^script^ - Sub~script~ :::info :bulb: **Hint:** You can also apply styling from the toolbar at the top :arrow_upper_left: of the editing area. ::: > Drag-n-drop image from your file system to the editor to paste it! - Code block with color and line numbers: ```javascript=16 var s = "JavaScript syntax highlighting"; alert(s); ``` - UML diagrams ```sequence Alice->Bob: Hello Bob, how are you? Note right of Bob: Bob thinks Bob-->Alice: I am good thanks! Note left of Alice: Alice responds Alice->Bob: Where have you been? ``` > Leave in-line comments! [color=#3b75c6] - And MORE ➜ [HackMD Tutorials](https://hackmd.io/c/tutorials)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up