مشغل ناقل خدمة Azure لوظائف Azure

استخدم مشغل ناقل الخدمة للرد على الرسائل من قائمة انتظار أو موضوع ناقل الخدمة. بدءًا من إصدار الامتداد 3.1.0، يمكنك تشغيل قائمة انتظار أو موضوع تم تمكينه للجلسة.

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

يتم اتخاذ قرارات تحجيم ناقل خدمة Microsoft Azure لخطط Consumption وPremium استنادا إلى التحجيم المستند إلى الهدف. لمزيد من المعلومات، راجع التحجيم المستند إلى الهدف.

هام

تستخدم هذه المقالة علامات التبويب لدعم إصدارات متعددة من نموذج البرمجة Node.js. يتوفر نموذج v4 بشكل عام وتم تصميمه للحصول على تجربة أكثر مرونة وبديهية لمطوري JavaScript وTypeScript. لمزيد من التفاصيل حول كيفية عمل نموذج v4، راجع دليل مطور Azure Functions Node.js. لمعرفة المزيد حول الاختلافات بين v3 وv4، راجع دليل الترحيل.

تدعم Azure Functions نموذجي برمجة ل Python. تعتمد الطريقة التي تحدد بها روابطك على نموذج البرمجة الذي اخترته.

يتيح لك نموذج برمجة Python v2 تحديد الروابط باستخدام المحسنات مباشرة في التعليمات البرمجية لدالة Python. لمزيد من المعلومات، راجع دليل مطور Python.

تدعم هذه المقالة كلا نموذجي البرمجة.

مثال

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

  • نموذج العامل المعزول: دالة C# المترجمة التي يتم تشغيلها في عملية عامل معزولة عن وقت التشغيل. عملية العامل المعزولة مطلوبة لدعم وظائف C# التي تعمل على إصدارات LTS وغير LTS .NET و.NET Framework. تستخدم Microsoft.Azure.Functions.Worker.Extensions.* ملحقات دالات عملية العامل المعزولة مساحات الأسماء.
  • نموذج قيد المعالجة: دالة C# المحولة برمجيا التي تعمل في نفس العملية مثل وقت تشغيل الوظائف. في تباين هذا النموذج، يمكن تشغيل الدالات باستخدام البرمجة النصية C#، والتي يتم دعمها بشكل أساسي لتحرير مدخل C#. تستخدم Microsoft.Azure.WebJobs.Extensions.* ملحقات الوظائف قيد المعالجة مساحات الأسماء.

هام

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

تحدد هذه التعليمة البرمجية وتهيئ ILogger:

private readonly ILogger<ServiceBusReceivedMessageFunctions> _logger;

public ServiceBusReceivedMessageFunctions(ILogger<ServiceBusReceivedMessageFunctions> logger)
{
    _logger = logger;
}

يظهر هذا المثال دالة C# التي تتلقى رسالة قائمة انتظار ناقل خدمة Microsoft Azure واحدة وتكتبها في السجلات:

[Function(nameof(ServiceBusReceivedMessageFunction))]
[ServiceBusOutput("outputQueue", Connection = "ServiceBusConnection")]
public string ServiceBusReceivedMessageFunction(
    [ServiceBusTrigger("queue", Connection = "ServiceBusConnection")] ServiceBusReceivedMessage message)
{
    _logger.LogInformation("Message ID: {id}", message.MessageId);
    _logger.LogInformation("Message Body: {body}", message.Body);
    _logger.LogInformation("Message Content-Type: {contentType}", message.ContentType);

    var outputMessage = $"Output message created at {DateTime.Now}";
    return outputMessage;
}

يوضح هذا المثال دالة C# التي تتلقى رسائل قائمة انتظار ناقل خدمة Microsoft Azure متعددة في دفعة واحدة وتكتب كل منها في السجلات:

