ربط بيانات ناتج ناقل خدمة Microsoft Azure لوظائف Azure

استخدام ربط بيانات ناتج ناقل خدمة Microsoft Azure لإرسال رسائل قائمة الانتظار أو الموضوع.

للحصول على معلومات حول تفاصيل الإعداد والتكوين، راجع الاستعراض العام.

مثال

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

يُظهر المثال التالي دالة #C ترسل رسالة قائمة انتظار "ناقل خدمة Azure":

[FunctionName("ServiceBusOutput")]
[return: ServiceBus("myqueue", Connection = "ServiceBusConnection")]
public static string ServiceBusOutput([HttpTrigger] dynamic input, ILogger log)
{
    log.LogInformation($"C# function processed: {input.Text}");
    return input.Text;
}

يُظهر المثال التالي دالة Java التي ترسل رسالة إلى قائمة انتظار "ناقل خدمة Azure" myqueue عند تشغيلها بواسطة طلب HTTP.

@FunctionName("httpToServiceBusQueue")
@ServiceBusQueueOutput(name = "message", queueName = "myqueue", connection = "AzureServiceBusConnection")
public String pushToQueue(
  @HttpTrigger(name = "request", methods = {HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS)
  final String message,
  @HttpOutput(name = "response") final OutputBinding<T> result ) {
      result.setValue(message + " has been sent.");
      return message;
 }

في مكتبة وقت تشغيل دوال Java، استخدم التعليق @QueueOutput التوضيحي على معلمات الدالة التي سيتم كتابة قيمتها إلى قائمة انتظار ناقل خدمة Azure. يجب أن يكون نوع المعلمة OutputBinding<T>، حيث T هو أي نوع Java أصلي أو POJO.

كما يمكن كتابة دوال Java إلى موضوع "ناقل خدمة Azure". يستخدم المثال التالي التعليق التوضيحي @ServiceBusTopicOutput لوصف التكوين لربط بيانات الناتج.

@FunctionName("sbtopicsend")
    public HttpResponseMessage run(
            @HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> request,
            @ServiceBusTopicOutput(name = "message", topicName = "mytopicname", subscriptionName = "mysubscription", connection = "ServiceBusConnection") OutputBinding<String> message,
            final ExecutionContext context) {

        String name = request.getBody().orElse("Azure Functions");

        message.setValue(name);
        return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + name).build();

    }

يُظهر المثال التالي ربط بيانات ناتج ناقل خدمة Azure في ملف function.json ودالة JavaScript التي تستخدم ربط البيانات. تستخدم الدالة مشغل مُؤقت لإرسال رسالة قائمة الانتظار كل 15 ثانية.

إليك بيانات الربط في ملف function.json:

{
    "bindings": [
        {
            "schedule": "0/15 * * * * *",
            "name": "myTimer",
            "runsOnStartup": true,
            "type": "timerTrigger",
            "direction": "in"
        },
        {
            "name": "outputSbQueue",
            "type": "serviceBus",
            "queueName": "testqueue",
            "connection": "MyServiceBusConnection",
            "direction": "out"
        }
    ],
    "disabled": false
}

إليك التعليمات البرمجية لبرنامج JavaScript النصي الذي ينشئ رسالة واحدة:

module.exports = async function (context, myTimer) {
    var message = 'Service Bus queue message created at ' + timeStamp;
    context.log(message);   
    context.bindings.outputSbQueue = message;
};

إليك التعليمات البرمجية لبرنامج JavaScript النصي الذي ينشئ عدة رسائل:

module.exports = async function (context, myTimer) {
    var message = 'Service Bus queue message created at ' + timeStamp;
    context.log(message);   
    context.bindings.outputSbQueue = [];
    context.bindings.outputSbQueue.push("1 " + message);
    context.bindings.outputSbQueue.push("2 " + message);
};

يُظهر المثال التالي ربط بيانات ناتج ناقل خدمة Azure في ملف function.json ودالة PowerShell التي تستخدم ربط البيانات.

