إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
استخدم مشغل Service Bus للرد على الرسائل من قائمة انتظار أو موضوع Service Bus. بدءًا من إصدار الامتداد 3.1.0، يمكنك تشغيل قائمة انتظار أو موضوع تم تمكينه للجلسة.
للحصول على معلومات حول تفاصيل الإعداد والتكوين، راجع الاستعراض العام.
Service Bus يتم اتخاذ قرارات التحجيم لخطط الاستهلاك والمميز استنادا إلى التحجيم المستند إلى الهدف. لمزيد من المعلومات، راجع التحجيم المستند إلى الهدف.
هام
تستخدم هذه المقالة علامات التبويب لدعم إصدارات متعددة من نموذج البرمجة Node.js. يتوفر نموذج v4 بشكل عام وتم تصميمه للحصول على تجربة أكثر مرونة وبديهية لمطوري JavaScript وTypeScript. لمزيد من التفاصيل حول كيفية عمل نموذج v4، راجع دليل المطور دالات Azure Node.js. لمعرفة المزيد حول الاختلافات بين v3 وv4، راجع دليل الترحيل.
يدعم دالات Azure نموذجي برمجة Python. تعتمد الطريقة التي تحدد بها روابطك على نموذج البرمجة الذي اخترته.
يتيح لك نموذج برمجة Python v2 تحديد الروابط باستخدام المحسنات مباشرة في التعليمات البرمجية للدالة Python. لمزيد من المعلومات، راجع دليل المطور Python.
تدعم هذه المقالة كلا نموذجي البرمجة.
مثال
يمكن إنشاء دالة C# باستخدام أحد أوضاع C# التالية:
-
نموذج العامل المعزول: دالة C# المترجمة التي يتم تشغيلها في عملية عامل معزولة عن وقت التشغيل. مطلوب عملية عامل معزولة لدعم وظائف C# التي تعمل على إصدارات LTS وغير LTS .NET وإطار عمل .NET. تستخدم ملحقات دالات معالجة العامل المعزولة مساحات أسماء
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# تتلقى رسالة قائمة انتظار Service Bus واحدة وتكتبها في السجلات:
[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# تتلقى رسائل قائمة انتظار متعددة Service Bus في دفعة واحدة وتكتب كل منها في السجلات:
[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# التي تتلقى رسائل قائمة انتظار متعددة Service Bus، وتكتبها في السجلات، ثم تستقر الرسالة كمكتملة:
[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 لوصف تكوين مشغل قائمة انتظار Service Bus. تلتقط الوظيفة الرسالة الموضوعة في قائمة الانتظار وتضيفها إلى السجلات.
@FunctionName("sbprocessor")
public void serviceBusProcess(
@ServiceBusQueueTrigger(name = "msg",
queueName = "myqueuename",
connection = "myconnvarname") String message,
final ExecutionContext context
) {
context.getLogger().info(message);
}
يمكن أيضا تشغيل وظائف Java عند إضافة رسالة إلى موضوع Service Bus. يستخدم المثال التالي التعليق التوضيحي @ServiceBusTopicTrigger لوصف التكوين لربط بيانات الناتج.
@FunctionName("sbtopicprocessor")
public void run(
@ServiceBusTopicTrigger(
name = "message",
topicName = "mytopicname",
subscriptionName = "mysubscription",
connection = "ServiceBusConnection"
) String message,
final ExecutionContext context
) {
context.getLogger().info(message);
}
يستخدم هذا المثال نوع SDK ServiceBusReceivedMessage التي تم الحصول عليها من ServiceBusMessageContext التي يوفرها مشغل Service Bus:
import '@azure/functions-extensions-servicebus'; // Ensure the Service Bus extension is imported
import { app, type InvocationContext } from '@azure/functions';
import { type ServiceBusMessageContext, messageBodyAsJson } from '@azure/functions-extensions-servicebus';
// This sample uses sdkBinding = true with manual message completion.
// With v0.4.0, message.body is returned as a raw Buffer instead of auto-parsed object.
export async function serviceBusQueueTrigger(
serviceBusMessageContext: ServiceBusMessageContext,
context: InvocationContext
): Promise<void> {
const message = serviceBusMessageContext.messages[0];
// v0.4.0: message.body is a Buffer — use messageBodyAsJson<T>() from the extension for one-line parsing
const bodyData = messageBodyAsJson(message);
context.log('Parsed message body:', bodyData);
// Get current retry count from custom properties, default to 0
const currentRetryCount = message.applicationProperties?.retryCnt
? parseInt(message.applicationProperties.retryCnt as string)
: 0;
context.log(`Current retry count: ${currentRetryCount}`);
if (currentRetryCount >= 3) {
// After 3 retries, complete the message to remove it from the queue
context.log(`Maximum retry count (3) reached. Completing message to prevent infinite loop.`);
await serviceBusMessageContext.actions.complete(message);
context.log('Message completed after maximum retries');
} else {
// Abandon with updated retry count
const newRetryCount = currentRetryCount + 1;
const propertiesToModify = {
retryCnt: newRetryCount.toString(),
lastRetryTime: new Date().toISOString(),
errorMessage: 'Processing failed',
};
context.log(`Abandoning message with retry count: ${newRetryCount}`);
await serviceBusMessageContext.actions.abandon(message, propertiesToModify);
}
context.log('triggerMetadata: ', context.triggerMetadata);
}
app.serviceBusQueue('serviceBusQueueTrigger1', {
connection: 'ServiceBusConnection',
queueName: 'testqueue',
sdkBinding: true,
للحصول على مثال آخر باستخدام أنواع SDK، راجع نموذج استراتيجية التراجع exponential.
لمزيد من المعلومات، راجع أنواع SDK في المقالة المرجعية Node.js.
يوضح المثال التالي مشغل Service Bus دالةTypeScript. تقرأ الدالة message metadata وتسجل رسالة قائمة انتظار Service Bus.
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,
});
يوضح المثال التالي مشغل Service Bus دالةJavaScript. تقرأ الدالة message metadata وتسجل رسالة قائمة انتظار Service Bus.
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);
},
});
يظهر المثال التالي ربط مشغل Service Bus في ملف function.json ودالة PowerShell التي تستخدم الربط.
فيما يلي بيانات الربط في ملفfunction.json:
{
"bindings": [
{
"name": "mySbMsg",
"type": "serviceBusTrigger",
"direction": "in",
"topicName": "mytopic",
"subscriptionName": "mysubscription",
"connection": "AzureServiceBusConnectionString"
}
]
}
إليك الدالة التي يتم تشغيلها عند إرسال رسالة Service Bus.
param([string] $mySbMsg, $TriggerMetadata)
Write-Host "PowerShell ServiceBus queue trigger function processed message: $mySbMsg"
يستخدم هذا المثال أنواع SDK للوصول مباشرة إلى الكائن ServiceBusReceivedMessage الأساسي الذي يوفره مشغل Service Bus:
import logging
import azure.functions as func
import azurefunctions.extensions.bindings.servicebus as servicebus
app = func.FunctionApp(http_auth_level=func.AuthLevel.FUNCTION)
@app.service_bus_queue_trigger(arg_name="receivedmessage",
queue_name="QUEUE_NAME",
connection="SERVICEBUS_CONNECTION")
def servicebus_queue_trigger(receivedmessage: servicebus.ServiceBusReceivedMessage):
logging.info("Python ServiceBus queue trigger processed message.")
logging.info("Receiving: %s\n"
"Body: %s\n"
"Enqueued time: %s\n"
"Lock Token: %s\n"
"Message ID: %s\n"
"Sequence number: %s\n",
receivedmessage,
receivedmessage.body,
receivedmessage.enqueued_time_utc,
receivedmessage.lock_token,
receivedmessage.message_id,
receivedmessage.sequence_number)
تقرأ الدالة خصائص مختلفة من ServiceBusReceivedMessage النوع وتسجلها.
لمزيد من الأمثلة باستخدام أنواع SDK Service Bus، راجع نماذج ServiceBusReceivedMessage. للحصول على برنامج تعليمي خطوة بخطوة حول كيفية تضمين روابط من نوع SDK في تطبيق الوظائف، اتبع Python روابط SDK Service Bus Sample.
إشعار
تتضمن القيود المعروفة ما يلي:
- الخاصية
messageغير معتمدة. - يتطلب دعم الرسائل الدفعية الإصدار 4.1039 أو أحدث من وقت تشغيل الوظائف.
لمعرفة المزيد، بما في ذلك روابط نوع SDK الأخرى المدعومة، راجع روابط نوع SDK.
يوضح هذا المثال كيفية قراءة رسالة قائمة انتظار Service Bus عبر مشغل. يعتمد المثال على ما إذا كنت تستخدم نموذج برمجة 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'))
يوضح المثال التالي كيفية قراءة موضوع قائمة انتظار Service Bus عبر مشغل.
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)
السمات
تستخدم كل من in-process و C# ServiceBusTriggerAttribute لتعريف مشغل الدالة. يستخدم البرنامج النصي C# بدلا من ذلك ملف تكوين function.json كما هو موضح في دليل البرمجة النصية C#.
يوضح الجدول التالي الخصائص التي يمكنك تعيينها باستخدام سمة المشغل هذه:
| الخاصية | الوصف |
|---|---|
| اسم قائمة الانتظار | اسم قائمة الانتظار لمراقبة. تعيين فقط في حالة مراقبة قائمة انتظار، وليس لموضوع. |
| اسم الموضوع | اسم الموضوع الذي يجب مراقبته. تعيين فقط إذا كان يراقب موضوعًا، وليس لقائمة انتظار. |
| اسم الاشتراك | اسم الاشتراك للمراقبة. تعيين فقط إذا كان يراقب موضوعًا، وليس لقائمة انتظار. |
| اتصال | اسم إعداد التطبيق أو مجموعة الإعدادات التي تحدد كيفية الاتصال Service Bus. راجع الاتصالات. |
| IsBatched | يتم تسليم الرسائل على دفعات. يتطلب صفيف أو نوع مجموعة. |
| IsSessionsEnabled |
trueإذا كان الاتصال بقائمة انتظار أو اشتراك على علم بجلسة العمل.
falseخلاف ذلك، وهي القيمة الافتراضية. |
| رسائل الإكمال التلقائي |
true إذا كان يجب أن يكمل المشغل الرسالة تلقائيا بعد استدعاء ناجح.
false إذا كان لا ينبغي، مثل عند معالجة تسوية الرسائل في التعليمات البرمجية. إذا لم يتم تعيينه بشكل صريح، فإن السلوك يستند إلى autoCompleteMessages التكوين في host.json. |
عندما تقوم بالتطوير محليًا، أضف إعدادات التطبيق في ملف local.settings.json في المجموعة Values.
الديكور
Applies فقط إلى نموذج برمجة Python v2.
بالنسبة Python v2 التي تم تعريفها باستخدام مصمم الديكور، الخصائص التالية على service_bus_queue_trigger:
| الخاصية | الوصف |
|---|---|
arg_name |
اسم المتغير الذي يُمثل قائمة الانتظار أو رسالة الموضوع في التعليمات البرمجية للدالة. |
queue_name |
اسم قائمة الانتظار لمراقبة. تعيين فقط في حالة مراقبة قائمة انتظار، وليس لموضوع. |
connection |
اسم إعداد التطبيق أو مجموعة الإعدادات التي تحدد كيفية الاتصال Service Bus. راجع الاتصالات. |
للحصول على Python الدالات المعرفة باستخدام function.json، راجع قسم Configuration.
تعليقات توضيحية
يسمح لك التعليق التوضيحي ServiceBusQueueTrigger بإنشاء دالة يتم تشغيلها عند إنشاء رسالة قائمة انتظار Service Bus. تتضمن خيارات التكوين المتاحة الخصائص التالية:
| الخاصية | الوصف |
|---|---|
| الاسم | اسم المتغير الذي يُمثل قائمة الانتظار أو رسالة الموضوع في التعليمات البرمجية للدالة. |
| اسم قائمة الانتظار | اسم قائمة الانتظار لمراقبة. تعيين فقط في حالة مراقبة قائمة انتظار، وليس لموضوع. |
| اسم الموضوع | اسم الموضوع الذي يجب مراقبته. تعيين فقط إذا كان يراقب موضوعًا، وليس لقائمة انتظار. |
| اسم الاشتراك | اسم الاشتراك للمراقبة. تعيين فقط إذا كان يراقب موضوعًا، وليس لقائمة انتظار. |
| الاتصال | اسم إعداد التطبيق أو مجموعة الإعدادات التي تحدد كيفية الاتصال Service Bus. راجع الاتصالات. |
يسمحServiceBusTopicTriggerلك التعليق التوضيحي بتعيين موضوع واشتراك لاستهداف البيانات التي تؤدي إلى تشغيل الوظيفة.
عندما تقوم بالتطوير محليًا، أضف إعدادات التطبيق في ملف local.settings.json في المجموعة Values.
راجع المثال لمزيد من التفاصيل.
التكوين
Applies فقط إلى نموذج برمجة Python v1.
يوضح الجدول التالي الخصائص التي يمكنك تعيينها على الكائن الذي options تم تمريره app.serviceBusQueue() إلى الأسلوبين أو app.serviceBusTopic() .
| الخاصية | الوصف |
|---|---|
| اسم قائمة الانتظار | اسم قائمة الانتظار لمراقبة. تعيين فقط في حالة مراقبة قائمة انتظار، وليس لموضوع. |
| اسم الموضوع | اسم الموضوع الذي يجب مراقبته. تعيين فقط إذا كان يراقب موضوعًا، وليس لقائمة انتظار. |
| اسم الاشتراك | اسم الاشتراك للمراقبة. تعيين فقط إذا كان يراقب موضوعًا، وليس لقائمة انتظار. |
| الاتصال | اسم إعداد التطبيق أو مجموعة الإعدادات التي تحدد كيفية الاتصال Service Bus. راجع الاتصالات. |
| حقوق الوصول | حقوق الوصول سلسلة الاتصال. القيم المتوفرة هي manage وlisten. الافتراضي هو manage، الذي يشير إلى أن connection لديه إذن الإدارة. إذا كنت تستخدم سلسلة الاتصال لا يحتوي على إذن Manage، فقم بتعيين accessRights إلى "listen". وإلا، قد تفشل وقت تشغيل الدالات في محاولة القيام بعمليات تتطلب إدارة الحقوق. في دالات Azure الإصدار 2.x والإصدارات الأحدث، لا تتوفر هذه الخاصية لأن أحدث إصدار من Service Bus SDK لا يدعم إدارة العمليات. |
| isSessionsEnabled |
trueإذا كان الاتصال بقائمة انتظار أو اشتراك على علم بجلسة العمل.
falseخلاف ذلك، وهي القيمة الافتراضية. |
| الإكمال التلقائي | يجب أن يكون true للوظائف بخلاف C#، ما يعني أنه يجب على المشغل إما الاتصال تلقائياً بعد المعالجة، أو اكتمال استدعاءات كود الوظيفة يدوياً.عند التعيين على true، يكمل المشغل الرسالة تلقائياً إذا اكتمل تنفيذ الوظيفة بنجاح، ويتخلى عن الرسالة بخلاف ذلك.تؤدي الاستثناءات في الدالة إلى استدعاء abandonAsync وقت التشغيل في الخلفية. إذا لم يحدث استثناء، فسيتمcompleteAsync استدعاء في الخلفية. تتوفر هذه الخاصية فقط في دالات Azure 2.x وأعلى. |
عندما تقوم بالتطوير محليًا، أضف إعدادات التطبيق في ملف local.settings.json في المجموعة Values.
يشرح الجدول الآتي خصائص تكوين ربط البيانات التي عليك تعيينها في ملف function.json.
| خاصية function.json | الوصف |
|---|---|
| النوع | يجب تعيينه إلى serviceBusTrigger. يتم تعيين هذه الخاصية تلقائيا عند إنشاء المشغل في مدخل Azure. |
| الاتجاه | يجب التعيين إلى "داخل". يتم تعيين هذه الخاصية تلقائيا عند إنشاء المشغل في مدخل Azure. |
| الاسم | اسم المتغير الذي يُمثل قائمة الانتظار أو رسالة الموضوع في التعليمات البرمجية للدالة. |
| اسم قائمة الانتظار | اسم قائمة الانتظار لمراقبة. تعيين فقط في حالة مراقبة قائمة انتظار، وليس لموضوع. |
| اسم الموضوع | اسم الموضوع الذي يجب مراقبته. تعيين فقط إذا كان يراقب موضوعًا، وليس لقائمة انتظار. |
| اسم الاشتراك | اسم الاشتراك للمراقبة. تعيين فقط إذا كان يراقب موضوعًا، وليس لقائمة انتظار. |
| الاتصال | اسم إعداد التطبيق أو مجموعة الإعدادات التي تحدد كيفية الاتصال Service Bus. راجع الاتصالات. |
| حقوق الوصول | حقوق الوصول سلسلة الاتصال. القيم المتوفرة هي manage وlisten. الافتراضي هو manage، الذي يشير إلى أن connection لديه إذن الإدارة. إذا كنت تستخدم سلسلة الاتصال لا يحتوي على إذن Manage، فقم بتعيين accessRights إلى "listen". وإلا، قد تفشل وقت تشغيل الدالات في محاولة القيام بعمليات تتطلب إدارة الحقوق. في دالات Azure الإصدار 2.x والإصدارات الأحدث، لا تتوفر هذه الخاصية لأن أحدث إصدار من Service Bus SDK لا يدعم إدارة العمليات. |
| isSessionsEnabled |
trueإذا كان الاتصال بقائمة انتظار أو اشتراك على علم بجلسة العمل.
falseخلاف ذلك، وهي القيمة الافتراضية. |
| الإكمال التلقائي | يجب أن يكون true للوظائف بخلاف C#، ما يعني أنه يجب على المشغل إما الاتصال تلقائياً بعد المعالجة، أو اكتمال استدعاءات كود الوظيفة يدوياً.عند التعيين على true، يكمل المشغل الرسالة تلقائياً إذا اكتمل تنفيذ الوظيفة بنجاح، ويتخلى عن الرسالة بخلاف ذلك.تؤدي الاستثناءات في الدالة إلى استدعاء abandonAsync وقت التشغيل في الخلفية. إذا لم يحدث استثناء، فسيتمcompleteAsync استدعاء في الخلفية. تتوفر هذه الخاصية فقط في دالات Azure 2.x وأعلى. |
عندما تقوم بالتطوير محليًا، أضف إعدادات التطبيق في ملف local.settings.json في المجموعة Values.
راجع قسم Example للحصول على أمثلة كاملة.
الاستخدام
يتم دعم أنواع المعلمات التالية بواسطة جميع طرائق C# وإصدارات الملحق:
| النوع | الوصف |
|---|---|
| System.String | استخدم عندما تكون الرسالة نصاً بسيطاً. |
| بايت[] | استخدم لرسائل البيانات الثنائية. |
| الكائن | عندما تحتوي رسالة على JSON، تحاول الوظائف إلغاء تسلسل بيانات JSON إلى نوع عنصر CLR القديم المعروف. |
تحتوي أنواع المعلمات الخاصة بالرسائل على بيانات تعريف إضافية للرسائل. تعتمد الأنواع المحددة التي يدعمها مشغل Service Bus على إصدار وقت تشغيل الوظائف وإصدار حزمة الملحق وصيغة C# المستخدمة.
عندما تريد أن تعالج الدالة رسالة واحدة، يمكن ربط مشغل Service Bus بالأنواع التالية:
| النوع | الوصف |
|---|---|
string |
الرسالة كسلسلة. استخدم عندما تكون الرسالة نصاً بسيطاً. |
byte[] |
وحدات البايت للرسالة. |
| أنواع قابلة للتسلسل إلى JSON | عندما يحتوي حدث على بيانات JSON، تحاول الدالات إلغاء تسلسل بيانات JSON إلى نوع كائن CLR (POCO) قديم عادي. |
| ServiceBusReceivedMessage1 | كائن الرسالة. عند الربط ServiceBusReceivedMessage، يمكنك أيضا تضمين معلمة من النوع ServiceBusMessageActions1,2 لتنفيذ تسوية message. |
عندما تريد أن تعالج الدالة دفعة من الرسائل، يمكن أن يرتبط مشغل Service Bus بالأنواع التالية:
| النوع | الوصف |
|---|---|
T[] حيث T هو أحد أنواع الرسائل الفردية |
صفيف من الأحداث من الدفعة. يمثل كل إدخال حدثا واحدا. عند الربط ServiceBusReceivedMessage[]، يمكنك أيضا تضمين معلمة من النوع ServiceBusMessageActions1,2 لتنفيذ تسوية message. |
1 لاستخدام هذه الأنواع، تحتاج إلى الرجوع إلى Microsoft.Azure. Functions.Worker.Extensions.ServiceBus 5.14.1 أو أحدث وتبعيات common لروابط نوع SDK.
يمنع هذا وقت التشغيل من محاولة إكمال الرسائل بعد استدعاء دالة ناجحة.
عند عدم تعريف الخاصية Connection، تبحث الدالات عن إعداد تطبيق يسمى AzureWebJobsServiceBus، وهو الاسم الافتراضي Service Bus سلسلة الاتصال. يمكنك أيضا تعيين الخاصية Connection لتحديد اسم إعداد تطبيق يحتوي على Service Bus سلسلة الاتصال لاستخدامه.
تتوفر رسالة Service Bus الواردة عبر معلمة ServiceBusQueueMessage أو ServiceBusTopicMessage.
يتوفر مثيل Service Bus عبر المعلمة المكونة في خاصية اسم الملف function.json.
تتوفر رسالة قائمة الانتظار للوظيفة عبر معلمة مكتوبة كـfunc.ServiceBusMessage. يتم تمرير رسالة Service Bus إلى الدالة كسلسلة أو كائن JSON.
تدعم الوظائف أيضا Python روابط نوع SDK ناقل خدمة Azure، ما يتيح لك العمل مع البيانات باستخدام أنواع SDK الأساسية هذه:
هام
يتوفر دعم أنواع SDK Service Bus في Python في المعاينة ويتم دعمه فقط لنموذج برمجة Python v2. لمزيد من المعلومات، راجع أنواع SDK في Python.
للحصول على مثال كامل، راجع قسم الأمثلة.
الاتصالات
تشير خاصية connection إلى تكوين البيئة الذي يحدد كيفية اتصال التطبيق Service Bus. يمكنه تحديد:
- اسم إعداد تطبيق يحتوي على سلسلة الاتصال.
- اسم بادئة مشتركة لإعدادات تطبيق متعددة تحدد معا اتصال هوية مدارة.
إذا كانت القيمة المكونة مطابقة بدقة لإعداد واحد ومطابقة لبادئة للإعدادات الأخرى، يتم استخدام المطابقة الدقيقة.
نصيحة
استخدم اتصالات الهوية المدارة بدلا من سلاسل الاتصال للحصول على أمان أفضل. تتضمن سلاسل الاتصال بيانات الاعتماد التي يمكن كشفها، بينما تلغي الهويات المدارة الحاجة إلى إدارة الأسرار.
إذا كنت تستخدم version 5.x أو أعلى من الملحق، فبدلا من استخدام سلسلة الاتصال مع سر، يمكنك أن يكون التطبيق يستخدم هوية Microsoft Entra. لاستخدام الهويات المدارة، حدد الإعدادات ضمن بادئة شائعة تعين إلى الخاصية connection في تكوين المشغل والربط.
في هذا الوضع، يتطلب الملحق إعدادات التطبيق التالية:
| الإعداد المستند إلى القالب | الوصف | نوع الهوية |
|---|---|---|
<CONNECTION_NAME_PREFIX>__fullyQualifiedNamespace |
مساحة اسم Service Bus المؤهلة بالكامل. | المعين من قبل النظام أو المعين من قبل المستخدم |
<CONNECTION_NAME_PREFIX>__credential |
يجب تعيينه إلى managedidentity. |
User-assigned |
<CONNECTION_NAME_PREFIX>__clientId |
معرف العميل للهوية المدارة المعينة من قبل المستخدم. | User-assigned |
يتم التعامل مع القيمة التي تقوم باستبدالها <CONNECTION_NAME_PREFIX> بواسطة ملحق الربط كاسم لإعداد الاتصال.
على سبيل المثال، إذا كان تكوين الربط الخاص بك محددا connection = "ServiceBusConnection" بهوية مدارة معينة من قبل المستخدم، يمكنك تكوين إعدادات التطبيق التالية:
{
"ServiceBusConnection__fullyQualifiedNamespace": "myservicebus.servicebus.windows.net",
"ServiceBusConnection__credential": "managedidentity",
"ServiceBusConnection__clientId": "00000000-0000-0000-0000-000000000000"
}
نصيحة
استخدم الهويات المدارة المعينة من قبل المستخدم لسيناريوهات الإنتاج حيث تحتاج إلى تحكم دقيق في أذونات الهوية عبر موارد متعددة.
يمكنك استخدام إعدادات أخرى في القالب لتخصيص الاتصال بشكل أكبر. راجع الخصائص الشائعة للاتصالات المعتمدة على الهوية.
إشعار
عند استخدام تكوين Azure App أو Key Vault لتوفير إعدادات اتصالات الهوية المدارة، يجب أن تستخدم أسماء الإعدادات فاصل مفاتيح صالحا مثل : أو / بدلا من __ لضمان حل الأسماء بشكل صحيح.
على سبيل المثال: ServiceBusConnection:fullyQualifiedNamespace
عند استضافتها في خدمة دالات Azure، تستخدم الاتصالات المستندة إلى الهوية هوية مدارة . تستخدم الهوية المعينة من قبل النظام بشكل افتراضي على الرغم من إمكانية تحديد هوية معينة من قبل المستخدم مع خصائص credential و clientID. لاحظ أن تكوين هوية معينة من المستخدم باستخدام معرف مورد غير معتمد. عند التشغيل في سياقات أخرى، مثل التنمية المحلية، يتم استخدام هوية المطور الخاصة بك بدلًا من ذلك، على الرغم من أنه يمكن تخصيصها. راجع التطوير المحلي من خلال الاتصالات القائمة على الهوية.
منح الإذن للهوية
مهما كانت الهوية المستخدمة يجب أن يكون لديك أذونات لتنفيذ الإجراءات المقصودة. بالنسبة لمعظم خدمات Azure، يعني هذا أنك بحاجة إلى اخصص دور في Azure RBAC، باستخدام أدوار مضمنة أو مخصصة توفر هذه الأذونات.
هام
قد تعرض بعض الأذونات بواسطة الخدمة الهدف غير الضرورية لكافة السياقات. حيثما أمكن، الالتزام بمبدأ أقل امتيازومنح الهوية الامتيازات المطلوبة فقط. على سبيل المثال، إذا كان التطبيق يحتاج إلى أن يكون قادرًا على القراءة من مصدر بيانات فحسب، فاستخدم دورًا لديه إذن للقراءة فحسب. سيكون من غير المناسب إسناد دور يسمح أيضا بالكتابة إلى تلك الدائرة، لأن ذلك سيكون إذنًا مفرطًا لعملية قراءة. وبالمثل، قد ترغب في ضمان تحديد نطاق تعيين الدور فقط على الموارد التي تحتاج إلى قراءة.
ستحتاج إلى إنشاء تعيين الدور الذي يوفر الوصول إلى مواضيعك وقوائم الانتظار في وقت التشغيل. أدوار الإدارة مثل المالك ليست كافية. يعرض الجدول التالي الأدوار المضمنة الموصى بها عند استخدام ملحق Service Bus في العملية العادية. قد يتطلب طلبك أذونات إضافية بناءً على الرمز الذي تكتبه.
| نوع الربط | مثال على الأدوار المضمنة |
|---|---|
| المشغل1 | ناقل خدمة Azure Data Receiver، ناقل خدمة Azure Data Owner |
| ربط بيانات الإخراج | ناقل خدمة Azure Data Sender |
1 لتشغيل من مواضيع Service Bus، يجب أن يكون لتعيين الدور نطاق فعال على مورد اشتراك Service Bus. إذا تم تضمين الموضوع فقط، فسيحدث خطأ. لا يعرض بعض العملاء، مثل مدخل Azure، مورد اشتراك Service Bus كنطاق لتعيين الدور. في مثل هذه الحالات، يمكن استخدام Azure CLI بدلا من ذلك. لمعرفة المزيد، راجع Azure الأدوار المضمنة ناقل خدمة Azure.
رسالة غير قابلة للمعالجة
لا يمكن التحكم في معالجة الرسائل السامة أو تكوينها في دالات Azure. يعالج Service Bus الرسائل السامة نفسها.
سلوك 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 |
قيمة معرفة من قبل المستخدم يمكن Service Bus استخدامها لتحديد الرسائل المكررة، إذا تم تمكينها. |
ReplyTo |
string |
الرد على عنوان قائمة الانتظار. |
Subject |
string |
التسمية الخاصة بالتطبيق والتي يمكن استخدامها بدلًا من خاصيةLabelالبيانات الوصفية. |
To |
string |
إرسال إلى العنوان. |