[Function(nameof(ServiceBusReceivedMessageBatchFunction))]
public void ServiceBusReceivedMessageBatchFunction(
    [ServiceBusTrigger("queue", Connection = "ServiceBusConnection", IsBatched = true)] ServiceBusReceivedMessage[] messages)
{
    foreach (ServiceBusReceivedMessage message in messages)
    {
        _logger.LogInformation("Message ID: {id}", message.MessageId);
        _logger.LogInformation("Message Body: {body}", message.Body);
        _logger.LogInformation("Message Content-Type: {contentType}", message.ContentType);
    }
}

يظهر هذا المثال دالة C# التي تتلقى رسائل قائمة انتظار ناقل خدمة Microsoft Azure المتعددة، وتكتبها في السجلات، ثم تحسم الرسالة كما هو مكتمل:

[Function(nameof(ServiceBusMessageActionsFunction))]
public async Task ServiceBusMessageActionsFunction(
    [ServiceBusTrigger("queue", Connection = "ServiceBusConnection", AutoCompleteMessages = false)]
    ServiceBusReceivedMessage message,
    ServiceBusMessageActions messageActions)
{
    _logger.LogInformation("Message ID: {id}", message.MessageId);
    _logger.LogInformation("Message Body: {body}", message.Body);
    _logger.LogInformation("Message Content-Type: {contentType}", message.ContentType);

    // Complete the message
    await messageActions.CompleteMessageAsync(message);
}

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

@FunctionName("sbprocessor")
 public void serviceBusProcess(
    @ServiceBusQueueTrigger(name = "msg",
                             queueName = "myqueuename",
                             connection = "myconnvarname") String message,
   final ExecutionContext context
 ) {
     context.getLogger().info(message);
 }

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

@FunctionName("sbtopicprocessor")
    public void run(
        @ServiceBusTopicTrigger(
            name = "message",
            topicName = "mytopicname",
            subscriptionName = "mysubscription",
            connection = "ServiceBusConnection"
        ) String message,
        final ExecutionContext context
    ) {
        context.getLogger().info(message);
    }

يوضح المثال التالي دالة TypeScript لمشغل ناقل خدمة Microsoft Azure. تقرأ الدالة بيانات تعريف الرسالةوتسجل رسالة قائمة انتظار ناقل الخدمة.

import { app, InvocationContext } from '@azure/functions';

export async function serviceBusQueueTrigger1(message: unknown, context: InvocationContext): Promise<void> {
    context.log('Service bus queue function processed message:', message);
    context.log('EnqueuedTimeUtc =', context.triggerMetadata.enqueuedTimeUtc);
    context.log('DeliveryCount =', context.triggerMetadata.deliveryCount);
    context.log('MessageId =', context.triggerMetadata.messageId);
}

app.serviceBusQueue('serviceBusQueueTrigger1', {
    connection: 'MyServiceBusConnection',
    queueName: 'testqueue',
    handler: serviceBusQueueTrigger1,
});

يوضح المثال التالي دالة JavaScript لمشغل ناقل خدمة Microsoft Azure. تقرأ الدالة بيانات تعريف الرسالةوتسجل رسالة قائمة انتظار ناقل الخدمة.

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

app.serviceBusQueue('serviceBusQueueTrigger1', {
    connection: 'MyServiceBusConnection',
    queueName: 'testqueue',
    handler: (message, context) => {
        context.log('Service bus queue function processed message:', message);
        context.log('EnqueuedTimeUtc =', context.triggerMetadata.enqueuedTimeUtc);
        context.log('DeliveryCount =', context.triggerMetadata.deliveryCount);
        context.log('MessageId =', context.triggerMetadata.messageId);
    },
});

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

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

{
  "bindings": [
    {
      "name": "mySbMsg",
      "type": "serviceBusTrigger",
      "direction": "in",
      "topicName": "mytopic",
      "subscriptionName": "mysubscription",
      "connection": "AzureServiceBusConnectionString"
    }
  ]
}

إليك الدالة التي تعمل عند إرسال رسالة ناقل الخدمة.

param([string] $mySbMsg, $TriggerMetadata)

Write-Host "PowerShell ServiceBus queue trigger function processed message: $mySbMsg"

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

import logging
import azure.functions as func

app = func.FunctionApp()

