Azure Işlevleri için Azure Event Hubs tetikleyicisi

Bu makalede, Azure Işlevleri için azure Event Hubs tetikleyicisiyle nasıl çalışılacağı açıklanmaktadır. Azure Işlevleri Event Hubs için tetikleyiciyi ve Çıkış bağlamalarını destekler.

Kurulum ve yapılandırma ayrıntıları hakkında bilgi için bkz. genel bakış.

Olay hub'ı olay akışına gönderilen bir olayı yanıtlamak için işlev tetikleyicisi kullanın. Tetikleyiciyi ayarlamak için temel olay hub'ını okuma erişiminizin olması gerekir. İşlev tetiklendiğinde, işleve geçirilen ileti dize olarak yazın.

Ölçeklendirme

Olayla tetiklenen bir işlevin her örneği tek bir EventProcessorHost örneği tarafından de desteklenir. Tetikleyici (Event Hubs) yalnızca bir EventProcessorHost örneğinin verilen bölümde kira alamalarını sağlar.

Örneğin, aşağıdaki gibi bir Olay Hub'ı düşünün:

  • 10 bölüm
  • Tüm bölümlere eşit olarak dağıtılmış 1.000 olay ve her bölümde 100 ileti

İşlevi ilk kez etkinleştirildiğinde, işlevin yalnızca bir örneği vardır. İlk işlev örneğini çağır Function_0 bakalım. işlevi, Function_0 on bölümde de kiralama tutan tek bir EventProcessorHost örneğine sahiptir. Bu örnek, 0-9 bölümlerinden olayları okuyor. Bu noktadan sonra, aşağıdakilerden biri gerçekleşir:

  • Yeni işlev örnekleri gerekmez: İşlevler ölçeklendirme mantığının etkili olmadan önce Function_0 1.000 olay da işleyenegeldi. Bu durumda, 1.000 ileti de tarafından Function_0 işlenir.

  • Ek bir işlev örneği eklenir: İşlevler ölçeklendirme mantığı, işleyenden daha fazla ileti olduğunu belirlerse, yeni bir Function_0 işlev uygulaması örneği ( ) Function_1 oluşturulur. Bu yeni işlev, EventProcessorHost'un ilişkili bir örneğine de sahiptir. Temel alınan Event Hubs, yeni bir konak örneğinin iletileri okumaya çalıştığını algılaya kadar, konak örnekleri genelinde bölümlerin yükünü dengeler. Örneğin, 0-4 bölümlerine ve Function_0 5-9 bölümlerine Function_1 atanabilir.

  • N işlev örneği daha eklendi: İşlevler ölçeklendirme mantığı hem hem de işleyene kadar daha fazla ileti olduğunu belirlerse, Function_0 yeni işlev uygulaması örnekleri Function_1 Functions_N oluşturulur. Uygulamalar, olay N hub'ı bölümlerinin sayısından büyük olacak şekilde oluşturulur. Örneğimizde, Event Hubs bölümler için yük dengelemesi yeniden oluşturacağız. Bu örnekte... Function_0 Functions_9 .

Ölçeklendirme gerçekleşirken N örnekler, olay hub'ı bölümleri sayısından büyük bir sayıdır. Bu düzen, EventProcessorHost örneklerinin diğer örneklerden kullanılabilir hale geldiklerinden bölümlere kilit almak için kullanılabilir olduğundan emin olmak için kullanılır. Yalnızca işlev örneği yürütülürken kullanılan kaynaklar için ücret ödemezsiniz. Başka bir deyişle, bu fazla sağlama için ücret ödemezsiniz.

Tüm işlev yürütmesi tamamlandığında (hatayla veya hata olmadan), ilgili depolama hesabına denetim noktaları eklenir. Denetim noktası başarılı olduğunda, 1.000 ilanın hepsi bir daha asla alınamayacaktır.

