في الأنظمة الموزعة ، من أجل ضمان اتساق قوي للمعاملات الموزعة للبيانات ، عند استدعاء واجهة RPC أو إرسال MQ ، ستأخذ عملية إعادة المحاولة لمنع مهلة طلب ربط الشبكة. الطريقة الأكثر شيوعًا لإعادة المحاولة هي MQ ، ولكن إذا لم تقدم MQ في مشروعك ، فسيكون ذلك غير مريح. تقدم هذه المقالة بشكل أساسي كيفية استخدام إعادة إعادة المحاولة الربيع لتنفيذ عمليات إعادة المحاولة.
1. إضافة تبعيات Maven
<Rependency> <roupeD> org.springframework.retry </rougiD> <insifactid> استرجاع الربيع </artifactid> <splection> 1.1.2.release </version> </sependency> <sperency> <sperence> </remoD> org.aspectj </roughid> <SentifactId>
2. أضف تكوين إعادة المحاولة في بدء التشغيل
springBOOTAPPLICATION enablertry Application {public static void main (string [] args) {springapplication.run (application.class ، args) ؛ }} 3. اكتب الخدمة
service public class remoteservice {private static final logger = loggerfactory.getLogger (testController.class) ؛ RETRYable (value = {businessException.class} ، maxattempts = 3 ، backoff = abbackoff (delay = 5000l ، multiplier = 2)) public void call () rems stispion {logger.info ("do something ...") ؛ رمي BusinessException ("استثناء استدعاء RPC") ؛ } Recover Public Void Recover (BusinessException e) {logger.info ("---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 4. كتابة وحدة التحكم
RestController @requestmapping ("/test") الفئة العامة testController {private static final logger = loggerfactory.getLogger (testController.Class) ؛ Autowired الخاص عن بعد عن بعد requestmapping ("/test") تسجيل الدخول العام () يلقي استثناء {remoteservice.call () ؛ return string.valueof ("11") ؛ } 5. قم بزيارة http: // localhost: 8080/test/test
6. اختبار سجل
2017-07-25 19:28:07 [info]-[http-nio-53602-exec-1]-[com.test.retry.service.remoteservice.call (remoteservice.java:19)] افعل شيئًا ...
2017-07-25 19:28:12 [info]-[http-nio-53602-exec-1]-[com.test.retry.service.remoteservice.call (remoteservice.java:19)] افعل شيئًا ...
2017-07-25 19:28:22 [info]-[http-nio-53602-exec-1]-[com.test.retry.service.remoteservice.call (remoteservice.java:19)] افعل شيئًا ...
2017-07-25 19:28:22 [info]-[http-nio-53602-exec-1]-[com.test.retry.service.remoteservice.recover (Remoteservice.java:24)] ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2017-07-25 19:28:22 [info]-[http-nio-53602-exec-1]-[com.test.retry.service.remoteservice.recover (remoteservice.java:25)]
7. تعليمات التكوين ذات الصلة
enablerTry ، هل يمكنك المحاولة مرة أخرى ؟ عندما تكون خاصية ProxyTargetClass صحيحة ، استخدم وكيل CGLIB. يتم استخدام التعليقات التوضيحية Java القياسية بشكل افتراضي. في Boot Spring ، يمكن كتابة هذه المعلمة في مدخل البرنامج.
يمكن إعادة محاولة إعادة تسمية هذا التعليق عند حدوث استثناء
القيمة: حدد فئة الاستثناء المراد معالجتها
قم بتضمين: فئة الاستثناء المحددة المعالجة هي نفس القيمة ، والافتراضي فارغ. عندما يكون الاستبعاد فارغًا أيضًا ، يتم تخلف جميع الاستثناءات ليكون كل شيء
استبعاد: حدد أن الاستثناءات لا تتم معالجتها ، والافتراضيات فارغة ، عندما يكون التضمين أيضًا فارغًا ، وافتراضيًا جميع الاستثناءات
Maxattempts: الحد الأقصى لعدد إعادة المحاولة. الافتراضي 3 مرات
Backoff: أعد محاولة سياسة الانتظار. استخدم التعليق التوضيحي بشكل افتراضي
ROTRIEFOFF ROTRY سياسة الانتظار <br /> عند عدم تعيين المعلمات ، يتم استخدام ثابتة backoffpolicy افتراضيًا (حدد وقت الانتظار) ، وينتظر RETRY لـ 1000ms
اضبط التأخير ، واستخدم ثابتًا في سيرة (حدد وقت الانتظار) ، وحاول شغل وقت الانتظار مرة أخرى
عند تحديد التأخير والمقدس ، حاول مرة أخرى وانتظر التوزيع المتجانس بين هاتين القيمتين
تعيين التأخير ، MaxDealy ، ومضاعف ، استخدام phidonalbackoffpolicy (تنفيذ الفاصل الزمني للمعالجة الأسية) ، يحدد مضاعف التأخير متعدد ، مثل التأخير = 5000L ، مضاعف = 2 ، والمحاولة الأولى هي 5 ثوان ، والمرة الثانية هي 10 ثوانٍ ، والمرة الثالثة هي 20 ثانية ...
يتم استخدام recover لطريقة إعادة المحاولة الفاشلة لـ @Resplable. يجب أن تكون معلمات الطريقة لهذا التعليق التوضيحي استثناءًا يتم إلقاؤه بواسطة recerable ، وإلا فلن يتم التعرف عليه. يمكن إجراء معالجة السجل في هذه الطريقة.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.