Azure İşlevleri için Azure Service Bus bağlamaları

Azure İşlevleri ile tümleşirTetikleyiciler ve bağlamalar aracılığıyla Azure Service Bus. Service Bus ile tümleştirme, kuyruğa veya konu iletilerine tepki veren ve gönderen işlevler oluşturmanıza olanak tanır.

Eylem Tür
Service Bus kuyruğu veya konu iletisi oluşturulduğunda işlev çalıştırma Tetikleyici
Azure Service Bus iletileri gönderme Çıkış bağlaması

Uzantıyı yükleme

Yüklediğiniz NuGet uzantısı, işlev uygulamanızda kullandığınız C# moduna bağlıdır:

İşlevler yalıtılmış bir C# çalışan işleminde yürütülür. Daha fazla bilgi edinmek için bkz. Yalıtılmış çalışan işleminde C# Azure İşlevleri çalıştırma kılavuzu.

Uzantıyı bu NuGet paketini yükleyerek projenize ekleyin.

Uzantının işlevselliği, uzantı sürümüne bağlı olarak değişir:

Bu sürüm gizli dizi yerine kimlik kullanarak bağlanma özelliğini tanıtır. İşlev uygulamalarınızı yönetilen kimliklerle yapılandırma öğreticisi için kimlik tabanlı bağlantılarla işlev uygulaması oluşturma öğreticisine bakın.

Bu sürüm, Azure.Messaging.ServiceBus'tan türlere bağlamanıza olanak tanır.

NuGet paketi, sürüm 5.x'i yükleyerek uzantıyı projenize ekleyin.

Paket yükleme

Service Bus bağlaması, host.json proje dosyanızda belirtilen bir uzantı paketinin parçasıdır. Bağlamanın sürümünü değiştirmek için veya paketler henüz yüklü değilse bu paketi değiştirmeniz gerekebilir. Daha fazla bilgi edinmek için bkz . uzantı paketi.

Bu sürüm gizli dizi yerine kimlik kullanarak bağlanma özelliğini tanıtır. İşlev uygulamalarınızı yönetilen kimliklerle yapılandırma öğreticisi için kimlik tabanlı bağlantılarla işlev uygulaması oluşturma öğreticisine bakın.

Uzantı paketi v3'ten, dosyanıza host.json aşağıdaki kodu ekleyerek veya değiştirerek uzantının bu sürümünü ekleyebilirsiniz:

{
    "version": "2.0",
    "extensionBundle": {
        "id": "Microsoft.Azure.Functions.ExtensionBundle",
        "version": "[3.3.0, 4.0.0)"
    }
}

Daha fazla bilgi edinmek için bkz . Uzantılarınızı güncelleştirme.

Bağlama türleri

.NET için desteklenen bağlama türleri, aşağıdakilerden biri olabilecek uzantı sürümüne ve C# yürütme moduna bağlıdır:

Yalıtılmış çalışan işlem sınıfı kitaplığı derlenmiş C# işlevi çalışma zamanından yalıtılmış bir işlemde çalışır.

Modun ve sürümün bağlama türü ayrıntılarını görmek için bir sürüm seçin.

Yalıtılmış çalışan işlemi, aşağıdaki tablolara göre parametre türlerini destekler.

Service Bus tetikleyicisi

İşlevin tek bir iletiyi işlemesini istediğinizde, Service Bus tetikleyicisi aşağıdaki türlere bağlanabilir:

Type Açıklama
string İleti bir dize olarak. İleti basit bir metin olduğunda kullanın.
byte[] İletinin baytları.
JSON serileştirilebilir türler Bir olay JSON verileri içerdiğinde İşlevler, JSON verilerinin seri durumdan çıkarılarak düz eski bir CLR nesnesi (POCO) türüne dönüştürülmeye çalışılır.
ServiceBusReceivedMessage1 İleti nesnesi.

öğesine ServiceBusReceivedMessagebağlarken, isteğe bağlı olarak ileti düzenleme eylemleri gerçekleştirmek için ServiceBusMessageActions1,2 türünde bir parametre de ekleyebilirsiniz.