Aşağıdaki örnekte olay hub'ı tetikleyicisi ileti gövdelerini günlüğe kaydeden bir C# işlevi yer alır.

[FunctionName("EventHubTriggerCSharp")]
public static void Run([EventHubTrigger("samples-workitems", Connection = "EventHubConnectionAppSetting")] string myEventHubMessage, ILogger log)
{
    log.LogInformation($"C# function triggered to process a message: {myEventHubMessage}");
}

İşlev kodundaki olay meta verilerine erişmek için eventData nesnesine bağlanın (için bir using deyimi Microsoft.Azure.EventHubs gerektirir). Aynı özelliklere erişmek için yöntem imzasını bağlama ifadelerini de kullanabilirsiniz. Aşağıdaki örnek, aynı verileri almak için iki yolu da gösterir:

[FunctionName("EventHubTriggerCSharp")]
public static void Run(
    [EventHubTrigger("samples-workitems", Connection = "EventHubConnectionAppSetting")] EventData myEventHubMessage,
    DateTime enqueuedTimeUtc,
    Int64 sequenceNumber,
    string offset,
    ILogger log)
{
    log.LogInformation($"Event: {Encoding.UTF8.GetString(myEventHubMessage.Body)}");
    // Metadata accessed by binding to EventData
    log.LogInformation($"EnqueuedTimeUtc={myEventHubMessage.SystemProperties.EnqueuedTimeUtc}");
    log.LogInformation($"SequenceNumber={myEventHubMessage.SystemProperties.SequenceNumber}");
    log.LogInformation($"Offset={myEventHubMessage.SystemProperties.Offset}");
    // Metadata accessed by using binding expressions in method parameters
    log.LogInformation($"EnqueuedTimeUtc={enqueuedTimeUtc}");
    log.LogInformation($"SequenceNumber={sequenceNumber}");
    log.LogInformation($"Offset={offset}");
}

Bir toplu iş içinde olayları almak için bir dizi string veya EventData olun.

Not

Bir toplu iş içinde alırken yukarıdaki örnekte olduğu gibi metot parametrelerine bağlanamazsınız ve bunları her DateTime enqueuedTimeUtc nesneden EventData alasınız

[FunctionName("EventHubTriggerCSharp")]
public static void Run([EventHubTrigger("samples-workitems", Connection = "EventHubConnectionAppSetting")] EventData[] eventHubMessages, ILogger log)
{
    foreach (var message in eventHubMessages)
    {
        log.LogInformation($"C# function triggered to process a message: {Encoding.UTF8.GetString(message.Body)}");
        log.LogInformation($"EnqueuedTimeUtc={message.SystemProperties.EnqueuedTimeUtc}");
    }
}

Öznitelikler ve ek açıklamalar

C# sınıf kitaplıklarında EventHubTriggerAttribute özniteliğini kullanın.

Özniteliğin oluşturucusu olay hub'larının adını, tüketici grubunun adını ve bağlantı dizesini içeren bir uygulama ayarının adını alır. Bu ayarlar hakkında daha fazla bilgi için tetikleyici yapılandırması bölümüne bakın. Öznitelik örneği şu EventHubTriggerAttribute şekildedir:

[FunctionName("EventHubTriggerCSharp")]
public static void Run([EventHubTrigger("samples-workitems", Connection = "EventHubConnectionAppSetting")] string myEventHubMessage, ILogger log)
{
    ...
}

Tam bir örnek için bkz. Tetikleyici - C# örneği.

Yapılandırma

Aşağıdaki tabloda function.json dosyasında ayar istediğiniz bağlama yapılandırma özellikleri ve özniteliği açık EventHubTrigger bulunmaktadır.