@app.function_name(name="ServiceBusQueueTrigger1")
@app.service_bus_queue_trigger(arg_name="msg", 
                               queue_name="<QUEUE_NAME>", 
                               connection="<CONNECTION_SETTING>")
def test_function(msg: func.ServiceBusMessage):
    logging.info('Python ServiceBus queue trigger processed message: %s',
                 msg.get_body().decode('utf-8'))

يوضح المثال التالي كيفية قراءة موضوع قائمة انتظار ناقل خدمة Microsoft Azure عبر مشغل.

import logging
import azure.functions as func

app = func.FunctionApp()

@app.function_name(name="ServiceBusTopicTrigger1")
@app.service_bus_topic_trigger(arg_name="message", 
                               topic_name="TOPIC_NAME", 
                               connection="CONNECTION_SETTING", 
                               subscription_name="SUBSCRIPTION_NAME")
def test_function(message: func.ServiceBusMessage):
    message_body = message.get_body().decode("utf-8")
    logging.info("Python ServiceBus topic trigger processed message.")
    logging.info("Message Body: " + message_body)

السمات

تستخدم مكتبات C# العملية والعامل المعزولة السمة ServiceBusTriggerAttribute لتعريف مشغل الدالة. يستخدم البرنامج النصي C# بدلا من ذلك ملف تكوين function.json كما هو موضح في دليل البرمجة النصية C#‎.

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

الخاصية ‏‏الوصف
QueueName اسم قائمة الانتظار لمراقبة. تعيين فقط في حالة مراقبة قائمة انتظار، وليس لموضوع.
اسم الموضوع اسم الموضوع الذي يجب مراقبته. تعيين فقط إذا كان يراقب موضوعًا، وليس لقائمة انتظار.
اسم الاشتراك اسم الاشتراك للمراقبة. تعيين فقط إذا كان يراقب موضوعًا، وليس لقائمة انتظار.
Connection اسم إعداد تطبيق أو مجموعة إعداد تحدد كيفية الاتصال بخدمة الناقل. راجع الاتصالات.
IsBatched يتم تسليم الرسائل على دفعات. يتطلب صفيف أو نوع مجموعة.
IsSessionsEnabled trueإذا كان الاتصال بقائمة انتظار أو اشتراك على علم بجلسة العمل. falseخلاف ذلك، وهي القيمة الافتراضية.
رسائل الإكمال التلقائي true إذا كان يجب أن يكمل المشغل الرسالة تلقائيا بعد استدعاء ناجح. false إذا كان لا ينبغي، مثل عند معالجة تسوية الرسائل في التعليمات البرمجية. إذا لم يتم تعيينه بشكل صريح، فسيستند السلوك إلى التكوين في host.json.autoCompleteMessages

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

الديكور

ينطبق فقط على نموذج برمجة Python v2.

بالنسبة لوظائف Python v2 المعرفة باستخدام مصمم الديكور، الخصائص التالية على service_bus_queue_trigger:

الخاصية ‏‏الوصف
arg_name اسم المتغير الذي يُمثل قائمة الانتظار أو رسالة الموضوع في التعليمات البرمجية للدالة.
queue_name اسم قائمة الانتظار لمراقبة. تعيين فقط في حالة مراقبة قائمة انتظار، وليس لموضوع.
connection اسم إعداد تطبيق أو مجموعة إعداد تحدد كيفية الاتصال بخدمة الناقل. راجع الاتصالات.

للحصول على وظائف Python المعرفة باستخدام function.json، راجع قسم التكوين.

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

يسمحServiceBusQueueTriggerلك التعليق التوضيحي بإنشاء وظيفة يتم تشغيلها عند إنشاء رسالة قائمة انتظار "ناقل الخدمة". تتضمن خيارات التكوين المتاحة الخصائص التالية:

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

يسمحServiceBusTopicTriggerلك التعليق التوضيحي بتعيين موضوع واشتراك لاستهداف البيانات التي تؤدي إلى تشغيل الوظيفة.

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

راجع المثال لمزيد من التفاصيل.

التكوين

ينطبق فقط على نموذج برمجة Python v1.

