Share via


Azure İşlevleri için Dapr Konu tetikleyicisi

Önemli

Azure İşlevleri için Dapr Uzantısı şu anda önizleme aşamasındadır ve yalnızca Azure Container Apps ortamlarında desteklenir.

Azure İşlevleri, aşağıdaki Dapr olayları kullanılarak bir Dapr konu aboneliğinde tetiklenebilir.

Dapr uzantısının kurulum ve yapılandırma ayrıntıları hakkında bilgi için bkz. Dapr uzantısına genel bakış.

Örnek

C# işlevi aşağıdaki C# modlarından biri kullanılarak oluşturulabilir:

Yürütme modeli Açıklama
Yalıtılmış çalışan modeli İşlev kodunuz ayrı bir .NET çalışan işleminde çalışır. Desteklenen .NET ve .NET Framework sürümleriyle kullanın. Daha fazla bilgi edinmek için bkz . .NET yalıtılmış çalışan işlemi işlevleri geliştirme.
İşlem içi model İşlev kodunuz İşlevler konak işlemiyle aynı işlemde çalışır. .NET'in yalnızca Uzun Süreli Destek (LTS) sürümlerini destekler. Daha fazla bilgi edinmek için bkz . .NET sınıf kitaplığı işlevleri geliştirme.
[FunctionName("TransferEventBetweenTopics")]
public static void Run(
    [DaprTopicTrigger("%PubSubName%", Topic = "A")] CloudEvent subEvent,
    [DaprPublish(PubSubName = "%PubSubName%", Topic = "B")] out DaprPubSubEvent pubEvent,
    ILogger log)
{
    log.LogInformation("C# function processed a TransferEventBetweenTopics request from the Dapr Runtime.");


    pubEvent = new DaprPubSubEvent("Transfer from Topic A: " + subEvent.Data);
}

Dapr Konu tetikleyicisini kullanarak bir konuya abone olmak için java kodu aşağıdadır:

@FunctionName("PrintTopicMessage")
public String run(
        @DaprTopicTrigger(
            pubSubName = "%PubSubName%",
            topic = "B")
        String payload,
        final ExecutionContext context) throws JsonProcessingException {
    Logger logger = context.getLogger();
    logger.info("Java function processed a PrintTopicMessage request from the Dapr Runtime.");

app öğesini kaydetmek daprTopicTriggeriçin nesnesini kullanın:

const { app, trigger } = require('@azure/functions');

app.generic('TransferEventBetweenTopics', {
    trigger: trigger.generic({
        type: 'daprTopicTrigger',
        name: "subEvent",
        pubsubname: "%PubSubName%",
        topic: "A"
    }),
    return: daprPublishOutput,
    handler: async (request, context) => {
        context.log("Node function processed a TransferEventBetweenTopics request from the Dapr Runtime.");
        context.log(context.triggerMetadata.subEvent.data);

        return { payload: context.triggerMetadata.subEvent.data };
    }
});

Aşağıdaki örneklerde, function.json dosyasındaki Dapr tetikleyicileri ve bu bağlamaları kullanan PowerShell kodu gösterilmektedir.

için function.json dosyası aşağıdadır:daprTopicTrigger

{
  "bindings": [
    {
      "type": "daprTopicTrigger",
      "pubsubname": "%PubSubName%",
      "topic": "B",
      "name": "subEvent",
      "direction": "in"
    }
  ]
}

function.json dosya özellikleri hakkında daha fazla bilgi için Yapılandırma bölümüne bakın.

Kod:

using namespace System
using namespace Microsoft.Azure.WebJobs
using namespace Microsoft.Extensions.Logging
using namespace Microsoft.Azure.WebJobs.Extensions.Dapr
using namespace Newtonsoft.Json.Linq

param (
    $subEvent
)

Write-Host "PowerShell function processed a PrintTopicMessage request from the Dapr Runtime."

# Convert the object to a JSON-formatted string with ConvertTo-Json
$jsonString = $subEvent["data"] | ConvertTo-Json -Compress

Write-Host "Topic B received a message: $jsonString"

Aşağıdaki örnekte, v2 Python programlama modelini kullanan bir Dapr Konu tetikleyicisi gösterilmektedir. Python işlev uygulama kodunuzda öğesini kullanmak daprTopicTrigger için:

import logging
import json
import azure.functions as func

app = func.FunctionApp()

@app.function_name(name="PrintTopicMessage")
@app.dapr_topic_trigger(arg_name="subEvent", pub_sub_name="%PubSubName%", topic="B", route="B")
def main(subEvent) -> None:
    logging.info('Python function processed a PrintTopicMessage request from the Dapr Runtime.')
    subEvent_json = json.loads(subEvent)
    logging.info("Topic B received a message: " + subEvent_json["data"])

Özellikler

İşlem içi modelde, aşağıdaki özellikleri destekleyen bir Dapr pub/sub bağlamasını tetikleme amacıyla öğesini kullanınDaprTopicTrigger.

Parametre Açıklama
PubSubName Dapr pub/sub adı.
Konu Dapr konusunun adı.

Ek Açıklamalar

Ek DaprTopicTrigger açıklama, konu alındığında çalışan bir işlev oluşturmanıza olanak tanır.

Öğe Açıklama
pubSubName Dapr pub/sub adı.
topic Dapr konusunun adı.

Yapılandırma

Aşağıdaki tabloda kodda ayarladığınız bağlama yapılandırma özellikleri açıklanmaktadır.

Özellik Açıklama
pubsubname Dapr pub/sub bileşen türünün adı.
topic Konunun adı.

Aşağıdaki tabloda, function.json dosyasında ayarladığınız bağlama yapılandırma özellikleri açıklanmaktadır.

function.json özelliği Açıklama
pubsubname Dapr pub/sub bileşen türünün adı.
topic Konunun adı.

Aşağıdaki tabloda Python kodunuzda ayarladığınız bağlama yapılandırma özellikleri @dapp.dapr_topic_trigger açıklanmaktadır.

Özellik Açıklama Öznitelik aracılığıyla gönderilebilir RequestBody aracılığıyla gönderilebilir
pub_sub_name Dapr aboneliği bileşen türünün adı. ✔️
topic Abonelik konusu. ✔️

Tam örnekler için Örnek bölümüne bakın.

Kullanım

Dapr Konu tetikleyicisi kullanmak için, başlangıç olarak bir Dapr pub/sub bileşeni ayarlayın. Resmi Dapr belgelerinde hangi bileşenin kullanılacağı ve nasıl ayarlanacağı hakkında daha fazla bilgi edinebilirsiniz.

python v2'de kullanmak daprTopicTrigger için projenizi doğru bağımlılıklarla ayarlayın.

  1. Sanal ortam oluşturma ve etkinleştirme.

  2. Dosyanıza requirements.text aşağıdaki satırı ekleyin:

    azure-functions==1.18.0b3
    
  3. Terminalde Python kitaplığını yükleyin.

    pip install -r .\requirements.txt
    
  4. Dosyanızı local.setting.json aşağıdaki yapılandırmayla değiştirin:

    "PYTHON_ISOLATE_WORKER_DEPENDENCIES":1
    

Sonraki adımlar

Dapr yayımlama ve abone olma hakkında daha fazla bilgi edinin.