function.json özelliği Öznitelik özelliği Description
Türü yok olarak ayarlanmış olması eventHubTrigger gerekir. Bu özellik, tetikleyiciyi Azure portal.
Yön yok olarak ayarlanmış olması in gerekir. Bu özellik, tetikleyiciyi Azure portal.
Adı yok İşlev kodundaki olay öğesini temsil eden değişkenin adı.
Yolu EventHubName Yalnızca 1.x işlevleri. Olay hub'larının adı. Bağlantı dizesinde olay hub'ı adı da mevcut olduğunda, bu değer çalışma zamanında bu özelliği geçersiz kılar.
eventHubName EventHubName İşlevler 2.x ve üst. Olay hub'larının adı. Bağlantı dizesinde olay hub'ı adı da mevcut olduğunda, bu değer çalışma zamanında bu özelliği geçersiz kılar. Uygulama ayarları aracılığıyla başvurulabilirsiniz %eventHubName%
consumerGroup ConsumerGroup Hub'daki olaylara abone olmak için kullanılan tüketici grubunu ayaran isteğe bağlı bir özellik. Atlanırsa tüketici $Default grubu kullanılır.
Önem düzeyi yok C# olmayan tüm diller için kullanılır. Toplu işlemi many etkinleştirmek için olarak ayarlayın. Atlanırsa veya olarak one ayarlanırsa işleve tek bir ileti geçirilebilir.

C# içinde, tetikleyici türü için bir diziye sahip olduğunda bu özellik otomatik olarak atanır.
Bağlantı Bağlantı Uygulama ayarı veya uygulama ayarları koleksiyonuna bağlanmayı belirten Event Hubs. Bkz. Bağlantılar.

Yerel olarak geliştirilirken, uygulama ayarları local.settings.jsdosyasınagider.

Bağlantılar

connectionÖzelliği, uygulamanın Event Hubs nasıl bağlanması gerektiğini belirten ortam yapılandırmasına bir başvurudur. Şunları belirtebilir:

Yapılandırılmış değer tek bir ayar için tam eşleşmedir ve diğer ayarlarla ilgili önek eşleşiyorsa, tam eşleşme kullanılır.

Bağlantı dizesi

Olay Hub 'ının kendisi değil, ad alanıIçin bağlantı bilgileri düğmesine tıklayarak bu bağlantı dizesini edinin. Bağlantı dizesi, Olay Hub 'ının değil, bir Event Hubs ad alanı için olmalıdır.

Tetikleyiciler için kullanıldığında bağlantı dizesinin, işlevi etkinleştirmek için en azından "okuma" izinlerine sahip olması gerekir. Çıkış bağlamaları için kullanıldığında, bağlantı dizesinin olay akışına ileti göndermek için "Gönder" izinleri olmalıdır.

Bu bağlantı dizesi, bağlama yapılandırmasının özelliği tarafından belirtilen değerle eşleşen bir ada sahip bir uygulama ayarında depolanmalıdır connection .

Kimlik tabanlı bağlantılar

uzantının 5. x veya üzeri sürümünükullanıyorsanız, gizli anahtar içeren bir bağlantı dizesi kullanmak yerine uygulamanın bir Azure Active Directory kimliğikullanmasını sağlayabilirsiniz. Bunu yapmak için, connection tetikleyici ve bağlama yapılandırmasındaki özelliğe eşleyen ortak bir ön ek altında ayarlar tanımlayabilirsiniz.

Bu modda, uzantı aşağıdaki özellikleri gerektirir:

Özellik Ortam değişkeni şablonu Description Örnek değer
Tam nitelikli ad alanı <CONNECTION_NAME_PREFIX>__fullyQualifiedNamespace Tam nitelikli Event Hubs ad alanı. <event_hubs_namespace>. servicebus.windows.net

Bağlantıyı özelleştirmek için ek özellikler ayarlanabilir. Bkz. kimlik tabanlı bağlantılar Için ortak özellikler.