İşlevin bir toplu ileti işlemesini istediğinizde, Service Bus tetikleyicisi aşağıdaki türlere bağlanabilir:

Type Açıklama
T[] burada T tek ileti türlerinden biridir Toplu işlemden olay dizisi. Her girdi bir olayı temsil eder.

öğesine ServiceBusReceivedMessage[]bağlarken, isteğe bağlı olarak ileti düzenleme eylemleri gerçekleştirmek için ServiceBusMessageActions1,2 türünde bir parametre de ekleyebilirsiniz.

1 Bu türleri kullanmak için Microsoft.Azure.Functions.Worker.Extensions.ServiceBus 5.14.1 veya sonraki sürümlerine ve SDK türü bağlamaları için ortak bağımlılıklara başvurmanız gerekir.

2 kullanırken tetikleyici özniteliğinin özelliğini olarak falseayarlayınAutoCompleteMessages.ServiceBusMessageActions Bu, çalışma zamanının başarılı bir işlev çağrısından sonra iletileri tamamlamaya çalışmasını engeller.

Service Bus çıkış bağlaması

İşlevin tek bir ileti yazmasını istediğinizde, Service Bus çıkış bağlaması aşağıdaki türlere bağlanabilir:

Type Açıklama
string İleti bir dize olarak. İleti basit bir metin olduğunda kullanın.
byte[] İletinin baytları.
JSON serileştirilebilir türler İletiyi temsil eden bir nesne. İşlevler, düz eski bir CLR nesnesi (POCO) türünü JSON verilerine seri hale getirme girişiminde bulunur.

İşlevin birden çok ileti yazmasını istediğinizde, Service Bus çıkış bağlaması aşağıdaki türlere bağlanabilir:

Type Açıklama
T[] burada T tek ileti türlerinden biridir Birden çok ileti içeren bir dizi. Her girdi bir iletiyi temsil eder.

Diğer çıkış senaryoları için, doğrudan Azure.Messaging.ServiceBus'tan türler oluşturun ve kullanın.

host.json ayarları

Bu bölümde, çalışma zamanına ve uzantı sürümüne bağlı olarak bu bağlama için kullanılabilen yapılandırma ayarları açıklanmaktadır.

{
    "version": "2.0",
    "extensions": {
        "serviceBus": {
            "clientRetryOptions":{
                "mode": "exponential",
                "tryTimeout": "00:01:00",
                "delay": "00:00:00.80",
                "maxDelay": "00:01:00",
                "maxRetries": 3
            },
            "prefetchCount": 0,
            "transportType": "amqpWebSockets",
            "webProxy": "https://proxyserver:8080",
            "autoCompleteMessages": true,
            "maxAutoLockRenewalDuration": "00:05:00",
            "maxConcurrentCalls": 16,
            "maxConcurrentSessions": 8,
            "maxMessageBatchSize": 1000,
            "minMessageBatchSize": 1,
            "maxBatchWaitTime": "00:00:30",
            "sessionIdleTimeout": "00:01:00",
            "enableCrossEntityTransactions": false
        }
    }
}

Ayarlar clientRetryOptions yalnızca Service Bus hizmetiyle etkileşimler için geçerlidir. Bunlar, işlev yürütmelerinin yeniden denemelerini etkilemez. Daha fazla bilgi için bkz . Yeniden denemeler.