يوضح الجدول التالي الخصائص التي يمكنك تعيينها على الكائن الذي options تم تمريره app.serviceBusQueue() إلى الأسلوبين أو app.serviceBusTopic() .

الخاصية ‏‏الوصف
queueName اسم قائمة الانتظار لمراقبة. تعيين فقط في حالة مراقبة قائمة انتظار، وليس لموضوع.
topicName اسم الموضوع الذي يجب مراقبته. تعيين فقط إذا كان يراقب موضوعًا، وليس لقائمة انتظار.
اسم الاشتراك اسم الاشتراك للمراقبة. تعيين فقط إذا كان يراقب موضوعًا، وليس لقائمة انتظار.
الاتصال اسم إعداد تطبيق أو مجموعة إعداد تحدد كيفية الاتصال بخدمة الناقل. راجع الاتصالات.
accessRights حقوق الوصول لسلسلة الاتصال. القيم المتوفرة هي manage وlisten. الافتراضي هو manage، الذي يشير إلى أن connection لديه إذن الإدارة. إذا كنت تستخدم سلسلة اتصال ليس لديها إذن الإدارة، قم بتعيين accessRights إلى "الاستماع". وإلا، قد تفشل وقت تشغيل الدالات في محاولة القيام بعمليات تتطلب إدارة الحقوق. في Azure Functions الإصدار 2.x والإصدارات الأحدث، هذه الخاصية غير متوفرة لأن الإصدار الأحدث من عدة تطوير البرامج لناقل خدمة Azure لا تدعم إدارة العمليات.
isSessionsEnabled trueإذا كان الاتصال بقائمة انتظار أو اشتراك على علم بجلسة العمل. falseخلاف ذلك، وهي القيمة الافتراضية.
autoComplete يجب أن يكون true للوظائف بخلاف C#، ما يعني أنه يجب على المشغل إما الاتصال تلقائياً بعد المعالجة، أو اكتمال استدعاءات كود الوظيفة يدوياً.

عند التعيين على true، يكمل المشغل الرسالة تلقائياً إذا اكتمل تنفيذ الوظيفة بنجاح، ويتخلى عن الرسالة بخلاف ذلك.

تؤدي الاستثناءات في الوظيفة إلى استدعاءات وقت التشغيل abandonAsync في الخلفية. إذا لم يحدث استثناء، فسيتمcompleteAsync استدعاء في الخلفية. هذه الخاصية متاحة فقط في وظائف Azure 2.x والإصدارات الأحدث.

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

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

خاصية function.json ‏‏الوصف
النوع يجب تعيينه إلى serviceBusTrigger. يتم تعيين هذه الخاصية تلقائيا عند إنشاء المشغل في مدخل Microsoft Azure.
الاتجاه يجب التعيين إلى "داخل". يتم تعيين هذه الخاصية تلقائيا عند إنشاء المشغل في مدخل Microsoft Azure.
الاسم اسم المتغير الذي يُمثل قائمة الانتظار أو رسالة الموضوع في التعليمات البرمجية للدالة.
queueName اسم قائمة الانتظار لمراقبة. تعيين فقط في حالة مراقبة قائمة انتظار، وليس لموضوع.
topicName اسم الموضوع الذي يجب مراقبته. تعيين فقط إذا كان يراقب موضوعًا، وليس لقائمة انتظار.
اسم الاشتراك اسم الاشتراك للمراقبة. تعيين فقط إذا كان يراقب موضوعًا، وليس لقائمة انتظار.
الاتصال اسم إعداد تطبيق أو مجموعة إعداد تحدد كيفية الاتصال بخدمة الناقل. راجع الاتصالات.
accessRights حقوق الوصول لسلسلة الاتصال. القيم المتوفرة هي manage وlisten. الافتراضي هو manage، الذي يشير إلى أن connection لديه إذن الإدارة. إذا كنت تستخدم سلسلة اتصال ليس لديها إذن الإدارة، قم بتعيين accessRights إلى "الاستماع". وإلا، قد تفشل وقت تشغيل الدالات في محاولة القيام بعمليات تتطلب إدارة الحقوق. في Azure Functions الإصدار 2.x والإصدارات الأحدث، هذه الخاصية غير متوفرة لأن الإصدار الأحدث من عدة تطوير البرامج لناقل خدمة Azure لا تدعم إدارة العمليات.
isSessionsEnabled trueإذا كان الاتصال بقائمة انتظار أو اشتراك على علم بجلسة العمل. falseخلاف ذلك، وهي القيمة الافتراضية.
autoComplete يجب أن يكون true للوظائف بخلاف C#، ما يعني أنه يجب على المشغل إما الاتصال تلقائياً بعد المعالجة، أو اكتمال استدعاءات كود الوظيفة يدوياً.

