كانت البرمجة المستجيبة شائعة بين مجتمع المطورين والعملاء في السنوات الأخيرة بسبب قدرتها على بناء التطبيقات بطريقة إعلانية بدلاً من إجبارهم على تكوين تطبيقات أكثر حساسية ومرونة. حقيقة أن Spring 5 يدمج أنظمة التفاعل في إطارها الأساسي أظهرت تحولًا في النموذج إلى البرمجة التعريفية.
تدير البرمجة المستجيبة تدفقات البيانات غير المتزامنة بين منتجي البيانات والمستهلكين ، والتي تحتاج إلى الاستجابة للبيانات بطريقة سلسة. لذلك ، فإن البرمجة المستجيبة هي تطبيق سلس غير متزامن ويعتمد عليه الحدث ، ويتطلب عدد صغير من المواضيع.
من الصعب إنشاء البرمجة المستجيبة للبنية القائمة على الخيوط بسبب التعقيد العالي الذي ينطوي عليه توسيع التطبيقات بناءً على حالات متغيرة وخيوط وأقفال مشتركة.
في سياق البرمجة المستجيبة ، "عندما تكون هناك بيانات في دفق ، يكون كل شيء دفقًا ويتصرف بطريقة سلسة."
يؤدي التجريد رفيع المستوى والبرمجة المستجيبة إلى تحسين قابلية قراءة الكود ، بحيث يمكن للمطورين التركيز بشكل أساسي على الترابط بين الأحداث التي تحدد منطق العمل.
في البيئات المتزامنة للغاية ، يكون نمط الاستجابة مناسبًا بشكل طبيعي لمعالجة الرسائل ، وهي حالة استخدام للمؤسسة الشائعة.
نظرًا لطبيعة الضغط على خلفية التنفيذ ، يكون النهج المستجيب أكثر ملاءمة للتحكم في حركة المرور بين المنتجين والمستهلكين ، مما سيساعد على تجنب استنفاد الذاكرة.
لواحد أو عدة مؤشرات ترابط ، يمكن تنفيذ مهام الربط IO بشكل غير متزامن وغير حظر دون حظر الخيط الحالي.
قد يتم تشغيل إشعارات الأنظمة الفرعية للاتصال المتعددة في تطبيقات التفاعل العالية والتطبيقات في الوقت الفعلي أو أي عملية/أحداث ، وفي هذه الحالة يمكن إدارة البرمجة المستجيبة بشكل أكثر كفاءة.
يحدد "تدفق الاستجابة" مواصفات API التي تحتوي على مجموعة أقل من الواجهات التي تكشف عن طرق لتحديد العمليات وكيانات تدفقات البيانات التي لا تحتوي على خلفية.
مع إدخال ضغط الخلفي ، يسمح تدفق الاستجابة للمستخدم بالتحكم في سعر صرف البيانات من الناشر.
أصبح استجابة تدفق api java.util.concurrent.flow رسميًا جزءًا من Java 9.
يستخدم دفق الاستجابة بشكل أساسي طبقة قابلية التشغيل البيني.
يدعم كل من وحدة الربيع التفاعلية و SPRING MVC نفس برمجة Controller ، ولكن يتم تنفيذ التفاعل بين الربيع على كل من المحركات التفاعلية وغير المحظورة.
اتبع هذا الوثيقة ، راجع:
http://docs.spring.io/spring-framework/docs/5.0.0.build-snapshot/spring-framework-reference/html/web-reactive.html
تشترك الوحدة النمطية للبيئة في Spring-Web و SPRING MVC في العديد من الخوارزميات المشتركة ، لكن الوحدة النمطية للتفاعل بين الربيع قد أعادت تعريف العديد من عقود MVC Spring ، مثل طلبات HTTP والاستجابة للمعالجات (في شكل محكم ومحافظ).
بالإضافة إلى RestTemplate الحالي ، يتم تقديم موقع ويب جديد استجابة جديد في ربيع 5.
اعتمد عملاء HTTP الذين يدعمون البرمجة المستجيبة (مثل المفاعل ، NetTy ، LeattTow) سلسلة من عميل ClientHttPrequest و ClientHttpresponse الذي يعرض الطلبات وأجسام الاستجابة على أنها تدفق <Tupuffer> وتوفر دعمًا شاملاً لضغط الظهر على جانب القراءة والكتابة.
يقدم SPRING 5 Framework المفاعل كتطبيق لمواصفات التدفقات التفاعلية.
المفاعل هو المكتبة التفاعلية للجيل القادم لبناء تطبيقات غير حظر على JVM.
يمتد المفاعل عقد ناشر التدفقات التفاعلية الأساسية ويحدد أنواع API Flux و Mono لتوفير عمليات إعلانية لتسلسل البيانات من 0..n و 0..1 ، على التوالي.
يستخدم Spring Web Reactive Servlet 3.1 لتوفير إدخال/إخراج غير المحظور ويعمل على حاويات Servlet 3.1.
يوفر Spring WebFlux نموذجين للبرمجة للاختيار من بينها.
يتضمن Spring 5 Web Spring Web Reactive (تحت وحدة التفاعل بين Web-Web) و Spring Web MVC (تحت وحدة Spring-WebMVC).
على الرغم من أن وحدات Spring Web Reactive و Spring Web MVC تشتركان في العديد من الخوارزميات ، نظرًا لأن Spring Web Reactive يمكن أن تعمل على طبقة محول HTTP غير المستجيبة غير المحظورة ، فإنها لا تشارك رمزًا بينهما.
يتطلب تنفيذ Spring MVC حاوية Servlet ، في حين أن Spring Web Reactive يمكن أن يعمل أيضًا في أوقات التشغيل غير المرئية ، مثل Netty و UnderTow.
إذا كنت بحاجة إلى استخدام مكدس ويب غير محظور مع إطار ويب خفيف الوزن ، واستخدامه مع Java 8 Lambda أو Kotlin ، فيجب عليك التفكير في التبديل من تطبيقات Spring MVC إلى Spring Web Reactive.
هذا إصدار 2.0.0 M5 من pom.xml يعتمد على webfiux.
<Arnal> <roupiD> org.springframework.boot </rougiD> <intifactid> spring-boot-starter-parent </shintifactid> <splection> 2.0.0.m5 </splist> </parent> <ependencies> <sperence> <StifactId> Spring-Boot-Starter-Webflux </stifactid> </reperence> </
الطريقة التقليدية مقابل طريقة الاستجابة
في الأساليب التقليدية ، سيتم حظر التنفيذ وسوف ينتظر حتى يتم الانتهاء من تنفيذ الخدمة. في الكود التالي ، بعد بيان الطباعة الأول ، سيتم حظر تنفيذ البرنامج وانتظار إكمال تنفيذ الخدمة. بعد اكتمال تنفيذ الخدمة ، يتم استئناف تنفيذ البرنامج ويتم تنفيذ بيان الطباعة الثاني.
getMapping ("/traditional") قائمة عامة <Tromprom> getAllProducts () {system.out.println ("الطريق التقليدي") ؛ قائمة <Product> Products = Producerservice.getProducts ("التقليدية") ؛ System.out.println ("Way Traditional Way") ؛ منتجات العودة ؛}في طريقة الاستجابة ، سيستمر تنفيذ البرنامج دون انتظار الانتهاء من تنفيذ الخدمة. في الكود التالي ، بعد بيان الطباعة الأول ، سيتم تنفيذ بيان الطباعة الثاني بطريقة غير حظر دون انتظار إكمال تنفيذ الخدمة. سيتم ملء تدفق التدفق مع توفر بيانات المنتج.
getMapping (value = "/reactive" ، .text_event_stream_value) تدفق عام <product> getAll () {system.out.println ("طريقة رد الفعل باستخدام التدفق البدء") ؛ Flux <Product> fluxproducts = prodservice.getProductSstream ("Flux") ؛ System.out.println ("طريقة رد الفعل باستخدام التدفق المكتمل") ؛ إرجاع منتجات FluxProducts ؛}بالإضافة إلى RestTemplate الحالي ، قدم Spring 5 أيضًا WebClient التفاعلي.
تعرض ClientHttPrequest و ClientHttpResponse أخصائيات الطلب والاستجابة باستخدام Flux <Towabuffer> وتوفير دعم الضغط الكامل على كل من جانب القراءة والكتابة.
يتم أيضًا استخدام تجريدات التشفير والترميز من SPRING CORE على جانب العميل لتسلسل أو نقل الزعانف الإنديان إلى كائنات النوع.
فيما يلي مثال على مواقع الويب التفاعلية التي تستدعي المحطة وتتلقى ومعالجة كائنات تدفق الدفق التفاعلي.
getMapping ("/accounts/{id}/ALERTS") تدفق عام <Alert> getAccountAlerts (@pathvariable id) إرجاع this.repository.getAccount (id) .flatmap (حساب -> webclient.perform (get ("/alerts/{key}" ، account.getKey ()). extract (bodystream (ALERT.Class))) ؛}ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.