إليك بيانات الربط في ملف function.json:

{
  "bindings": [
    {
      "type": "serviceBus",
      "direction": "out",
      "connection": "AzureServiceBusConnectionString",
      "name": "outputSbMsg",
      "queueName": "outqueue",
      "topicName": "outtopic"
    }
  ]
}

إليك PowerShell الذي يقوم بإنشاء رسالة كناتج للدالة.

param($QueueItem, $TriggerMetadata) 

Push-OutputBinding -Name outputSbMsg -Value @{ 
    name = $QueueItem.name 
    employeeId = $QueueItem.employeeId 
    address = $QueueItem.address 
} 

يوضح المثال التالي كيفية الكتابة إلى قائمة انتظار "ناقل خدمة Azure" في Python.

يُعرف ربط بيانات ناقل خدمة Azure في function.js حيث يُعين type إلى serviceBus.

{
  "scriptFile": "__init__.py",
  "bindings": [
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "$return"
    },
    {
      "type": "serviceBus",
      "direction": "out",
      "connection": "AzureServiceBusConnectionString",
      "name": "msg",
      "queueName": "outqueue"
    }
  ]
}

في _init_.py، يمكنك كتابة رسالة إلى قائمة الانتظار عن طريق تمرير قيمة إلى set الطريقة.

import azure.functions as func

def main(req: func.HttpRequest, msg: func.Out[str]) -> func.HttpResponse:

    input_msg = req.params.get('message')

    msg.set(input_msg)

    return 'OK'

السمات

تستخدم كل من مكتبات C#‎ قيد المعالجة والعملية المعزولة سمات لتحديد ربط المخرجات. يستخدم البرنامج النصي C # بدلا من ذلك ملف تكوين function.json.

في مكتبات الفئة #C، استخدم ServiceBusAttribute.

يشرح الجدول التالي الخصائص التي يمكنك تعيينها باستخدام السمة:

الخاصية الوصف
اسم قائمة الانتظار اسم قائمة الانتظار. لا تقم بتعيينه إلا في حالة إرسال رسائل قائمة الانتظار، وليس لموضوع.
اسم الموضوع اسم الموضوع. لا تقم بتعيينه إلا في حالة إرسال الموضوع، وليس قائمة الانتظار.
الاتصال اسم إعداد تطبيق أو مجموعة إعداد تحدد كيفية الاتصال بخدمة الناقل. راجع الاتصالات.
Access حقوق الوصول لسلسلة الاتصال. القيم المتوفرة هي manage وlisten. الافتراضي هو manage، الذي يشير إلى أن connection لديه إذن الإدارة. إذا كنت تستخدم سلسلة اتصال ليس لديها إذن الإدارة، قم بتعيين accessRights إلى "الاستماع". وإلا، قد تفشل وقت تشغيل الدالات في محاولة القيام بعمليات تتطلب إدارة الحقوق. في Azure Functions الإصدار 2.x وأعلى، هذه الخاصية غير متوفرة لأن الإصدار الأخير من SDK لا يعتمد ناقل الخدمة إدارة العمليات.

فيما يلي مثال يوضح السمة المُطبقة على القيمة المرجعة للدالة:

[FunctionName("ServiceBusOutput")]
[return: ServiceBus("myqueue")]
public static string Run([HttpTrigger] dynamic input, ILogger log)
{
    ...
}

يمكنك تعيين الخاصية Connection لتحديد اسم إعداد التطبيق الذي يحتوي على سلسلة اتصال ناقل خدمة Azure لاستخدامها، كما هو موضح في المثال التالي:

[FunctionName("ServiceBusOutput")]
[return: ServiceBus("myqueue", Connection = "ServiceBusConnection")]
public static string Run([HttpTrigger] dynamic input, ILogger log)
{
    ...
}

للحصول على مثال كامل، راجع مثال.