Azure Işlevleri hizmetinde barındırıldığında, kimlik tabanlı bağlantılar yönetilen bir kimlikkullanır. Sistem tarafından atanan kimlik, ve özellikleriyle kullanıcı tarafından atanan bir kimlik belirtibilse de varsayılan olarak kullanılır credential clientID . Yerel geliştirme gibi diğer bağlamlarda çalıştırıldığında geliştirici kimliğiniz bunun yerine özelleştirilebilir. Bkz. kimlik tabanlı bağlantılarla yerel geliştirme.

Kimliğe izin ver

Kullanılan kimliğin istenen eylemleri gerçekleştirmek için izinleri olması gerekir. Azure RBAC 'de, bu izinleri sağlayan yerleşik veya özel roller kullanarak bir rol atamanızgerekir.

Önemli

Bazı izinler, tüm bağlamlarda gerekli olmayan hedef hizmet tarafından açığa çıkabilir. Mümkün olduğunda, en az ayrıcalık ilkesine bağlı olarak yalnızca kimlik gerekli ayrıcalıkları veriliyor. Örneğin, uygulamanın yalnızca bir veri kaynağından okuyabilmesi gerekiyorsa, yalnızca okuma iznine sahip olan bir rol kullanın. Bu hizmetin yazılmasına izin veren bir rol atamak uygun değildir, çünkü bu, okuma işlemi için aşırı izindir. Benzer şekilde, rol atamasının yalnızca okunması gereken kaynaklar üzerinde kapsam olmasını sağlamak isteyeceksiniz.

Çalışma zamanında Olay Hub 'ınıza erişim sağlayan bir rol ataması oluşturmanız gerekecektir. Rol atamasının kapsamı, Olay Hub 'ının değil, bir Event Hubs ad alanı için olmalıdır. Sahip gibi yönetim rolleri yeterli değildir. Aşağıdaki tabloda, Event Hubs uzantısı normal işleminde kullanılırken önerilen yerleşik roller gösterilmektedir. Uygulamanız, yazdığınız koda göre ek izinler gerektirebilir.

Bağlama türü Örnek yerleşik roller
Tetikleyici Azure [Event Hubs veri alıcısı], Azure Event Hubs veri sahibi
Çıkış bağlama Azure Event Hubs veri gönderici

Kullanım

Varsayılan

Tetikleyici Olay Hub'ı için aşağıdaki parametre türlerini kullanabilirsiniz:

Ek türler

Event Hub uzantısının 5.0.0 veya daha yüksek sürümünü kullanan EventData uygulamalar, Microsoft.Azure.EventHubs ad alanı yerine Azure.Messaging.EventHubs türünü kullanır. Bu sürüm, aşağıdaki türler Body için eski tür desteğini bıraktı:

Olay meta verileri

Bu Event Hubs çeşitli meta veri özellikleri sağlar. Meta veri özellikleri, diğer bağlamalarda bağlama ifadelerinin bir parçası olarak veya kodunda parametre olarak kullanılabilir. Özellikler EventData sınıfından gelir.

Özellik Tür Description
PartitionContext PartitionContext PartitionContext örneği.
EnqueuedTimeUtc DateTime UTC olarak enqueued saat.
Offset string Verilerin Olay Hub'ı bölüm akışına göre uzaklığı. Uzaklık, akış içindeki bir olayın işaretçisi veya tanımlayıcısı Event Hubs olur. Tanımlayıcı, veri akışının bir Event Hubs benzersizdir.
PartitionKey string Olay verilerini göndermesi gereken bölüm.
Properties IDictionary<String,Object> Olay verisi kullanıcı özellikleri.
SequenceNumber Int64 Olayın mantıksal sıra numarası.
SystemProperties IDictionary<String,Object> Olay verileri de dahil olmak üzere sistem özellikleri.

Bu makalenin başlarında bu özellikleri kullanan kod örneklerine bakın.

Ayarlar üzerinde host.js

Dosyadaki host.js , Olay Hub 'ı tetikleme davranışını denetleyen ayarları içerir. Kullanılabilir ayarlarla ilgili ayrıntılar için ayarlarıhost.js bölümüne bakın.

Sonraki adımlar