استخدم مكتبة إطار عمل WindowsAzure.ServiceBus .NET القديمة مع AMQP 1.0
إشعار
هذه المقالة مخصصة للمستخدمين الحاليين لحزمة WindowsAzure.ServiceBus الذين يتطلعون إلى التبديل إلى استخدام AMQP داخل نفس الحزمة. بينما ستستمر هذه الحزمة في تلقي إصلاحات الأخطاء الهامة حتى 30 سبتمبر 2026، فإننا نشجع بشدة الترقية إلى حزمة Azure.Messaging.ServiceBus الجديدة بدلا من ذلك المتوفرة اعتبارا من نوفمبر 2020 والتي تدعم AMQP بشكل افتراضي.
في 30 سبتمبر 2026، سنتقاعد مكتبات SDK ناقل خدمة Azure WindowsAzure.ServiceBus وMicrosoft.Azure.ServiceBus و com.microsoft.azure.servicebus، والتي لا تتوافق مع إرشادات Azure SDK. سننهي أيضا دعم بروتوكول SBMP، لذلك لن تتمكن من استخدام هذا البروتوكول بعد 30 سبتمبر 2026. قم بالترحيل إلى أحدث مكتبات Azure SDK، والتي توفر تحديثات أمان هامة وقدرات محسنة، قبل ذلك التاريخ.
على الرغم من أنه لا يزال من الممكن استخدام المكتبات القديمة بعد 30 سبتمبر 2026، إلا أنها لن تتلقى بعد ذلك الدعم والتحديثات الرسمية من Microsoft. لمزيد من المعلومات، راجع إعلان إيقاف الدعم.
بشكل افتراضي، تتصل حزمة WindowsAzure.ServiceBus بخدمة Service Bus باستخدام بروتوكول مخصص قائم على SOAP يسمى Service Bus Messaging Protocol (SBMP). في الإصدار 2.1، تمت إضافة دعم AMQP 1.0 الذي نوصي باستخدامه بدلاً من البروتوكول الافتراضي.
يتطلب استخدام AMQP 1.0 بدلاً من البروتوكول الافتراضي تكويناً صريحاً على سلسلة اتصال Service Bus، أو في منشئي العميل عبر الخيار TransportType. بخلاف هذا التغيير، يظل كود التطبيق دون تغيير عند استخدام AMQP 1.0.
هناك بعض ميزات واجهة برمجة التطبيقات التي لا يتم دعمها عند استخدام AMQP. تم سرد هذه الميزات غير المدعومة في قسم Behavioral differences. بعض إعدادات التكوين المتقدمة لها أيضاً معنى مختلف عند استخدام AMQP.
تكوين سلسلة الاتصال لاستخدام AMQP 1.0
قم بإلحاق سلسلة الاتصال بـ ;TransportType=Amqp
لإرشاد العميل لإجراء اتصاله بناقل خدمة Microsoft Azure باستخدام AMQP 1.0.
مثال،
Endpoint=sb://[namespace].servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=[SAS key];TransportType=Amqp
مكان الحصول على namespace
وSAS key
من مدخل Microsoft Azure عند إنشاء مساحة اسم ناقل الخدمة. لمزيد من المعلومات، راجع إنشاء مساحة اسم ناقل الخدمة باستخدام مدخل Microsoft Azure.
AMQP عبر WebSockets
لاستخدام AMQP عبر WebSockets، اضبط TransportType
في سلسلة الاتصال على AmqpWebSockets
. على سبيل المثال: Endpoint=sb://[namespace].servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=[SAS key];TransportType=AmqpWebSockets
.
تسلسل الرسائل
عند استخدام البروتوكول الافتراضي، يتمثل سلوك التسلسل الافتراضي لمكتبة عميل NET. في استخدام النوع DataContractSerializer لإجراء تسلسل لمثيل BrokeredMessage للنقل بين مكتبة العميل وخدمة ناقل خدمة Microsoft Azure. عند استخدام وضع النقل AMQP، تستخدم مكتبة العميل نظام نوع AMQP لتسلسل الرسالة الوسيطة في رسالة AMQP. يمكّن هذا التسلسل من استلام الرسالة وتفسيرها بواسطة تطبيق استلام يحتمل أن يكون قيد التشغيل على نظام أساسي مختلف، على سبيل المثال، تطبيق Java يستخدم JMS API للوصول إلى ناقل خدمة Microsoft Azure.
عند إنشاء مثيل BrokeredMessage، يمكنك توفير عنصر .NET كمعامل للمنشئ ليكون بمثابة نص الرسالة. بالنسبة للكائنات التي يمكن تعيينها لأنواع AMQP البدائية، يتم تسلسل الجسم إلى أنواع بيانات AMQP. إذا كان لا يمكن تعيين العنصر مباشرة في نوع AMQP البدائي؛ أي نوع مخصص يحدده التطبيق، ثم يتم إجراء تسلسل للعنصر باستخدام DataContractSerializer، ويتم إرسال وحدات البايت المتسلسلة في رسالة بيانات AMQP.
لتسهيل إمكانية التشغيل التفاعلي مع العملاء بخلاف عملاء .NET، استخدم فقط أنواع .NET التي يمكن تحويلها إلى تسلسل مباشر إلى أنواع AMQP لنص الرسالة. يوضح الجدول التالي تفاصيل هذه الأنواع والتعيين المقابل لنظام نوع AMQP.
نوع عنصر الجسم .NET | نوع AMQP المعين | نوع قسم جسم AMQP |
---|---|---|
منطقي | boolean | قيمة AMQP |
byte | ubyte | قيمة AMQP |
ushort | ushort | قيمة AMQP |
uint | uint | قيمة AMQP |
ulong | ulong | قيمة AMQP |
sbyte | byte | قيمة AMQP |
قصير | قصير | قيمة AMQP |
العدد الصحيح | العدد الصحيح | قيمة AMQP |
طويل | طويل | قيمة AMQP |
عائم | عائم | قيمة AMQP |
مزدوج | مزدوج | قيمة AMQP |
عشري | decimal128 | قيمة AMQP |
حرف | حرف | قيمة AMQP |
DateTime | الطابع الزمني | قيمة AMQP |
Guid | uuid | قيمة AMQP |
byte[] | binary | قيمة AMQP |
سلسلة | سلسلة | قيمة AMQP |
System.Collections.IList | قائمة | قيمة AMQP: يمكن أن تكون العناصر الموجودة في المجموعة هي العناصر المحددة في هذا الجدول فقط. |
System.Array | صفيف | قيمة AMQP: يمكن أن تكون العناصر الموجودة في المجموعة هي العناصر المحددة في هذا الجدول فقط. |
النظام، المجموعات، القاموس | map | قيمة AMQP: يمكن أن تكون العناصر الموجودة في المجموعة هي العناصر المحددة في هذا الجدول فقط. ملاحظة: يتم دعم مفاتيح السلسلة فقط. |
Uri | السلسلة الموصوفة (انظر الجدول التالي) | قيمة AMQP |
DateTimeOffset | وصف طويل (انظر الجدول التالي) | قيمة AMQP |
TimeSpan | وصف طويل (انظر ما يلي) | قيمة AMQP |
الدفق | binary | بيانات AMQP (قد تكون متعددة). تحتوي أقسام البيانات على وحدات البايت الأولية المقروءة من عنصر الدفق. |
عنصر آخر | binary | بيانات AMQP (قد تكون متعددة). يحتوي على الملف الثنائي المتسلسل للعنصر الذي يستخدم DataContractSerializer أو جهاز التسلسل الذي يوفره التطبيق. |
.NET Type | النوع الموصوف لـ AMQP المعين | الملاحظات |
---|---|---|
Uri | <type name=”uri” class=restricted source=”string”> <descriptor name=”com.microsoft:uri” /></type> |
Uri.AbsoluteUri |
DateTimeOffset | <type name=”datetime-offset” class=restricted source=”long”> <descriptor name=”com.microsoft:datetime-offset” /></type> |
DateTimeOffset.UtcTicks |
TimeSpan | <type name=”timespan” class=restricted source=”long”> <descriptor name=”com.microsoft:timespan” /></type> |
TimeSpan.Ticks |
الاختلافات السلوكية
توجد بعض الاختلافات الطفيفة في سلوك WindowsAzure.ServiceBus API عند استخدام AMQP، مقارنة بالبروتوكول الافتراضي:
- تم تجاهل خاصية OperationTimeout.
- تم تنفيذ
MessageReceiver.Receive(TimeSpan.Zero)
كـMessageReceiver.Receive(TimeSpan.FromSeconds(10))
. - لا يمكن إكمال الرسائل باستخدام رموز القفل إلا بواسطة مستلمي الرسائل الذين استقبلوا الرسائل في البداية.
التحكم في إعدادات بروتوكول AMQP
تعرض .NET APIs عدة إعدادات للتحكم في سلوك بروتوكول AMQP:
- MessageReceiver.PrefetchCount: يتحكم في الائتمان الأولي المطبق على ارتباط. الافتراضي هو 0.
- MessagingFactorySettings.AmqpTransportSettings.MaxFrameSize: يتحكم في الحد الأقصى لحجم إطار AMQP المقدم أثناء التفاوض في وقت فتح الاتصال. الافتراضي هو 65.536 بايت.
- MessagingFactorySettings.AmqpTransportSettings.BatchFlushInterval: إذا كانت عمليات النقل قابلة للدفع، تحدد هذه القيمة الحد الأقصى للتأخير لإرسال عمليات التخلص. موروث من قِبل المرسلين / المستلمين بشكل افتراضي. يمكن للمرسل / المتلقي الفردي تجاوز الإعداد الافتراضي، وهو 20 ملّي ثانية.
- MessagingFactorySettings.AmqpTransportSettings.UseSslStreamSecurity: للتحكم في إنشاء اتصالات AMQP عبر اتصال TLS. الافتراضي هو صواب.
الخطوات التالية
هل أنت مُستعد لمعرفة المزيد؟ قم بزيارة الروابط التالية: