Aracılığıyla paylaş


Python için Azure Service Bus istemci kitaplığı - sürüm 7.11.4

Azure Service Bus, dağıtılmış gönderenler ve alıcılar arasında gerçek zamanlı ve hataya dayanıklı iletişim sağlamaya yönelik yüksek performanslı bir bulut tarafından yönetilen mesajlaşma hizmetidir.

Service Bus, yapılandırılmış ilk çıkar mesajlaşma, yayımlama/abone olma özellikleri ve gereksinimleriniz arttıkça kolayca ölçeklendirebilme gibi zaman uyumsuz son derece güvenilir iletişim için birden çok mekanizma sağlar.

Uygulamalar ve hizmetler arasında iletişim kurmak ve zaman uyumsuz mesajlaşma desenleri uygulamak için Python için Service Bus istemci kitaplığını kullanın.

  • Service Bus ad alanları, kuyruklar, konular ve abonelikler oluşturun ve ayarlarını değiştirin.
  • Service Bus kanallarınızda ileti gönderin ve alın.
  • Karmaşık mesajlaşma desenlerini uygulamak için ileti kilitlerini, oturumları ve teslim edilemeyen harf işlevlerini kullanın.

Kaynak kodu | Paket (PyPi) | Paket (Conda) | API başvuru belgeleri | Ürün belgeleri | Örnekleri | Changelog

NOT: 0.50 veya daha düşük bir sürümü kullanıyorsanız ve bu paketin en son sürümüne geçmek istiyorsanız, Service Bus V0.50'den Service Bus V7'ye geçmek için lütfen geçiş kılavuzumuza bakın.

Başlarken

Paketi yükleme

Pip ile Python için Azure Service Bus istemci kitaplığını yükleyin:

pip install azure-servicebus

Ön koşullar:

Bu paketi kullanmak için aşağıdakilere sahip olmanız gerekir:

Azure Service Bus ad alanına ihtiyacınız varsa, bunu Azure Portal aracılığıyla oluşturabilirsiniz. Grafik portalın kullanıcı arabirimini kullanmak istemiyorsanız, azure CLI'yi Cloud Shell aracılığıyla kullanabilir veya Azure CLI yerel olarak çalıştırarak şu Azure CLI komutuyla oluşturabilirsiniz:

az servicebus namespace create --resource-group <resource-group-name> --name <servicebus-namespace-name> --location <servicebus-namespace-location>

İstemcinin kimliğini doğrulama

Service Bus ile etkileşim, sınıfının bir örneğiyle ServiceBusClient başlar. İstemci nesnesinin örneğini oluşturmak için SAS anahtarına sahip bir bağlantı dizesi veya ad alanına ve hesap anahtarlarından birine ihtiyacınız vardır. Her iki yaklaşımla da kimlik doğrulaması yapma hakkında tanıtım için lütfen aşağıda bağlantılı örnekleri bulun.