يمكنك استخدام السمة ServiceBusAccount لتحديد حساب ناقل خدمة Azure لاستخدامه في مستوى الفئة أو الأسلوب أو مستوى المعلمة. لمزيد من المعلومات، راجع السمات في مرجع المشغل.

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

تتوفر التعليقات التوضيحية ServiceBusQueueOutput وServiceBusTopicOutput لكتابة رسالة كناتج دالة. يجب تعريف المعلمة التي تم تزيينها بهذه التعليقات التوضيحية كـOutputBinding<T> حيث T هو المكان الذي يكون فيه النوع المطابق لنوع الرسالة.

عند التطوير محليا، أضف إعدادات التطبيق في الملف local.settings.json في Values المجموعة.

التكوين

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

خاصية function.json الوصف
النوع يجب تعيينه إلى "serviceBus". تتعين هذه الخاصية تلقائياً عند إنشاء المشغّل في مدخل Microsoft Azure.
⁩direction⁧ يجب تعيينه إلى "خارج". تتعين هذه الخاصية تلقائياً عند إنشاء المشغّل في مدخل Microsoft Azure.
⁩الاسم⁧ اسم المتغير الذي يُمثل قائمة الانتظار أو رسالة الموضوع في التعليمات البرمجية للدالة. قم بتعيينه إلى "$return" للإشارة إلى القيمة المرجعة للدالة.
اسم قائمة الانتظار اسم قائمة الانتظار. لا تقم بتعيينه إلا في حالة إرسال رسائل قائمة الانتظار، وليس لموضوع.
اسم الموضوع اسم الموضوع. لا تقم بتعيينه إلا في حالة إرسال الموضوع، وليس قائمة الانتظار.
الاتصال اسم إعداد تطبيق أو مجموعة إعداد تحدد كيفية الاتصال بخدمة الناقل. راجع الاتصالات.
حقوق الوصول (v1 فقط) حقوق الوصول لسلسلة الاتصال. القيم المتوفرة هي manage وlisten. الافتراضي هو manage، الذي يشير إلى أن connection لديه إذن الإدارة. إذا كنت تستخدم سلسلة اتصال ليس لديها إذن الإدارة، قم بتعيين accessRights إلى "الاستماع". وإلا، قد تفشل وقت تشغيل الدالات في محاولة القيام بعمليات تتطلب إدارة الحقوق. في Azure Functions الإصدار 2.x وأعلى، هذه الخاصية غير متوفرة لأن الإصدار الأخير من SDK لا يعتمد ناقل الخدمة إدارة العمليات.

عند التطوير محليا، أضف إعدادات التطبيق في الملف local.settings.json في Values المجموعة.

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

الاستخدام

يتم دعم أنواع معلمات الإخراج التالية بواسطة جميع طرائق C # وإصدارات الامتداد:

النوع الوصف
System.String استخدم عندما تكون الرسالة المراد كتابتها نصا بسيطا. عندما تكون قيمة المعلمة فارغة عند خروج الدالة، لا تقوم الدالات بإنشاء رسالة.
بايت[] استخدم لكتابة رسائل البيانات الثنائية. عندما تكون قيمة المعلمة فارغة عند خروج الدالة، لا تقوم الدالات بإنشاء رسالة.
عنصر عندما تحتوي رسالة على JSON، تقوم الدالات بتسلسل الكائن في حمولة رسالة JSON. عندما تكون قيمة المعلمة فارغة عند خروج الدالة، تقوم الدالات بإنشاء رسالة تحتوي على كائن فارغ.

تحتوي أنواع المعلمات الخاصة بالمراسلة على بيانات تعريف إضافية للرسائل. تعتمد الأنواع المحددة التي يدعمها ربط إخراج شبكة الحدث على إصدار وقت تشغيل الدالات وإصدار حزمة الملحقات وطريقة C # المستخدمة.

استخدم نوع ServiceBusMessage عند إرسال رسائل تحتوي على بيانات تعريف. يتم تعريف المعلمات كسمات return نوع. ICollector<T> استخدم أو IAsyncCollector<T> لكتابة رسائل متعددة. يتم إنشاء رسالة عند استدعاء الأسلوب Add.

