تكوين آلية إعادة محاولة إعادة محاكاة SpringCloud
بادئ ذي بدء ، فإن إعادة المحاولة هنا ليست إعادة محاولة بعد الإبلاغ عن خطأ ، ولكن إعادة المحاولة إلى مثيل آخر بعد أن تجد عميل موازنة التحميل أن مثيل الطلب عن بُعد غير متوفر.
@bean@loadBalancedRestTemplate restTemplate () {httpcomponentsclienthttprequestfactory httprequestfactory = new httpcomponentsclienthttprequestfactory () ؛ httprequestfactory.setReadTimeout (5000) ؛ httprequestfactory.setConnectTimeout (5000) ؛ إرجاع RestTemplate جديد (httprequestfactory) ؛}آلية إعادة المحاولة التظاهر
تبرز إعادة محاولة التكوين من خلال إعادة المحاولة التي يتم تعبئتها بنفسها ، والافتراضي هو 5 مرات
Package Feign ؛ Import static java.util.concurrent.timeunit.seconds ؛/*** تم استنساخه لكل استدعاء إلى {link client#execute (request ، feign.request.options)}. * قد تبقي التطبيقات الدولة لتحديد ما إذا كانت عمليات إعادة المحاولة يجب أن تستمر أم لا. * /reception الواجهة العامة يمتد استنساخ { /*** إذا تم السماح بإعادة المحاولة ، فالتراجع (ربما بعد النوم). خلاف ذلك نشر الاستثناء. */ void ontearorpropagate (RetryableException e) ؛ إعادة المحاولة استنساخ () ؛ الفئة الثابتة العامة تنفذ Retryer {Private Final int maxattempts ؛ الفترة النهائية الطويلة الخاصة ؛ نهائي خاص طويل maxperiod. محاولة نام منذ فترة طويلة. الافتراضي العام () {this (100 ، seconds.tomillis (1) ، 5) ؛ } الافتراضي العام (الفترة الطويلة ، الطويل maxperiod ، int maxattempts) {this.period = period ؛ this.maxperiod = maxperiod ؛ this.maxattempts = maxattempts ؛ this.attempt = 1 ؛ }تظاهر إلغاء إعادة المحاولة
beanretryer feignretryer () {return recept.never_retry ؛}تظاهر طلب المهلة إعداد المهلة
@beanrequest.options requestOptions (envableenvironment env) {int ribbonReadTimeOut = env.getProperty ("ribbon.readtimeout" ، int.class ، 6000) ؛ int RibbonConnectionTimeOut = env.getProperty ("ribbon.connecttimeout" ، int.class ، 3000) ؛ إرجاع طلب جديد.إعادة محاولة كل مكون في Spring Cloud
في الآونة الأخيرة ، سألتني العديد من أحذية الأطفال عن كيفية تكوين مكون Spring Cloud XXX للمحاولة مرة أخرى. يلخصها هذه المقالة.
آلية إعادة المحاولة في سحابة الربيع فوضوية للغاية. الإصدارات المختلفة لها اختلافات معينة والتنفيذ لا يختلف تمامًا. لحسن الحظ ، استقرت Spring Cloud Camden بشكل أساسي بعد ذلك ، وتم إجراء بعض التحسينات في Dalston. لم يتم تحديد التفاصيل بعد.
دعنا نناقشها بالتفصيل أدناه.
الإصدار الذي أستخدمه هو Spring Cloud Dalston SR4 ، وهو أيضًا مناسب لـ Edgware ثم لاحقًا. بالنسبة إلى الإصدار السابق ل Dalston ، لن تناقشها هذه المقالة ، يمكنك دراستها بنفسك.
إعادة إعادة الشريط+resttemplate
من أجل RestTemplate الذي يدمج الشريط ، على سبيل المثال ، يضيف RestTemplate التعليق التوازن:
@bean@loadBalancedPublic restTemplate restTemplate () {simpleClientHttPrequestFactory SimpleClientHttPrequestFactory = new SimpleClientHttPrequestFactory () ؛ SimpleClientHttPrequestFactory.setConnectTimeout (1000) ؛ SimpleClientHttPrequestFactory.setReadTimeout (1000) ؛ إرجاع RestTemplate جديد (SimpleClientHttPrequestFactory) ؛}على هذا الأساس ، يمكن تحقيق إعادة المحاولة باستخدام التكوين التالي:
الربيع: السحابة: loadbalancer: إعادة إعادة المحاولة: ممكّن: trueribbon: # الحد الأقصى لعدد إعادة المحاكاة لنفس المثيل ، باستثناء المكالمة الأولى إلى maxautoristries: 1 # عدد القصور العدد من عمليات إعادة المحاكاة الأخرى ، باستثناء أول خادم محدد maxautoretriesnexterver: 2 #
إعادة محاكاة التظاهر
تظاهر نفسه لديه أيضا القدرة على إعادة المحاولة. في أوائل الربيع Cloud ، استخدم Feign feign.Retryer.Default#Default() ، وحاولته 5 مرات. لكن Feign يدمج الشريط ، كما أن الشريط لديه أيضًا القدرة على إعادة المحاولة ، مما قد يؤدي إلى الارتباك في السلوك في هذا الوقت.
أدركت Spring Cloud هذه المشكلة ، لذلك قامت بتحسينات لتغيير إعادة محاكاة Feign إلى feign.Retryer#NEVER_RETRY . إذا كنت بحاجة إلى استخدام إعادة إعادة محاكاة Feign ، فما عليك سوى استخدام تكوين إعادة محاولة RIBBON. لذلك ، بالنسبة إلى كامدن والإصدارات اللاحقة ، يمكن تكوين إعادة محاكاة Feign باستخدام الخصائص التالية:
الشريط: maxautoristries: 1 maxautoristriesNextserver: 2 OkToretryOnallOperations: false
يمكن العثور على المشكلات ذات الصلة على: https://github.com/spring-cloud/spring-cloud-netflix/issues/467
إعادة محاكاة زول
إعدادات:
Zuul: # تمكين Zuul القابل لإعادة إعادة إعادة إعادة إحياءه: trueribbon: maxautoristries: 1 maxautorestriesnextserver: 2 oktoretryonalloperations: false
أعلاه استخدمنا zuul.retryable=true لتمكين إعادة المحاولة على مستوى العالم ل Zuul. في الواقع ، يمكننا أيضًا تمكين/إيقاف المسار المحدد:
Zuul.Routes. <routomename> .retryable = true
أولوية التكوين المحلية أعلى.
أعد إعادة المحاولة بناءً على رمز استجابة HTTP
ClientName: الشريط: Retryablestatuscodes: 404،502
ملحوظة:
يجب أن تكون مهلة Hystrix أكبر من وقت المهلة ، وإلا ، بمجرد مهلة Hystrix ، لا توجد طريقة لمواصلة المحاولة مرة أخرى.
بشكل عام ، لا ينصح بتعيين ribbon.OkToRetryOnAllOperations إلى TRUE. لأنه بمجرد تمكين هذا التكوين ، يتم إعادة إعادة إعادة أي عملية ، بما في ذلك طلبات النشر ، وبما أن هيئة الطلب يتم تخزينها مؤقتًا ، فقد تتأثر موارد الخادم في هذا الوقت.
لخص
ما سبق هو المحتوى الكامل لهذه المقالة. آمل أن يكون لمحتوى هذه المقالة قيمة مرجعية معينة لدراسة أو عمل الجميع. إذا كان لديك أي أسئلة ، فيمكنك ترك رسالة للتواصل. شكرا لك على دعمك إلى wulin.com.