1. عند استخدام Feign لإجراء مكالمات الخدمة ، استخدم الطرق الموروثة للاتصال بالخدمة. عند الانضمام إلى تكوين معالجة قاطع الدائرة في Hystrix ، سيتم الإبلاغ عن خطأ وتم حله. 2. استخدم التكوين الافتراضي Feign ، لا يسري قاطع الدائرة ، وتم حله.
في الآونة الأخيرة ، كنت أتعلم عن الخدمات المجهرية ووجدت أنه عند استخدام Feign لإجراء مكالمات الخدمة ، استخدمت الميراث للاتصال بالخدمة. عند إضافة تكوين معالجة قاطع الدائرة في Hystrix ، سيتم الإبلاغ عن خطأ. الرمز كما يلي:
requestmapping ("/demo/api") الواجهة العامة helloapi {getMapping ("user/{id}") المستخدم getUserById (pathvariable ("id") معرف طويل) ؛ getMapping ("Hello") echo echo (requestparam ("name") اسم السلسلة) ؛} feignclient (value = "ms-server" ، FackRack = consumerFignServiceFallback.class) الواجهة العامة المستهلك يمتد helloapi {} componentpublic class classeRfeIgnServiceFallback تنفذ المستهلك expleerfeignservice {Override Public User GetUserById (id long) {return new user () ؛ } Override Public String echo (اسم السلسلة) {return "echo error:" + name ؛ }}تم الإبلاغ عن الخطأ على النحو التالي:
سبب: java.lang.illegalstateException: رسم الخرائط الغامضة. لا يمكن رسم خريطة '
الملخص العام java.lang.string com.theaughterworks.demo.api.helloapi.echo (java.lang.string)
إلى {[/demo/api/hello] ، الطرق = [get]}: هناك بالفعل "طريقة الفاصوليا" المستهلك
public java.lang.string com.theagtworks.demo.consumer.service.consumerFeignServiceFallback.echo (java.lang.string).
في org.springframework.web.servlet.handler.abstracthandlermethodmapping $ mappingregistry.assertuniquemethodmapping (Abstracthandlermethodmapping.java:576) ~ [spring-webmvc-4.3.14.release.jar: 4.3.14.release]
في org.springframework.web.servlet.handler.abstracthandlermethodmapping $ mappingregistry.register (abractracthandlermethodmapping.java:540) ~ [spring-webmvc-4.3.14.release.jar: 4.3.14.release]
في org.springframework.web.servlet.handler.abstracthandlermethodmapping.registerlermethod (Abractracthandlermethodmapping.java:264) ~ [spring-webmvc-4.3.14.release.jar: 4.3.14.release]
في org.springframework.web.servlet.handler.abstracthandlermethodmapping.detecthandlermethods (Abracthandlermethodmapping.java:250) ~ [spring-webmvc-4.3.14
في org.springframework.web.servlet.handler.abstracthandlermethodmapping.inithandlermethods (Artracthandlermethodmapping.java:214) ~ [Spring-WebMVC-4.3.14.Release.jar: 4.3.14.release]
في org.springframework.web.servlet.handler.abstracthandlermethodmapping.afterpropertiesset (Abracthandlermethodmapping.java:184) ~ [spring-Webmvc-4.3.14.release.jar: 4.3.14.release]
في org.springframework.web.servlet.mvc.method.annotation.requestmappingHandlermapping.afterPropertiesset (requestMappingHandLermapping.java:127) ~ [Spring-Webmvc-4.3.14
في org.springframework.beans.factory.support.abstractautowiReCupableBeanfactory.InvokeinitMethods (AbstractautowIreCapeBeanfactory.java:1687) ~ [Spring-beans-4.3.14.release.jar: 4.3.14.erease]
في org.springframework.beans.factory.support.abstractautowiReCableBeanfactory.InitializeBean (AbstractautowIreCableBeanfactory.java:1624)
... 21 إطارات شائعة تم حذفها
سبب الخطأ هو أن فئة الواجهة الموروثة هنا هي واجهة تحكم ، والتي سترث من الفئة الأصل عند الوراثة.
requestmapping ("/DEMO/API")عندما كان SPRINGMVC يقوم بالتعيين ، تبين أن الخرائط بين المستهلك وخدمة المستهلك وتكرار FREENSERVICERBACK ، لذلك تم طرح استثناء. كيف تحلها؟
هناك حلولان:
أولاً ، قم بتغيير تكوين رسم الخرائط لـ ConsumerFeignServiceFallback ، الرمز هو كما يلي:
@component @requestMapping ("Froprack/Demo/API") الفئة العامة المستهلكين ، Farments Fairments ConsumerFeignService {Override Public User GetUserById (long id) {return new user () ؛ } Override Public String echo (اسم السلسلة) {return "echo error:" + name ؛ }}والثاني هو استخدام ForpbackFactory ، الرمز هو كما يلي:
componentpublic class classeRfeignServiceForpback تنفذ FackRackFactory <consumerFeignService> {Override Public ConsumerFeignService Create (cause remable) {return new ConsumerFignService () {Override public getUserbyid (long id) {return new user () ؛ } Override Public String echo (اسم السلسلة) {return "echo error:" + name ؛ }} ؛ }}بعد الجري ، أوقفت مزود الخدمة ووجدت أن الصمامات لم يسري. لم أدخل طريقة الاحتياطية مثل استخدام HystrixCommand وحده. راجعت العديد من الطرق ووجدت أن مفتاح التكوين لـ Hystix ، الذي كان في الأصل يتظاهر ، لم يتم تشغيله.
الحل: أضف التكوين في application.yml على النحو التالي:
Feign: Hystrix: تمكين: صحيح
لا يوجد موجه لهذا التكوين في فكرة Intellij ، ويتم الإبلاغ عن تحذير أيضًا. لا أعرف ما إذا كان يعتبر خطأ. الإصدار الذي أستخدمه هنا هو
springbootversion = '1.5.10.release'springCloudversion =' edgware.sr3 '
ما سبق بعض المزالق الصغيرة التي وجدتها عند استخدام Feign. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.