ربط إخراج Dapr Publish ل Azure Functions

يسمح لك ربط إخراج نشر Dapr بنشر رسالة إلى موضوع Dapr أثناء تنفيذ دالة.

للحصول على معلومات حول تفاصيل الإعداد والتكوين لملحق Dapr، راجع نظرة عامة على ملحق Dapr.

مثال

يمكن إنشاء وظيفة #C باستخدام أحد أوضاع C# التالية:

نموذج التنفيذ ‏‏الوصف
نموذج عامل معزول تعمل تعليمة دالتك البرمجية في عملية عامل .NET منفصلة. استخدم مع الإصدارات المدعومة من .NET و.NET Framework. لمعرفة المزيد، راجع تطوير وظائف معالجة العامل المعزولة .NET.
نموذج قيد المعالجة تعمل تعليمة دالتك البرمجية في نفس العملية مثل عملية مضيف الدالات. يدعم إصدارات الدعم طويل الأجل (LTS) فقط من .NET. لمعرفة المزيد، راجع تطوير وظائف مكتبة فئة .NET.

يوضح المثال التالي استخدام ربط إخراج نشر Dapr لتنفيذ عملية نشر Dapr إلى مكون و موضوع pub/sub.

[FunctionName("PublishOutputBinding")]
public static void Run(
    [HttpTrigger(AuthorizationLevel.Function, "post", Route = "topic/{topicName}")] HttpRequest req,
    [DaprPublish(PubSubName = "%PubSubName%", Topic = "{topicName}")] out DaprPubSubEvent pubSubEvent,
    ILogger log)
{
    string requestBody = new StreamReader(req.Body).ReadToEnd();
    pubSubEvent = new DaprPubSubEvent(requestBody);
}

ينشئ المثال التالي دالة "TransferEventBetweenTopics" باستخدام DaprPublishOutput الربط مع DaprTopicTrigger:

@FunctionName("TransferEventBetweenTopics")
public String run(
        @DaprTopicTrigger(
            pubSubName = "%PubSubName%",
            topic = "A")
            String request,
        @DaprPublishOutput(
            pubSubName = "%PubSubName%",
            topic = "B")
        OutputBinding<String> payload,
        final ExecutionContext context) throws JsonProcessingException {
    context.getLogger().info("Java function processed a TransferEventBetweenTopics request from the Dapr Runtime.");
}

في المثال التالي، يتم إقران ربط إخراج نشر Dapr بمشغل HTTP، والذي تم تسجيله بواسطة app الكائن:

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

app.generic('PublishOutputBinding', {
    trigger: trigger.generic({
        type: 'httpTrigger',
        authLevel: 'anonymous',
        methods: ['POST'],
        route: "topic/{topicName}",
        name: "req"
    }),
    return: daprPublishOutput,
    handler: async (request, context) => {
        context.log("Node HTTP trigger function processed a request.");
        const payload = await request.text();
        context.log(JSON.stringify(payload));

        return { payload: payload };
    }
});

تظهر الأمثلة التالية مشغلات Dapr في ملف function.json ورمز PowerShell الذي يستخدم هذه الروابط.

فيما يلي ملف function.json ل daprPublish:

{
  "bindings": 
    {
      "type": "daprPublish",
      "direction": "out",
      "name": "pubEvent",
      "pubsubname": "%PubSubName%",
      "topic": "B"
    }
}

لمزيد من المعلومات حول خصائص الملف function.json ، راجع قسم التكوين .

في التعليمات البرمجية:

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

# Example to use Dapr Service Invocation Trigger and Dapr State Output binding to persist a new state into statestore
param (
    $subEvent
)

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

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

$messageFromTopicA = "Transfer from Topic A: $jsonString".Trim()

$publish_output_binding_req_body = @{
    "payload" = $messageFromTopicA
}

# Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name pubEvent -Value $publish_output_binding_req_body

يوضح المثال التالي ربط إخراج Dapr Publish، والذي يستخدم نموذج برمجة v2 Python. لاستخدامها daprPublish في التعليمات البرمجية لتطبيق وظائف Python:

import logging
import json
import azure.functions as func

app = func.FunctionApp()