عند التعيين على true، يكمل المشغل الرسالة تلقائياً إذا اكتمل تنفيذ الوظيفة بنجاح، ويتخلى عن الرسالة بخلاف ذلك.

تؤدي الاستثناءات في الوظيفة إلى استدعاءات وقت التشغيل abandonAsync في الخلفية. إذا لم يحدث استثناء، فسيتمcompleteAsync استدعاء في الخلفية. هذه الخاصية متاحة فقط في وظائف Azure 2.x والإصدارات الأحدث.

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

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

الاستخدام

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

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

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

عندما تريد أن تعالج الدالة رسالة واحدة، يمكن ربط مشغل ناقل الخدمة بالأنواع التالية:

النوع ‏‏الوصف
string الرسالة كسلسلة. استخدم عندما تكون الرسالة نصاً بسيطاً.
byte[] وحدات البايت للرسالة.
‏‏أنواع قابلة للتسلسل إلى JSON عندما يحتوي حدث على بيانات JSON، تحاول الدالات إلغاء تسلسل بيانات JSON إلى نوع كائن CLR (POCO) قديم عادي.
ServiceBusReceivedMessage1 كائن الرسالة.

عند الربط ب ServiceBusReceivedMessage، يمكنك اختياريا أيضا تضمين معلمة من نوع ServiceBusMessageActions1,2 لتنفيذ إجراءات تسوية الرسائل.

عندما تريد أن تعالج الدالة دفعة من الرسائل، يمكن ربط مشغل ناقل الخدمة بالأنواع التالية:

النوع ‏‏الوصف
T[] حيث T هو أحد أنواع الرسائل الفردية صفيف من الأحداث من الدفعة. يمثل كل إدخال حدثا واحدا.

عند الربط ب ServiceBusReceivedMessage[]، يمكنك اختياريا أيضا تضمين معلمة من نوع ServiceBusMessageActions1,2 لتنفيذ إجراءات تسوية الرسائل.

1 لاستخدام هذه الأنواع، تحتاج إلى الرجوع إلى Microsoft.Azure.Functions.Worker.Extensions.ServiceBus 5.14.1 أو أحدث والتبعيات الشائعة لروابط نوع SDK.

2 عند استخدام ServiceBusMessageActions، قم بتعيين AutoCompleteMessages خاصية سمة المشغل إلى false. يمنع هذا وقت التشغيل من محاولة إكمال الرسائل بعد استدعاء دالة ناجحة.

عندما لا يتم تعريف الخاصية Connection، تبحث الوظائف عن إعداد تطبيق يسمى AzureWebJobsServiceBus، وهو الاسم الافتراضي لسلسلة اتصال ناقل خدمة Microsoft Azure. يمكنك أيضاً تعيين الخاصية Connection لتحديد اسم إعداد التطبيق الذي يحتوي على سلسلة اتصال ناقل خدمة Microsoft Azure المراد استخدامها.

تتوفر رسالة "ناقل الخدمة" الواردة عبر ServiceBusQueueMessageأوServiceBusTopicMessageمعلمة.

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

يتوفر مثيل ناقل الخدمة عبر المعلمة التي تم تكوينها فيخاصية اسم الملف function.json.

تتوفر رسالة قائمة الانتظار للوظيفة عبر معلمة مكتوبة كـfunc.ServiceBusMessage. يتم تمرير رسالة "ناقل الخدمة" إلى الدالة كسلسلة أو كائن JSON.

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

