Azure Service Bus konusuna ileti gönderme ve aboneliklerden konuya ileti alma (Python)
Bu öğreticide, aşağıdaki adımları tamamlayacaksınız:
- Azure portalı ile Service Bus ad alanı oluşturma.
- Azure portalı ile Service Bus konusu oluşturma.
- Azure portalı ile bu konu için bir Service Bus aboneliği oluşturma.
- Azure-servicebus paketini kullanarak aşağıdakileri yapmak için bir Python uygulaması yazın:
- Konuya bir dizi ileti gönderin.
- Bu iletileri abonelikten alın.
Not
Bu hızlı başlangıçta, Service Bus konusuna toplu ileti gönderme ve bu iletileri konunun bir aboneliğinden alma gibi basit bir senaryo için adım adım yönergeler sağlanır. Azure Service Bus için önceden oluşturulmuş Python örneklerini GitHub'daki Python için Azure SDK deposunda bulabilirsiniz.
Önkoşullar
- Bir Azure aboneliği.
- Python 3.8 veya üzeri
Not
Bu öğretici, Python kullanarak kopyalayıp çalıştırabileceğiniz örneklerle çalışır. Python uygulaması oluşturma yönergeleri için bkz . Azure Web Sitesi'ne Python uygulaması oluşturma ve dağıtma. Bu öğreticide kullanılan paketleri yükleme hakkında daha fazla bilgi için bkz . Python Yükleme Kılavuzu.
Azure portalında bir ad alanı oluşturma
Azure'da Service Bus mesajlaşma varlıklarını kullanmaya başlamak için öncelikle Azure'da benzersiz olan bir ad alanı oluşturmanız gerekir. Ad alanı, uygulamanızdaki Service Bus kaynakları (kuyruklar, konular vb.) için bir kapsam kapsayıcısı sağlar.
Ad alanı oluşturmak için:
Azure Portal’ında oturum açın.
Tüm hizmetler sayfasına gidin.
Sol gezinti çubuğunda, kategoriler listesinden Tümleştirme'yi seçin, fareyi Service Bus'ın üzerine getirin ve ardından Service Bus kutucuğundaki düğmeyi seçin+.
Ad alanı oluştur sayfasının Temel bilgiler etiketinde şu adımları izleyin:
Abonelik için ad alanının oluşturulacağı bir Azure aboneliği seçin.
Kaynak grubu için, ad alanının yaşayacağı mevcut bir kaynak grubunu seçin veya yeni bir tane oluşturun.
Ad alanı için bir ad girin. Ad alanı adı aşağıdaki adlandırma kurallarına uymalıdır:
- Adın Azure genelinde benzersiz olması gerekir. Adın kullanılabilirliği sistem tarafından hemen denetlenir.
- Ad uzunluğu en az 6 ve en fazla 50 karakterdir.
- Ad yalnızca harf, sayı, kısa çizgi "-" içerebilir.
- Ad bir harfle başlamalı ve bir harf veya numarayla bitmelidir.
- Ad "-sb" veya "-mgmt" ile bitmiyor.
Konum için ad alanınızın barındırılacağı bölgeyi seçin.
Fiyatlandırma katmanı için ad alanı için fiyatlandırma katmanını (Temel, Standart veya Premium) seçin. Bu hızlı başlangıç için Standart'ı seçin.
Önemli
Konuları ve abonelikleri kullanmak istiyorsanız Standart veya Premium'u seçin. Konular/abonelikler Temel fiyatlandırma katmanında desteklenmez.
Premium fiyatlandırma katmanını seçtiyseniz, mesajlaşma birimi sayısını belirtin. Premium katman, her iş yükünün yalıtılmış olarak çalışması için CPU ve bellek düzeyinde kaynak yalıtımı sağlar. Bu kaynak kapsayıcısı mesajlaşma birimi olarak adlandırılır. Premium ad alanında en az bir mesajlaşma birimi vardır. Her Service Bus Premium ad alanı için 1, 2, 4, 8 veya 16 mesajlaşma birimleri seçebilirsiniz. Daha fazla bilgi için bkz . Service Bus Premium Mesajlaşma.
Sayfanın alt kısmındaki Gözden geçir ve oluştur'u seçin.
Gözden geçir ve oluştur sayfasında ayarları gözden geçirin ve Oluştur'u seçin.
Kaynağın dağıtımı başarılı olduktan sonra dağıtım sayfasında Kaynağa git'i seçin.
Service Bus ad alanınızın giriş sayfasını görürsünüz.
Azure portalını kullanarak konu oluşturma
Service Bus Ad Alanı sayfasında, soldaki menüden Konular'ı seçin.
Araç çubuğunda + Konu'ya tıklayın.
Konu için bir ad girin. Diğer seçenekleri varsayılan değerlerinde bırakın.
Oluştur'u belirleyin.
Konuya abonelik oluşturma
Önceki bölümde oluşturduğunuz konuyu seçin.
Service Bus Konusu sayfasında araç çubuğunda + Abonelik'i seçin.
Abonelik oluştur sayfasında şu adımları izleyin:
Aboneliğin adı olarak S1 girin.
En fazla teslimat sayısı için 3 girin.
Ardından, aboneliği oluşturmak için Oluştur'u seçin.
Azure'da uygulamanın kimliğini doğrulama
Bu hızlı başlangıçta Azure Service Bus'a bağlanmanın iki yolu gösterilir: parolasız ve bağlantı dizesi.
İlk seçenek, Service Bus ad alanına bağlanmak için Microsoft Entra Id ve rol tabanlı erişim denetiminde (RBAC) güvenlik sorumlunuzu nasıl kullanacağınızı gösterir. Kodunuzda, yapılandırma dosyasında veya Azure Key Vault gibi güvenli bir depolama alanında sabit kodlanmış bağlantı dizesi olması konusunda endişelenmeniz gerekmez.
İkinci seçenek, Service Bus ad alanına bağlanmak için bir bağlantı dizesi nasıl kullanacağınızı gösterir. Azure'da yeniyseniz bağlantı dizesi seçeneğini daha kolay takip edebilirsiniz. Gerçek dünyadaki uygulamalarda ve üretim ortamlarında parolasız seçeneği kullanmanızı öneririz. Daha fazla bilgi için bkz . Kimlik doğrulaması ve yetkilendirme. Ayrıca, genel bakış sayfasında parolasız kimlik doğrulaması hakkında daha fazla bilgi edinebilirsiniz.
Microsoft Entra kullanıcınıza rol atama
Yerel olarak geliştirme yaparken, Azure Service Bus'a bağlanan kullanıcı hesabının doğru izinlere sahip olduğundan emin olun. İleti gönderip almak için Azure Service Bus Veri Sahibi rolüne sahip olmanız gerekir. Kendinize bu rolü atamak için Kullanıcı Erişimi Yönetici istrator rolüne veya eylemi içeren Microsoft.Authorization/roleAssignments/write
başka bir role ihtiyacınız olacaktır. Azure portalı, Azure CLI veya Azure PowerShell'i kullanarak kullanıcıya Azure RBAC rolleri atayabilirsiniz. Kapsam genel bakış sayfasında rol atamaları için kullanılabilir kapsamlar hakkında daha fazla bilgi edinin.
Aşağıdaki örnekte rol, Azure Service Bus kaynaklarına tam erişim sağlayan kullanıcı hesabınıza atanır Azure Service Bus Data Owner
. Gerçek bir senaryoda, kullanıcılara yalnızca daha güvenli bir üretim ortamı için gereken minimum izinleri vermek için En Az Ayrıcalık İlkesi'ni izleyin.
Azure Service Bus için Azure yerleşik rolleri
Azure Service Bus için, Azure portalı ve Azure kaynak yönetimi API'sini kullanarak ad alanlarının ve tüm ilgili kaynakların yönetimi Azure RBAC modeli kullanılarak zaten korunur. Azure, Service Bus ad alanına erişim yetkisi vermek için aşağıdaki Azure yerleşik rollerini sağlar:
- Azure Service Bus Veri Sahibi: Service Bus ad alanına ve varlıklarına (kuyruklar, konular, abonelikler ve filtreler) veri erişimini etkinleştirir. Bu rolün bir üyesi kuyruklardan veya konu başlıklarından/aboneliklerden ileti gönderip alabilir.
- Azure Service Bus Veri Göndereni: Service Bus ad alanına ve varlıklarına gönderme erişimi vermek için bu rolü kullanın.
- Azure Service Bus Veri Alıcısı: Service Bus ad alanına ve varlıklarına alma erişimi vermek için bu rolü kullanın.
Özel bir rol oluşturmak istiyorsanız bkz . Service Bus işlemleri için gereken haklar.
Microsoft Entra kullanıcısını Azure Service Bus Sahibi rolüne ekleme
Microsoft Entra kullanıcı adınızı Service Bus ad alanı düzeyinde Azure Service Bus Veri Sahibi rolüne ekleyin. Kullanıcı hesabınız bağlamında çalışan bir uygulamanın kuyruğa veya konuya ileti göndermesine ve kuyruktan veya konunun aboneliğinden ileti almasına olanak tanır.
Önemli
Çoğu durumda rol atamasının Azure'a yayılması bir veya iki dakika sürer. Nadir durumlarda, sekiz dakikaya kadar sürebilir. Kodunuzu ilk kez çalıştırdığınızda kimlik doğrulama hataları alıyorsanız, birkaç dakika bekleyin ve yeniden deneyin.
Azure portalında Service Bus Ad Alanı sayfanız açık değilse ana arama çubuğunu veya sol gezintiyi kullanarak Service Bus ad alanınızı bulun.
Genel bakış sayfasında, sol taraftaki menüden Erişim denetimi (IAM) öğesini seçin.
Erişim denetimi (IAM) sayfasında Rol atamaları sekmesini seçin.
Üst menüden + Ekle'yi seçin ve ardından açılan menüden Rol ataması ekle'yi seçin.
Sonuçları istenen role göre filtrelemek için arama kutusunu kullanın. Bu örnek için eşleşen sonucu arayın
Azure Service Bus Data Owner
ve seçin. Ardından İleri'yi seçin.Erişim ata'nın altında Kullanıcı, grup veya hizmet sorumlusu'na tıklayın ve ardından + Üye seç'e tıklayın.
İletişim kutusunda Microsoft Entra kullanıcı adınızı (genellikle user@domain e-posta adresiniz) arayın ve iletişim kutusunun alt kısmındaki Seç'i seçin.
Son sayfaya gitmek için Gözden geçir + ata'yı seçin ve ardından işlemi tamamlamak için Gözden geçir + yeniden ata'yı seçin.
Kod kurulumu
Parolasız kimlik doğrulaması ve kendi Azure hesabınızı kullanarak bu hızlı başlangıcı takip etmek için:
- Azure CLI’yi yükleyin.
- ile terminalde veya komut isteminde Azure hesabınızla
az login
oturum açın. - Öğreticinin ilerleyen bölümlerinde kaynağınıza uygun rolü eklerken aynı hesabı kullanın.
- Öğretici kodunu aynı terminalde veya komut isteminde çalıştırın.
Önemli
ile az login
oturum açtığınızdan emin olun. DefaultAzureCredential
Parolasız koddaki sınıfı, Microsoft Entra Id ile kimlik doğrulaması yapmak için Azure CLI kimlik bilgilerini kullanır.
Parolasız kodu kullanmak için şunları belirtmeniz gerekir:
- tam service bus ad alanı, örneğin: <service-bus-namespace.servicebus.windows.net>
- konu adı
- abonelik adı
Paketleri yüklemek için pip kullanma
Bu Service Bus öğreticisi için gerekli Python paketlerini yüklemek için, yolunda Python bulunan bir komut istemi açın. Dizini, örneklerinizi almak istediğiniz klasörle değiştirin.
Paketleri yükleme:
pip install azure-servicebus pip install azure-identity pip install aiohttp
Konu başlığına ileti gönderme
Aşağıdaki örnek kod, Service Bus konusuna toplu ileti gönderme işlemini gösterir. Ayrıntılar için kod açıklamalarına bakın.
Visual Studio Code gibi sık kullandığınız düzenleyiciyi açın, bir dosya send.py oluşturun ve içine aşağıdaki kodu ekleyin.
Aşağıdaki
import
deyimlerini ekleyin.import asyncio from azure.servicebus.aio import ServiceBusClient from azure.servicebus import ServiceBusMessage from azure.identity.aio import DefaultAzureCredential
Sabitleri ekleyin ve bir kimlik bilgisi tanımlayın.
FULLY_QUALIFIED_NAMESPACE = "FULLY_QUALIFIED_NAMESPACE" TOPIC_NAME = "TOPIC_NAME" credential = DefaultAzureCredential()
Önemli
- değerini Service Bus ad alanınızın tam ad alanıyla değiştirin
FULLY_QUALIFIED_NAMESPACE
. - değerini konunun adıyla değiştirin
TOPIC_NAME
.
Önceki kodda Azure Identity istemci kitaplığının
DefaultAzureCredential
sınıfını kullandınız. Uygulama geliştirme sırasında yerel olarak çalıştığında,DefaultAzureCredential
Azure CLI'da oturum açtığınız hesabı kullanarak Azure'ı otomatik olarak bulur ve kimlik doğrulaması yapar. Uygulama Azure'a dağıtıldığında,DefaultAzureCredential
herhangi bir kod değişikliği olmadan yönetilen bir kimlik aracılığıyla microsoft entra id'sinde uygulamanızın kimliğini doğrulayabilir.- değerini Service Bus ad alanınızın tam ad alanıyla değiştirin
Tek bir ileti göndermek için bir yöntem ekleyin.
async def send_single_message(sender): # Create a Service Bus message message = ServiceBusMessage("Single Message") # send the message to the topic await sender.send_messages(message) print("Sent a single message")
Gönderen, oluşturduğunuz konu için istemci işlevi gören bir nesnedir. Daha sonra oluşturacak ve bu işleve bağımsız değişken olarak göndereceksiniz.
İleti listesi göndermek için bir yöntem ekleyin.
async def send_a_list_of_messages(sender): # Create a list of messages messages = [ServiceBusMessage("Message in list") for _ in range(5)] # send the list of messages to the topic await sender.send_messages(messages) print("Sent a list of 5 messages")
Toplu ileti göndermek için bir yöntem ekleyin.
async def send_batch_message(sender): # Create a batch of messages async with sender: batch_message = await sender.create_message_batch() for _ in range(10): try: # Add a message to the batch batch_message.add_message(ServiceBusMessage("Message inside a ServiceBusMessageBatch")) except ValueError: # ServiceBusMessageBatch object reaches max_size. # New ServiceBusMessageBatch object can be created here to send more data. break # Send the batch of messages to the topic await sender.send_messages(batch_message) print("Sent a batch of 10 messages")
İleti göndermek için bir Service Bus istemcisi ve ardından bir konu gönderen nesnesi oluşturun.
async def run(): # create a Service Bus client using the credential. async with ServiceBusClient( fully_qualified_namespace=FULLY_QUALIFIED_NAMESPACE, credential=credential, logging_enable=True) as servicebus_client: # Get a Topic Sender object to send messages to the topic sender = servicebus_client.get_topic_sender(topic_name=TOPIC_NAME) async with sender: # Send one message await send_single_message(sender) # Send a list of messages await send_a_list_of_messages(sender) # Send a batch of messages await send_batch_message(sender) # Close credential when no longer needed. await credential.close() asyncio.run(run()) print("Done sending messages") print("-----------------------")
Abonelikten ileti alma
Aşağıdaki örnek kod, bir abonelikten nasıl ileti alabileceğinizi gösterir. Bu kod, 5 (max_wait_time
) saniye boyunca yeni ileti almayana kadar sürekli olarak yeni iletiler alır.
Visual Studio Code gibi sık kullandığınız düzenleyiciyi açın, recv.py bir dosya oluşturun ve içine aşağıdaki kodu ekleyin.
Gönderme örneğine benzer şekilde deyimler ekleyin
import
, kendi değerlerinizle değiştirmeniz gereken sabitleri tanımlayın ve bir kimlik bilgisi tanımlayın.import asyncio from azure.servicebus.aio import ServiceBusClient from azure.identity.aio import DefaultAzureCredential FULLY_QUALIFIED_NAMESPACE = "FULLY_QUALIFIED_NAMESPACE" SUBSCRIPTION_NAME = "SUBSCRIPTION_NAME" TOPIC_NAME = "TOPIC_NAME" credential = DefaultAzureCredential()
İletileri almak için bir Service Bus istemcisi ve ardından bir abonelik alıcı nesnesi oluşturun.
async def run(): # create a Service Bus client using the credential async with ServiceBusClient( fully_qualified_namespace=FULLY_QUALIFIED_NAMESPACE, credential=credential, logging_enable=True) as servicebus_client: async with servicebus_client: # get the Subscription Receiver object for the subscription receiver = servicebus_client.get_subscription_receiver(topic_name=TOPIC_NAME, subscription_name=SUBSCRIPTION_NAME, max_wait_time=5) async with receiver: received_msgs = await receiver.receive_messages(max_wait_time=5, max_message_count=20) for msg in received_msgs: print("Received: " + str(msg)) # complete the message so that the message is removed from the subscription await receiver.complete_message(msg) # Close credential when no longer needed. await credential.close()
yöntemini çağırın
run
.asyncio.run(run())
Uygulamayı çalıştırma
Yolunda Python bulunan bir komut istemi açın ve bir konu başlığı altında bir abonelik için ileti göndermek ve almak için kodu çalıştırın.
python send.py; python recv.py
Aşağıdaki çıkışı görmeniz gerekir:
Sent a single message
Sent a list of 5 messages
Sent a batch of 10 messages
Done sending messages
-----------------------
Received: Single Message
Received: Message in list
Received: Message in list
Received: Message in list
Received: Message in list
Received: Message in list
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Azure portalında Service Bus ad alanınıza gidin. Genel Bakış sayfasında, gelen ve giden ileti sayılarının 16 olduğunu doğrulayın. Sayıları görmüyorsanız birkaç dakika bekledikten sonra sayfayı yenileyin.
Konunuzun Service Bus Konusu sayfasını görmek için alt bölmedeki konuyu seçin. Bu sayfada, İletiler grafiğinde üç gelen ve üç giden ileti görmeniz gerekir.
Bu sayfada, bir abonelik seçerseniz Service Bus Aboneliği sayfasına ulaşabilirsiniz. Bu sayfada etkin ileti sayısını, teslim edilemeyen ileti sayısını ve daha fazlasını görebilirsiniz. Bu örnekte tüm iletiler alınmıştır, dolayısıyla etkin ileti sayısı sıfırdır.
Alma kodunu açıklama satırı yaparsanız etkin ileti sayısını 16 olarak görürsünüz.
Sonraki adımlar
Aşağıdaki belgelere ve örneklere bakın:
- Python için Azure Service Bus istemci kitaplığı
- Örnekler.
- sync_samples klasöründe Service Bus ile zaman uyumlu bir şekilde nasıl etkileşim kurabileceğinizi gösteren örnekler bulunur. Bu hızlı başlangıçta bu yöntemi kullandınız.
- async_samples klasöründe, Service Bus ile zaman uyumsuz bir şekilde nasıl etkileşim kurabileceğinizi gösteren örnekler bulunur.
- azure-servicebus başvuru belgeleri