bağlantı dizesi'dan istemci oluşturma

  • Gerekli kimlik bilgilerini almak için, bir ortam değişkenini service bus bağlantı dizesi ile doldurmak için bağlı örneğin üst kısmındaki Azure CLI kod parçacığını (Bash Shell için Biçimlendirildi) kullanabilirsiniz (hizmet veri yolu bağlantı dizesi alma adım adım kılavuzunu izleyerek bu değerleri Azure Portal'da da bulabilirsiniz).

azure-identity kitaplığını kullanarak istemci oluşturma:

  • Bu oluşturucu, Service Bus örneğinizin tam ad alanını ve TokenCredential protokolünün uygulandığı bir kimlik bilgisini alır. Azure-identity paketindeTokenCredential kullanılabilen protokol uygulamaları vardır. Tam ad alanı biçimindedir <yournamespace.servicebus.windows.net>.
  • tarafından azure-identitysağlanan kimlik bilgisi türlerini kullanmak için lütfen paketini yükleyin: pip install azure-identity
  • Ayrıca, zaman uyumsuz API'yi kullanmak için önce gibi aiohttpbir zaman uyumsuz aktarım yüklemeniz gerekir: pip install aiohttp
  • Azure Active Directory kullanırken sorumlunuza Service Bus'a erişim izni veren bir rol atanmalıdır, örneğin Azure Service Bus Veri Sahibi rolü. Service Bus ile Azure Active Directory yetkilendirmesini kullanma hakkında daha fazla bilgi için lütfen ilişkili belgelere bakın.

Not: İstemci bağlam yöneticisi olmadan başlatılabilir, ancak kaynakları sızdırmamak için client.close() aracılığıyla el ile kapatılmalıdır.

Önemli kavramlar

bir ServiceBusClientbaşlatıldıktan sonra, service bus ad alanı içindeki birincil kaynak türleriyle etkileşim kurabilirsiniz. Bu türlerde birden çok kaynak bulunabilir ve gerçek ileti iletiminin gerçekleştiği ad alanı genellikle bir uygulama kapsayıcısı görevi görür:

  • Kuyruk: İleti göndermeye ve almaya izin verir. Genellikle noktadan noktaya iletişim için kullanılır.

  • Konu: Kuyrukların aksine, Konular yayımlama/abone olma senaryolarına daha uygundur. Bir konu adresine gönderilebilir, ancak birden çok tane paralel olarak kullanılabilmesi için bir abonelik gerektirir.

  • Abonelik: Bir Konudan tüketecek mekanizma. Her abonelik bağımsızdır ve konuya gönderilen her iletinin bir kopyasını alır. Kurallar ve Filtreler, belirli bir abonelik tarafından alınan iletileri uyarlamak için kullanılabilir.

Bu kaynaklar hakkında daha fazla bilgi için bkz. Azure Service Bus nedir?.

Bu kaynaklarla etkileşime geçmek için aşağıdaki SDK kavramları hakkında bilgi sahibi olmanız gerekir:

  • ServiceBusClient: Bu, bir kullanıcının service Bus Ad Alanına bağlanmak için önce başlatması gereken nesnedir. Bir kuyruk, konu veya abonelikle etkileşime geçmek için, bu istemciden bir gönderen veya alıcı çıkarılır.

  • ServiceBusSender: Kuyruğa veya Konuya ileti göndermek için, burada görüldüğü gibi örneğin ServiceBusClient karşılık gelen get_queue_sender veya get_topic_sender yöntemini kullanabilirsiniz.

  • ServiceBusReceiver: Kuyruktan veya Abonelikten ileti almak için, burada görüldüğü gibi örneğin ServiceBusClient karşılık gelen get_queue_receiver veya get_subscription_receiver yöntemini kullanabilirsiniz.

  • ServiceBusMessage: Gönderirken, yükünüzü içerecek şekilde bu tür oluşturulur. Alırken yüke burada erişebilirsiniz.

İş parçacığı güvenliği

ServiceBusClient, ServiceBusSender ve ServiceBusReceiver'ın iş parçacığı açısından güvenli olduğunu garanti etmeyiz. Bu örneklerin iş parçacıkları arasında yeniden kullanılması önerilmez. Bu sınıfları iş parçacığı güvenli bir şekilde kullanmak çalışan uygulamaya bağlı.

Örnekler

Aşağıdaki bölümlerde, en yaygın Service Bus görevlerinden bazılarını kapsayan çeşitli kod parçacıkları sağlanır:

Kuyrukları/konuları/abonelikleri oluşturma ve silme gibi yönetim görevlerini gerçekleştirmek için lütfen burada bulunan azure-mgmt-servicebus kitaplığını kullanın.

Lütfen samples dizininde gönderme, alma, oturum yönetimi ve ileti işleme gibi yaygın Service Bus senaryolarını gösteren diğer örnekleri bulun.

Kuyruğa ileti gönderme

NOT: Buradaki başvuru belgelerine bakın.

Bu örnek, Azure portal veya az komutları aracılığıyla oluşturulmuş, zaten var olduğu varsayılan bir kuyruğa tek bir ileti ve ileti dizisi gönderir.

from azure.servicebus import ServiceBusClient, ServiceBusMessage

import os
connstr = os.environ['SERVICE_BUS_CONNECTION_STR']
queue_name = os.environ['SERVICE_BUS_QUEUE_NAME']

with ServiceBusClient.from_connection_string(connstr) as client:
    with client.get_queue_sender(queue_name) as sender:
        # Sending a single message
        single_message = ServiceBusMessage("Single message")
        sender.send_messages(single_message)

        # Sending a list of messages
        messages = [ServiceBusMessage("First message"), ServiceBusMessage("Second message")]
        sender.send_messages(messages)

NOT: Bir ileti, yöntemi kullanılarak ServiceBusSender.schedule_messages() veya çağrıdan önce belirtilerek ServiceBusMessage.scheduled_enqueue_time_utc gecikmeli teslim için zamanlanabilir ServiceBusSender.send_messages()

İptali zamanlama ve zamanlama hakkında daha fazla ayrıntı için lütfen buradaki örneklere bakın.

Kuyruktan ileti alma

Kuyruktan almak için, aracılığıyla geçici bir alma receiver.receive_messages() gerçekleştirebilir veya alıcının kendisi aracılığıyla kalıcı olarak alabilirsiniz.

ServiceBusReceiver üzerinden yineleme yoluyla kuyruktan ileti alma

from azure.servicebus import ServiceBusClient

import os
connstr = os.environ['SERVICE_BUS_CONNECTION_STR']
queue_name = os.environ['SERVICE_BUS_QUEUE_NAME']

with ServiceBusClient.from_connection_string(connstr) as client:
    # max_wait_time specifies how long the receiver should wait with no incoming messages before stopping receipt.
    # Default is None; to receive forever.
    with client.get_queue_receiver(queue_name, max_wait_time=30) as receiver:
        for msg in receiver:  # ServiceBusReceiver instance is a generator.
            print(str(msg))
            # If it is desired to halt receiving early, one can break out of the loop here safely.

NOT: ile receive_mode=PEEK_LOCK alınan tüm iletiler (bu varsayılandır, alternatif RECEIVE_AND_DELETE iletiyi alındıktan hemen sonra kuyruktan kaldırır), işlemenin kilit süresinden uzun sürmesi durumunda süresi dolmadan önce üzerinden receiver.renew_message_lock yenilenmesi gereken bir kilit vardır. Bir yardımcının bunu arka planda otomatik olarak gerçekleştirmesi için bkz. AutoLockRenewer'ı kilitler . Kilit süresi Azure'da kuyrukta veya konunun kendisinde ayarlanır.

ServiceBusReceiver.receive_messages() aracılığıyla kuyruktan ileti alma

NOT:ServiceBusReceiver.receive_messages() oluşturucudan kalıcı olarak almak yerine geçici bir yöntem çağrısı aracılığıyla iletilerin tek veya kısıtlanmış bir listesini alır. Her zaman bir liste döndürür.

from azure.servicebus import ServiceBusClient

import os
connstr = os.environ['SERVICE_BUS_CONNECTION_STR']
queue_name = os.environ['SERVICE_BUS_QUEUE_NAME']

with ServiceBusClient.from_connection_string(connstr) as client:
    with client.get_queue_receiver(queue_name) as receiver:
        received_message_array = receiver.receive_messages(max_wait_time=10)  # try to receive a single message within 10 seconds
        if received_message_array:
            print(str(received_message_array[0]))

    with client.get_queue_receiver(queue_name) as receiver:
        received_message_array = receiver.receive_messages(max_message_count=5, max_wait_time=10)  # try to receive maximum 5 messages in a batch within 10 seconds
        for message in received_message_array:
            print(str(message))

Bu örnekte, max_message_count saniye cinsinden belirtilen bir max_wait_time vurmadan önce almayı deneyecek en fazla ileti sayısını bildirir.

NOT: Ayrıca, göz atılmakta olan ServiceBusReceiver.peek_messages() iletileri kilitlemediğinden ve bu nedenle yerleşemediklerinden, almaktan çok daha farklı olduğu da belirtilmelidir.

Oturum etkin bir kuyruktan ileti gönderme ve alma

NOT: Oturum gönderme ve alma için başvuru belgelerine bakın.

Oturumlar, kuyruğun veya aboneliğin en üstünde ilk çıkar ve tek alıcı semantiği sağlar. Gerçek alma söz dizimi aynı olsa da, başlatma biraz farklılık gösterir.

from azure.servicebus import ServiceBusClient, ServiceBusMessage

import os
connstr = os.environ['SERVICE_BUS_CONNECTION_STR']
queue_name = os.environ['SERVICE_BUS_SESSION_QUEUE_NAME']
session_id = os.environ['SERVICE_BUS_SESSION_ID']

with ServiceBusClient.from_connection_string(connstr) as client:
    with client.get_queue_sender(queue_name) as sender:
        sender.send_messages(ServiceBusMessage("Session Enabled Message", session_id=session_id))

    # If session_id is null here, will receive from the first available session.
    with client.get_queue_receiver(queue_name, session_id=session_id) as receiver:
        for msg in receiver:
            print(str(msg))

NOT: Bir oturumdan alınan iletilerin kilitlerinin oturum dışı bir alıcı gibi yenilenmesi gerekmez; bunun yerine, kilit yönetimi ile yenilenebilen bir oturum kilidiyle oturum düzeyinde gerçekleşir receiver.session.renew_lock()

Konu başlıkları ve aboneliklerle çalışma

NOT:Konular ve abonelikler için başvuru belgelerine bakın.

Konular ve abonelikler, ileti göndermek ve almak için kuyruklara alternatif sağlar. Ayrıntılı ayrıntılar ve bunların kuyruklardan farkı hakkında daha fazla bilgi için buradaki belgelere bakın.

from azure.servicebus import ServiceBusClient, ServiceBusMessage

import os
connstr = os.environ['SERVICE_BUS_CONNECTION_STR']
topic_name = os.environ['SERVICE_BUS_TOPIC_NAME']
subscription_name = os.environ['SERVICE_BUS_SUBSCRIPTION_NAME']

with ServiceBusClient.from_connection_string(connstr) as client:
    with client.get_topic_sender(topic_name) as sender:
        sender.send_messages(ServiceBusMessage("Data"))

    # If session_id is null here, will receive from the first available session.
    with client.get_subscription_receiver(topic_name, subscription_name) as receiver:
        for msg in receiver:
            print(str(msg))

Alındıktan sonra iletiyi kapatma

Kuyruktan alırken, aldığınız iletilerde gerçekleştirebileceğiniz birden çok eylem vardır.

NOT: Yalnızca modda alınan ServiceBusReceiveMode.PEEK_LOCK nesneleri yerleştirebilirsiniz ServiceBusReceivedMessage (bu varsayılandır). ServiceBusReceiveMode.RECEIVE_AND_DELETE modu, alındı durumunda iletiyi kuyruktan kaldırır. ServiceBusReceivedMessage ileti kilidi yukarıda belirtilen alma yöntemlerinde olduğu gibi alınmadığından, iletiden peek_messages() döndürülen iletiler kapatılamaz.

İletide yukarıda belirtildiği gibi bir kilit varsa, ileti kilidinin süresi dolduysa kapatma başarısız olur. İşleme kilit süresinden daha uzun sürecekse süresi dolmadan önce üzerinden receiver.renew_message_lock bakımı yapılmalıdır. Kilit süresi Azure'da kuyrukta veya konunun kendisinde ayarlanır. Bir yardımcının bunu arka planda otomatik olarak gerçekleştirmesi için bkz. AutoLockRenewer'ı kilitler .

Tamamla

İletinin başarıyla tamamlanacağını bildirir ve iletiyi kuyruktan kaldırır.

from azure.servicebus import ServiceBusClient

import os
connstr = os.environ['SERVICE_BUS_CONNECTION_STR']
queue_name = os.environ['SERVICE_BUS_QUEUE_NAME']

with ServiceBusClient.from_connection_string(connstr) as client:
    with client.get_queue_receiver(queue_name) as receiver:
        for msg in receiver:
            print(str(msg))
            receiver.complete_message(msg)

Bırak

İletinin işlenmesini şimdilik bırakın, iletiyi başka bir (veya aynı) alıcı tarafından alınmak üzere hemen kuyruğa geri döndürür.

from azure.servicebus import ServiceBusClient

import os
connstr = os.environ['SERVICE_BUS_CONNECTION_STR']
queue_name = os.environ['SERVICE_BUS_QUEUE_NAME']

with ServiceBusClient.from_connection_string(connstr) as client:
    with client.get_queue_receiver(queue_name) as receiver:
        for msg in receiver:
            print(str(msg))
            receiver.abandon_message(msg)

DeadLetter

İletiyi birincil kuyruktan özel bir "teslim edilemeyen ileti alt kuyruğuna" aktarın; burada parametresiyle sub_queue=ServiceBusSubQueue.DEAD_LETTER işlevi kullanılarak ServiceBusClient.get_<queue|subscription>_receiver erişilebilir ve diğer alıcılar gibi bu kuyruktan tüketilebilir. ( buradaki örne bakın)

from azure.servicebus import ServiceBusClient

import os
connstr = os.environ['SERVICE_BUS_CONNECTION_STR']
queue_name = os.environ['SERVICE_BUS_QUEUE_NAME']

with ServiceBusClient.from_connection_string(connstr) as client:
    with client.get_queue_receiver(queue_name) as receiver:
        for msg in receiver:
            print(str(msg))
            receiver.dead_letter_message(msg)

Erteleme

Erteleme, önceki düzenleme yöntemlerinden kısmen farklıdır. bir çağrıdaki ServiceBusReceiver.receive_deferred_messages sıra numarasıyla alınması gereken şekilde bir kenara bırakarak iletinin doğrudan kuyruktan alınmasını önler ( buradaki örne bakın)

from azure.servicebus import ServiceBusClient

import os
connstr = os.environ['SERVICE_BUS_CONNECTION_STR']
queue_name = os.environ['SERVICE_BUS_QUEUE_NAME']

with ServiceBusClient.from_connection_string(connstr) as client:
    with client.get_queue_receiver(queue_name) as receiver:
        for msg in receiver:
            print(str(msg))
            receiver.defer_message(msg)

İleti veya Oturum kilitlerini otomatik olarak yenileme

NOT:Otomatik kilitleme yenilemesi için başvuru belgelerine bakın.

AutoLockRenewer , çağrının receiver.renew_message_lock/receiver.session.renew_lock pratik veya istenmeyen olması durumunda iletinizin veya oturumunuzun uzun süreler boyunca bile kilitli kalmasını sağlamak için basit bir yöntemdir. Dahili olarak, nesnenin süresi dolmak üzereyse kilit yenilemesi yapmak için eşzamanlı bir izleme oluşturmak çok kısa bir işlem değildir. Aşağıdaki gibi kullanılmalıdır:

  • İleti kilidi otomatik yenileme
from azure.servicebus import ServiceBusClient, AutoLockRenewer

import os
connstr = os.environ['SERVICE_BUS_CONNECTION_STR']
queue_name = os.environ['SERVICE_BUS_QUEUE_NAME']

# Can also be called via "with AutoLockRenewer() as renewer" to automate closing.
renewer = AutoLockRenewer()
with ServiceBusClient.from_connection_string(connstr) as client:
    with client.get_queue_receiver(queue_name) as receiver:
        for msg in receiver.receive_messages():
            renewer.register(receiver, msg, max_lock_renewal_duration=60)
            # Do your application logic here
            receiver.complete_message(msg)
renewer.close()
  • Oturum kilidi otomatik yenileme
from azure.servicebus import ServiceBusClient, AutoLockRenewer

import os
connstr = os.environ['SERVICE_BUS_CONNECTION_STR']
session_queue_name = os.environ['SERVICE_BUS_SESSION_QUEUE_NAME']
session_id = os.environ['SERVICE_BUS_SESSION_ID']

# Can also be called via "with AutoLockRenewer() as renewer" to automate closing.
renewer = AutoLockRenewer()
with ServiceBusClient.from_connection_string(connstr) as client:
    with client.get_queue_receiver(session_queue_name, session_id=session_id) as receiver:
        renewer.register(receiver, receiver.session, max_lock_renewal_duration=300) # Duration for how long to maintain the lock for, in seconds.

        for msg in receiver.receive_messages():
            # Do your application logic here
            receiver.complete_message(msg)
renewer.close()

Herhangi bir nedenle otomatik yenileme kesintiye uğradıysa veya başarısız olduysa, bu durum yenilenen nesnedeki özelliği aracılığıyla auto_renew_error veya yenileyici başlatmada parametresine on_lock_renew_failure geri çağrı geçirilerek gözlemlenebilir. Ayrıca, belirtilen nesne üzerinde eylem gerçekleştirmeye çalışırken de (örneğin, bir iletiyi tamamlarken) bildirimde bulunur.

Sorun giderme

Günlüğe Kaydetme

  • Günlükçü'leri kitaplıktan izlemeleri toplamak için etkinleştirin azure.servicebus .
  • Günlükçü'leri temel alınan uAMQP kitaplığından izlemeleri toplamak için etkinleştirin uamqp .
  • İstemciyi oluştururken ayarlayarak logging_enable=True AMQP kare düzeyi izlemesini etkinleştirin.
  • Günlük kaydının çok ayrıntılı olduğunu düşündüğünüz uamqp durumlar olabilir. Gereksiz günlüğe kaydetmeyi engellemek için kodunuzun en üstüne aşağıdaki kod parçacığını ekleyin:
import logging

# The logging levels below may need to be changed based on the logging that you want to suppress.
uamqp_logger = logging.getLogger('uamqp')
uamqp_logger.setLevel(logging.ERROR)

# or even further fine-grained control, suppressing the warnings in uamqp.connection module
uamqp_connection_logger = logging.getLogger('uamqp.connection')
uamqp_connection_logger.setLevel(logging.ERROR)

Zaman aşımları

Bir kullanıcının kitaplık içinde dikkat etmesi gereken çeşitli zaman aşımları vardır.

  • 10 dakikalık hizmet tarafı bağlantı kapatma: Hizmeti kaynak sızıntısına karşı korumak için bir bağlantı açıldıktan sonra 10 dakika boşta kaldıktan sonra kapatılır. Bu büyük ölçüde bir kullanıcı için saydam olmalıdır, ancak böyle bir süre sonra yeniden bağlantı oluştuğunu fark ederseniz, bu nedenledir. Bağlantıda yönetim işlemleri de dahil olmak üzere tüm işlemlerin gerçekleştirilmesi bu zaman aşımını uzatır.
  • max_wait_time: Bir alıcı oluşturulurken veya çağrılırken receive_messages(), ileti alma işleminin trafik olmadığında durdurulacağı saat sağlanır. Bu, hem kesinlik temelli receive_messages() işlev hem de ileti yoksa çıkış yapmadan önce oluşturucu stili alma işleminin çalıştırılacağı uzunluk için geçerlidir. Hiçbiri (varsayılan) değerinin geçirilmesi, başka bir işlem yapılmazsa 10 dakikalık eşiğe kadar sonsuza kadar bekler.

NOT: Bir iletinin veya oturumun işlenmesi zaman aşımlarına neden olacak kadar uzunsa, el ile çağırmaya receiver.renew_message_lock/receiver.session.renew_lock alternatif olarak, yukarıda İletiyi AutoLockRenewer ile ilgili ayrıntılı işlevlerden yararlanabilirsiniz.

Yaygın Özel Durumlar

Service Bus API'leri azure.servicebus.exceptions içinde aşağıdaki özel durumları oluşturur:

  • ServiceBusConnectionError: Hizmet bağlantısında bir hata oluştu. Bunun nedeni geçici bir ağ sorunu veya hizmet sorunu olabilir. Yeniden denemenizi öneririz.
  • ServiceBusAuthorizationError: Hizmet bağlantısı yetkilendirilirken bir hata oluştu. Bunun nedeni kimlik bilgilerinin işlemi gerçekleştirmek için doğru izne sahip olmaması olabilir. Kimlik bilgilerinin izinlerinin denetlenmiş olması önerilir.
  • ServiceBusAuthenticationError: Hizmet bağlantısının kimliği doğrulanırken bir hata oluştu. Bunun nedeni kimlik bilgilerinin yanlış olması olabilir. Kimlik bilgilerini denetlemenizi öneririz.
  • OperationTimeoutError: Bu, hizmetin beklenen süre içinde bir işleme yanıt vermediğini gösterir. Bunun nedeni geçici bir ağ sorunu veya hizmet sorunu olabilir. Hizmet isteği başarıyla tamamlamış veya tamamlamamış olabilir; durumu bilinmiyor. Geçerli durumu doğrulamayı denemeniz ve gerekirse yeniden denemeniz önerilir.
  • MessageSizeExceededError: Bu, ileti içeriğinin service bus çerçeve boyutundan daha büyük olduğunu gösterir. Bir toplu işte çok fazla service bus iletisi gönderildiğinde veya gövdesine Message geçirilen içerik çok büyük olduğunda bu durum oluşabilir. Toplu olarak gönderilen iletilerin sayısını veya tek ServiceBusMessagebir öğesine geçirilen içeriğin boyutunu azaltmanız önerilir.
  • MessageAlreadySettled: Bu, iletiyi kapatmanın başarısız olduğunu gösterir. Zaten çözülen bir iletiyi kapatmaya çalışırken bu durum oluşabilir.
  • MessageLockLostError: İletideki kilidin süresi doldu ve kuyruğa geri bırakıldı. Bunu düzeltmek için yeniden alınması gerekir. bir iletinin kilit süresine dikkat etmeniz ve uzun işlem süresi olması durumunda süre dolmadan önce kilidi yenilemeye devam etmeniz gerekir. AutoLockRenewer iletinin kilidinin otomatik olarak yenilenmesine yardımcı olabilir.
  • SessionLockLostError: Oturumdaki kilidin süresi doldu. Alınan tüm düzeltilmemiş iletiler artık kapatılamaz. Gerekirse iletileri yeniden alırsanız oturuma yeniden bağlanmanız önerilir. Bir oturumun kilit süresine dikkat etmeniz ve uzun işlem süresi olması durumunda süre dolmadan önce kilidi yenilemeye devam etmeniz gerekir. AutoLockRenewer oturum kilidinin otomatik olarak yenilenmesine yardımcı olabilir.
  • MessageNotFoundError: Belirli bir sıra numarasına sahip bir ileti almayı deneme. Bu ileti bulunamadı. İletinin henüz alınmadığından emin olun. İletinin geçersiz olup olmadığını görmek için deadletter kuyruğuna bakın.
  • MessagingEntityNotFoundError: İşlemle ilişkili varlık yok veya silindi. Varlığın mevcut olduğundan emin olun.
  • MessagingEntityDisabledError: Devre dışı bırakılmış bir varlıkta çalışma zamanı işlemi isteği. Lütfen varlığı etkinleştirin.
  • ServiceBusQuotaExceededError: Mesajlaşma varlığı izin verilen maksimum boyuta ulaştı veya bir ad alanına yönelik bağlantı sayısı üst sınırı aşıldı. Varlıktan veya alt sıralarından iletiler alarak varlıkta alan oluşturun.
  • ServiceBusServerBusyError: Hizmet şu anda isteği işleyemiyor. İstemci bir süre bekleyebilir ve işlemi yeniden deneyebilir.
  • ServiceBusCommunicationError: İstemci Service Bus ile bağlantı kuramıyor. Sağlanan ana bilgisayar adının doğru olduğundan ve konağa ulaşılabilir olduğundan emin olun. Kodunuz güvenlik duvarı/ara sunucu içeren bir ortamda çalışıyorsa Service Bus etki alanına/IP adresine ve bağlantı noktalarına gelen trafiğin engellenmediğinden emin olun.
  • SessionCannotBeLockedError: Belirli bir oturum kimliğine sahip bir oturuma bağlanmayı deneyin, ancak oturum şu anda başka bir istemci tarafından kilitlenmiş durumda. Oturumun kilidinin diğer istemciler tarafından açıldığından emin olun.
  • AutoLockRenewFailed: Arka planda bir ileti veya oturum üzerindeki kilidi yenileme girişimi başarısız oldu. Tarafından kullanılan AutoLockRenewer alıcı kapatıldığında veya yenilenebilir kullanım kilidinin süresi dolduğunda bu durum oluşabilir. İletiyi alarak yenilenebilir iletiyi veya oturumu yeniden kaydetmeniz veya oturumlu varlığa yeniden bağlanmanızı öneririz.
  • AutoLockRenewTimeout: İletiyi veya oturum kilidini yenilemek için ayrılan süre doldu. Otomatik kilitlemenin yenilenmesini isteyen nesneyi yeniden kaydedebilir veya zaman aşımını önceden uzatabilirsiniz.
  • ServiceBusError: Service Bus ile ilgili diğer tüm hatalar. Yukarıda açıklanan tüm hataların kök hata sınıfıdır.

Genel Özel Durum türlerimizin ayrıntılı açıklamaları için lütfen özel durum başvuru belgelerini görüntüleyin.

Sonraki adımlar

Daha fazla örnek kod

Lütfen samples dizininde gönderme, alma, oturum yönetimi ve ileti işleme gibi yaygın Service Bus senaryolarını gösteren diğer örnekleri bulun.

Diğer belgeler

Service Bus hizmeti hakkında daha kapsamlı belgeler için docs.microsoft.com ile ilgili Service Bus belgelerine bakın.

Yönetim özellikleri ve belgeleri

ServiceBus'a karşı yönetim işlemleri gerçekleştirmek isteyen kullanıcılar için (Kuyruk/konu/vb. oluşturma, filtre kurallarını değiştirme, varlıkları listeleme) API belgeleri için azure-mgmt-servicebus belgelerine bakın. Terse kullanım örnekleri burada da bulunabilir.

Saf Python AMQP Aktarım ve Geriye Dönük Uyumluluk Desteği

Azure Service Bus istemci kitaplığı artık saf python AMQP uygulamasını temel alır. uAMQP gerekli bağımlılık olarak kaldırıldı.

Temel alınan aktarım olarak kullanmak uAMQP için:

  1. pip ile yükleyin uamqp .
$ pip install uamqp
  1. İstemci oluşturma sırasında geçin uamqp_transport=True .
from azure.servicebus import ServiceBusClient
connection_str = '<< CONNECTION STRING FOR THE SERVICE BUS NAMESPACE >>'
queue_name = '<< NAME OF THE QUEUE >>'
client = ServiceBusClient.from_connection_string(
    connection_str, uamqp_transport=True
)

Not: message üzerindeServiceBusMessageBatch//ServiceBusMessageServiceBusReceivedMessage daha önce kullanıma sunulan uamqp.Messageözniteliği kullanım dışı bırakılmıştır. Özniteliği tarafından message döndürülen "Eski" nesneler geçişi kolaylaştırmaya yardımcı olmak için tanıtıldı.

Kaynaktan uAMQP tekerleği oluşturma

azure-servicebus AMQP protokolü uygulaması için uAMQP'ye bağlıdır. uAMQP tekerlekleri çoğu büyük işletim sistemi için sağlanır ve yüklenirken azure-servicebusotomatik olarak yüklenir. uAMQP için temel AMQP protokolü uygulaması azure-servicebusolarak kullanılması amaçlanıyorsa, çoğu büyük işletim sistemi için uAMQP tekerlekleri bulunabilir.

uAMQP tekerleklerinin sağlanmadığı bir platformda çalışıyorsanız, lütfen kullanmayı uAMQP düşünüyorsanız ve uAMQP tekerleklerinin sağlanmadığı bir platformda çalıştırıyorsanız, kaynaktan yüklemek için lütfen uAMQP Yükleme yönergelerini izleyin.

Katkıda bulunma

Bu proje, katkı ve önerilere açıktır. Çoğu durumda, sağladığınız katkıyı kullanmamız için bize hak tanıma hakkına sahip olduğunuzu ve bu hakkı bize tanıdığınızı bildiren bir Katkıda Bulunan Lisans Sözleşmesi’ni (CLA) kabul etmeniz gerekir. Ayrıntılar için bkz. https://cla.microsoft.com.

Bir çekme isteği gönderdiğinizde, CLA robotu bir CLA sağlamanız gerekip gerekmediğini otomatik olarak belirler ve çekme isteğini uygun şekilde donatır (örn. etiket, açıklama). Robot tarafından sağlanan yönergeleri izlemeniz yeterlidir. Bu işlemi, CLA’mızı kullanarak tüm depolarda yalnızca bir kere yapmanız gerekir.

Bu proje Microsoft Open Source Code of Conduct (Microsoft Açık Kaynak Kullanım Kuralları) belgesinde listelenen kurallara uygundur. Daha fazla bilgi için Kullanım Kuralları SSS bölümüne bakın veya ek sorular veya yorumlarla iletişime geçin opencode@microsoft.com .