الاتصالات

خاصية connection هي إشارة إلى تكوين البيئة الذي يحدد كيفية اتصال التطبيق بـ Service Bus. ويجوز لها أن تحدد ما يلي:

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

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

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

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

إذا بدأ اسم إعداد التطبيق بـ «AzureWebJobs»، يمكنك تحديد ما تبقى من الاسم فقط. على سبيل المثال، إذا قمت بتعيين connection على «MyServiceBus»، فإن وقت تشغيل Functions يبحث عن إعداد تطبيق يسمى «AzureWebJobsMyServiceBus». إذا تركت connection فارغًا، فإن وقت تشغيل Functions يستخدم سلسلة اتصال Service Bus الافتراضية في إعداد التطبيق المسمى «AzureWebJobsServiceBus».

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

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

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

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

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

إشعار

عند استخدام Azure App Configuration أو Key Vault لتوفير إعدادات لاتصالات الهوية المُدارة، يجب أن تستخدم أسماء الإعداد فاصل مفاتيح صالح مثل : أو / بدلاً من __ لضمان حل الأسماء بشكل صحيح.

على سبيل المثال، <CONNECTION_NAME_PREFIX>:fullyQualifiedNamespace

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

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

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

هام

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

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

نوع الربط مثال على الأدوار المضمنة
المشغل1 Azure Service Bus Data Receiver، وAzure Service Bus Data Owner
ربط بيانات الإخراج مرسل بيانات ناقل خدمة Azure

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

رسالة غير قابلة للمعالجة

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

سلوك PeekLock

يتلقى وقت تشغيل الدالات رسالة في وضع PeekLock.

بشكل افتراضي، يستدعي Complete وقت التشغيل على الرسالة إذا انتهت الدالة بنجاح، أو يستدعي Abandon إذا فشلت الدالة. يمكنك تعطيل الإكمال التلقائي من خلال الخاصية autoCompleteMessages في host.json.

بشكل افتراضي، يستدعي Complete وقت التشغيل على الرسالة إذا انتهت الدالة بنجاح، أو يستدعي Abandon إذا فشلت الدالة. يمكنك تعطيل الإكمال التلقائي من خلال الخاصية autoCompleteMessages في host.json أو من خلال خاصية على سمة المشغل. يجب تعطيل الإكمال التلقائي إذا كان رمز الدالة يعالج تسوية الرسائل.

إذا كانت الدالة تعمل لفترة أطول منPeekLockالمهلة، يتم تجديد القفل تلقائيًا طالما كانت الوظيفة قيد التشغيل. maxAutoRenewDuration هو قابل للتكوين في host.json، الذي يعين إلى ServiceBusProcessor.MaxAutoLockRenewalDuration. القيمة الافتراضية لهذا الإعداد هي 5 دقائق.

بيانات تعريف الرسالة

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

هذه الخصائص هي أعضاء في فئة ServiceBusReceivedMessage.

الخاصية نوع ‏‏الوصف
ApplicationProperties ApplicationProperties الخصائص التي تم تعيينها بواسطة المرسل.
ContentType string معرّف نوع المحتوى يستخدمه المرسل والمتلقي لمنطق خاص بالتطبيق.
CorrelationId string معرف الارتباط.
DeliveryCount Int32 عدد عمليات التسليم.
EnqueuedTime DateTime الوقت المحدد في UTC.
ScheduledEnqueueTimeUtc DateTime الوقت المجدول في قائمة الانتظار بالتوقيت العالمي المتفق عليه.
ExpiresAt DateTime وقت انتهاء الصلاحية في UTC.
MessageId string قيمة معرّفة من قبل المستخدم يمكن لناقل الخدمة استخدامها لتحديد الرسائل المكررة، إذا تم تمكينها.
ReplyTo string الرد على عنوان قائمة الانتظار.
Subject string التسمية الخاصة بالتطبيق والتي يمكن استخدامها بدلًا من خاصيةLabelالبيانات الوصفية.
To string إرسال إلى العنوان.

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