عندما تكون قيمة المعلمة فارغة عند خروج الدالة، لا تقوم الدالات بإنشاء رسالة.

يمكنك أيضا استخدام السمة ServiceBusAccountAttribute لتحديد حساب ناقل الخدمة المراد استخدامه. يأخذ المنشئ اسم إعداد تطبيق يحتوي على سلسلة اتصال ناقل الخدمة. يمكن تطبيق السمة على المعلمة أو الأسلوب أو مستوى الفئة. يظهر المثال التالي مستوى الفئة ومستوى الأسلوب:

[ServiceBusAccount("ClassLevelServiceBusAppSetting")]
public static class AzureFunctions
{
    [ServiceBusAccount("MethodLevelServiceBusAppSetting")]
    [FunctionName("ServiceBusQueueTriggerCSharp")]
    public static void Run(
        [ServiceBusTrigger("myqueue", AccessRights.Manage)] 
        string myQueueItem, ILogger log)
{
    ...
}

يتم تحديد حساب "ناقل الخدمة" لاستخدام بالترتيب التالي:

  • خاصية ServiceBusTriggerالسمةConnection.
  • ServiceBusAccountالسمة المطبقة على نفس المعلمة المماثلة لهاServiceBusTrigger.
  • السمة ServiceBusAccount المطبقة على الوظيفة.
  • السمة ServiceBusAccount المطبقة على الفئة.
  • AzureWebJobsServiceBus إعداد التطبيق.

في إصدار Azure Functions 1.x، يقوم وقت التشغيل بإنشاء قائمة الانتظار إذا لم تكن موجودة، ويتعين عليك تعيين accessRights إلى manage. في Functions الإصدار 2.x والإصدارات الأحدث، يجب أن تكون قائمة الانتظار أو الموضوع موجودة بالفعل؛ إذا قمت بتحديد قائمة انتظار أو موضوع غير موجود، تفشل الدالة.

استخدم عدة تطوير البرامج لناقل خدمة Microsoft Azure بدلاً من ربط الناتج المُضمن.

الوصول إلى قائمة الانتظار أو الموضوع باستخدام context.bindings.<name from function.json>. يمكنك تعيين سلسلة أو صفيف بايت أو كائن JavaScript (إلغاء تسلسلها إلى JSON) إلى context.binding.<name>.

الناتج إلى "ناقل خدمة Azure" متوفر عبر cmdlet Push-OutputBinding حيث يمكنك تمرير الوسائط التي تُطابق الاسم المُعين بواسطة معلمة اسم الربط في ملف function.json.

استخدم عدة تطوير البرامج لناقل خدمة Microsoft Azure بدلاً من ربط الناتج المُضمن.

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

الاتصالات

الخاصية connection هي مرجع إلى تكوين البيئة الذي يحدد كيفية اتصال التطبيق بناقل الخدمة. وقد تحدد ما يلي:

إذا كانت القيمة التي تم تكوينها مطابقة تامة لإعداد واحد ومطابقة بادئة لإعدادات أخرى، استخدام التطابق التام.

سلسلة الاتصال

للحصول على سلسلة اتصال، اتبع الخطوات الموضحة في الحصول على بيانات اعتماد الإدارة. يجب أن تكون سلسلة الاتصال لمساحة اسم "ناقل الخدمة"، ولا تقتصر على قائمة انتظار أو موضوع معين.

يجب تخزين سلسلة الاتصال هذه في إعداد تطبيق باسم يطابق القيمة المحددة بواسطة connection خاصية تكوين الربط.

إذا كان اسم إعداد التطبيق يبدأ ب "AzureWebJobs"، فيمكنك تحديد ما تبقى من الاسم فقط. على سبيل المثال، إذا قمت بتعيين connection إلى "MyServiceBus"، يبحث وقت تشغيل الوظائف عن إعداد تطبيق يسمى "AzureWebJobsMyServiceBus". إذا تركت connection فارغا، يستخدم وقت تشغيل الدالات سلسلة اتصال "ناقل الخدمة" الافتراضية في إعداد التطبيق المسمى "AzureWebJobsServiceBus".

الاتصالات القائمة على الهوية

إذا كنت تستخدم الإصدار 5.x أو أعلى من الملحق، فبدلا من استخدام سلسلة اتصال مع سر، يمكنك جعل التطبيق يستخدم هوية Azure Active Directory. للقيام بذلك ، يمكنك تحديد الإعدادات تحت بادئة شائعة تقوم بتعيين connection الخاصية في تكوين المشغل والربط.

في هذا الوضع، يتطلب الملحق الخصائص التالية:

الخاصية قالب متغير البيئة الوصف قيمة المثال
مساحة اسم مؤهلة بالكامل <CONNECTION_NAME_PREFIX>__fullyQualifiedNamespace مساحة اسم حافلة الخدمة المؤهلة بالكامل. <service_bus_namespace.servicebus.windows.net>

قد يتم تعيين خصائص إضافية لتخصيص الاتصال. راجع الخصائص الشائعة للاتصالات المستندة إلى الهوية.

عند استضافتها في خدمة Azure Functions، تستخدم الاتصالات المستندة إلى الهوية هوية مدارة. تستخدم الهوية المعينة من قبل النظام بشكل افتراضي على الرغم من إمكانية تحديد هوية معينة من قبل المستخدم مع خصائص credential و clientID. عند التشغيل في سياقات أخرى، مثل التطوير المحلي، يتم استخدام هوية المطور بدلا من ذلك، على الرغم من أنه يمكن تخصيصها. راجع التنمية المحلية مع الاتصالات القائمة على الهوية.

منح الإذن للهوية

مهما كانت الهوية المستخدمة يجب أن يكون لديك أذونات لتنفيذ الإجراءات المقصودة. ستحتاج إلى تعيين دور في Azure RBAC، باستخدام أدوار مضمنة أو مخصصة توفر هذه الأذونات.

هام

قد تعرض بعض الأذونات بواسطة الخدمة الهدف غير الضرورية لكافة السياقات. حيثما أمكن، الالتزام بمبدأ أقل امتيازومنح الهوية الامتيازات المطلوبة فقط. على سبيل المثال، إذا كان التطبيق يحتاج فقط إلى أن يكون قادرا على القراءة من مصدر بيانات، فاستخدم دورا لديه إذن للقراءة فقط. سيكون من غير المناسب تعيين دور يسمح أيضا بالكتابة إلى تلك الخدمة ، لأن هذا سيكون إذنا مفرطا لعملية قراءة. وبالمثل ، قد ترغب في التأكد من أن تعيين الدور يتم تحديده فقط على الموارد التي تحتاج إلى قراءة.

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

نوع الربط مثال على الأدوار المضمنة
الزناد1 ناقل خدمة Azure مستقبل البيانات، مالك بيانات ناقل خدمة Azure
ربط بيانات الإخراج مرسل بيانات ناقل خدمة Azure

1 للتشغيل من مواضيع ناقل الخدمة، يجب أن يكون لتعيين الدور نطاق فعال على مورد اشتراك ناقل الخدمة. إذا تم تضمين الموضوع فقط، فسيحدث خطأ. لا يعرض بعض العملاء، مثل مدخل Azure، مورد اشتراك Service Bus كنطاق لتعيين الدور. في مثل هذه الحالات، يمكن استخدام Azure CLI بدلا من ذلك. لمعرفة المزيد، راجع أدوار Azure المضمنة للحصول على ناقل خدمة Azure.

الاستثناءات والتعليمات البرمجية للإرجاع

Binding ‏‏المرجع
ناقل الخدمة رموز خطأ ناقل خدمة Azure
ناقل الخدمة حدود ناقل خدمة Azure

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