Özellik Varsayılan Açıklama
mod Exponential Yeniden deneme gecikmelerini hesaplamak için kullanılacak yaklaşım. Varsayılan üstel mod, her denemenin yeniden denemeden önce bekleme süresini artırdığı bir geri alma stratejisine dayalı olarak denemeleri gecikmeli olarak yeniden dener. Mod Fixed , her gecikmenin tutarlı bir süreye sahip olmasıyla sabit aralıklarla yeniden denemeler yapıyor.
tryTimeout 00:01:00 Deneme başına bir işlemin beklenme süresi üst sınırı.
Gecikme 00:00:00.80 Yeniden deneme girişimleri arasında uygulanacak gecikme veya geri kapatma faktörü.
maxDelay 00:01:00 Yeniden deneme girişimleri arasında izin vermek için en fazla gecikme süresi
maxRetries 3 İlişkili işlemin başarısız olduğu düşünülmeden önce en fazla yeniden deneme deneme sayısı.
prefetchCount 0 İleti alıcısının aynı anda isteyebileceği ileti sayısını alır veya ayarlar.
Transporttype amqpTcp Service Bus ile iletişim kurmak için kullanılan protokol ve aktarım. Kullanılabilir seçenekler: amqpTcp, amqpWebSockets
Webproxy yok Web yuvaları üzerinden Service Bus ile iletişim kurmak için kullanılacak proxy. Aktarım ile amqpTcp ara sunucu kullanılamaz.
autoCompleteMessages true İşlev başarıyla yürütüldikten sonra iletilerin otomatik olarak tamamlanıp tamamlanmayacağını belirler.
maxAutoLockRenewalDuration 00:05:00 İleti kilidinin otomatik olarak yenileneceği en uzun süre. Bu ayar, aynı anda yalnızca tek bir ileti alan işlevler için geçerlidir.
Maxconcurrentcalls 16 Ölçeklendirilmiş örnek başına başlatılması gereken en fazla eş zamanlı geri çağırma sayısı. varsayılan olarak İşlevler çalışma zamanı birden çok iletiyi eşzamanlı olarak işler. Bu ayar yalnızca tetikleyicideki isSessionsEnabled özellik veya öznitelik olarak falseayarlandığında kullanılır. Bu ayar, aynı anda yalnızca tek bir ileti alan işlevler için geçerlidir.
Maxconcurrentsessions 8 Ölçeklendirilmiş örnek başına eşzamanlı olarak işlenebilen en fazla oturum sayısı. Bu ayar yalnızca tetikleyicideki isSessionsEnabled özellik veya öznitelik olarak trueayarlandığında kullanılır. Bu ayar, aynı anda yalnızca tek bir ileti alan işlevler için geçerlidir.
maxMessageBatchSize 1000 Her işlev çağrısına geçirilecek ileti sayısı üst sınırı. Bu ayar yalnızca toplu ileti alan işlevler için geçerlidir.
minMessageBatchSize1 1 Toplu işlemde istenen en düşük ileti sayısı. En düşük değer yalnızca işlev birden çok ileti aldığında geçerlidir ve değerinden maxMessageBatchSizeküçük olmalıdır.
Minimum boyut kesinlikle garanti değildir. Tam bir toplu iş tamamlanmadan önce maxBatchWaitTime hazırlanamıyorsa kısmi bir toplu iş gönderilir.
maxBatchWaitTime1 00:00:30 Tetikleyicinin işlevi çağırmadan önce toplu işlemi doldurmak için beklemesi gereken maksimum aralık. Bekleme süresi yalnızca 1'den büyük olduğunda minMessageBatchSize kabul edilir ve aksi takdirde yoksayılır. Bekleme süresi dolmadan önce daha az minMessageBatchSize ileti kullanılabiliyorsa, işlev kısmi bir toplu işlemle çağrılır. İzin verilen en uzun bekleme süresi, varlık ileti kilitleme süresinin %50'sini oluşturur; bu da izin verilen en uzun sürenin 2 dakika 30 saniye olduğu anlamına gelir. Aksi takdirde kilit özel durumları alabilirsiniz.

NOT: Bu aralık, işlevin çağrıldığı tam zamanlama için kesin bir garanti değildir. Süreölçer duyarlığı nedeniyle küçük bir hata kenar boşluğu vardır.
sessionIdleTimeout yok Etkin durumdaki oturum için iletinin alınmasını bekleme süresi üst sınırı. Bu süre geçtikten sonra oturum kapatılır ve işlev başka bir oturumu işlemeye çalışır.
enableCrossEntityTransactions false Service Bus ad alanında birden çok varlığı kapsayan işlemlerin etkinleştirilip etkinleştirilmeyileceği.

1 ve kullanmak minMessageBatchSizemaxBatchWaitTime için paketin Microsoft.Azure.WebJobs.Extensions.ServiceBus v5.10.0 veya sonraki bir sürümü gerekir.

Sonraki adımlar