@app.function_name(name="TransferEventBetweenTopics")
@app.dapr_topic_trigger(arg_name="subEvent", pub_sub_name="%PubSubName%", topic="A", route="A")
@app.dapr_publish_output(arg_name="pubEvent", pub_sub_name="%PubSubName%", topic="B")
def main(subEvent, pubEvent: func.Out[bytes]) -> None:
    logging.info('Python function processed a TransferEventBetweenTopics request from the Dapr Runtime.')
    subEvent_json = json.loads(subEvent)
    payload = "Transfer from Topic A: " + str(subEvent_json["data"])
    pubEvent.set(json.dumps({"payload": payload}).encode('utf-8'))

السمات

في النموذج قيد المعالجة، استخدم DaprPublish لتعريف ربط إخراج نشر Dapr، والذي يدعم هذه المعلمات:

خاصية function.json ‏‏الوصف يمكن إرسالها عبر السمة يمكن إرسالها عبر RequestBody
PubSubName اسم Dapr pub/sub لإرسال الرسالة. ✔️ ✔️
الموضوع اسم موضوع Dapr لإرسال الرسالة. ✔️ ✔️
حموله مطلوب. الرسالة التي يتم نشرها. ✔️

تعليقات توضيحية

DaprPublishOutput يسمح لك التعليق التوضيحي بالوصول إلى دالة إلى رسالة منشورة.

العنصر الوصف يمكن إرسالها عبر السمة يمكن إرسالها عبر RequestBody
pubSubName اسم Dapr pub/sub لإرسال الرسالة. ✔️ ✔️
الموضوع اسم موضوع Dapr لإرسال الرسالة. ✔️ ✔️
حموله مطلوب. الرسالة التي يتم نشرها. ✔️

التكوين

يوضح الجدول التالي خصائص تكوين الربط التي قمت بتعيينها في التعليمات البرمجية.

الخاصية ‏‏الوصف يمكن إرسالها عبر السمة يمكن إرسالها عبر RequestBody
pubsubname اسم خدمة مكون الناشر. ✔️ ✔️
الموضوع اسم/معرف موضوع الناشر. ✔️ ✔️
حموله مطلوب. الرسالة التي يتم نشرها. ✔️

يشرح الجدول الآتي خصائص تكوين ربط البيانات التي عليك تعيينها في ملف function.json.

خاصية function.json ‏‏الوصف يمكن إرسالها عبر السمة يمكن إرسالها عبر RequestBody
pubsubname اسم خدمة مكون الناشر. ✔️ ✔️
الموضوع اسم/معرف موضوع الناشر. ✔️ ✔️
حموله مطلوب. الرسالة التي يتم نشرها. ✔️

يوضح الجدول التالي خصائص تكوين الربط التي @dapp.dapr_publish_output قمت بتعيينها في التعليمات البرمجية ل Python.

الخاصية ‏‏الوصف يمكن إرسالها عبر السمة يمكن إرسالها عبر RequestBody
pub_sub_name اسم حدث الناشر. ✔️ ✔️
الموضوع اسم/معرف موضوع الناشر. ✔️ ✔️
حموله مطلوب. الرسالة التي يتم نشرها. ✔️

إذا تم تعريف الخصائص في كل من السمات و RequestBody، يتم إعطاء الأولوية للبيانات المقدمة في RequestBody.

راجع قسم Example للحصول على أمثلة كاملة.

الاستخدام

لاستخدام ربط إخراج نشر Dapr، ابدأ بإعداد مكون Dapr pub/sub. يمكنك معرفة المزيد حول المكون الذي يجب استخدامه وكيفية إعداده في وثائق Dapr الرسمية.

لاستخدام daprPublish في Python v2، قم بإعداد مشروعك باستخدام التبعيات الصحيحة.

  1. إنشاء بيئة ظاهرية وتنشيطها.

  2. في الملف، requirements.text أضف السطر التالي:

    azure-functions==1.18.0b3
    
  3. في المحطة الطرفية، قم بتثبيت مكتبة Python.

    pip install -r .\requirements.txt
    
  4. قم بتعديل الملف الخاص بك local.setting.json بالتكوين التالي:

    "PYTHON_ISOLATE_WORKER_DEPENDENCIES":1
    

الخطوات التالية

تعرف على المزيد حول نشر Dapr والاشتراك فيه.