1. Lorsque vous utilisez Feign pour passer des appels de service, utilisez des méthodes héritées pour appeler le service. Lorsque vous rejoignez la configuration de secours du disjoncteur de circuit d'Hystrix, une erreur sera signalée et a été résolue. 2. Utiliser la configuration par défaut de fierté, le disjoncteur ne prend pas effet et a été résolu.
Récemment, j'apprenais les microservices et j'ai constaté que lors de l'utilisation de Feign pour passer des appels de service, j'ai utilisé l'héritage pour appeler le service. Lors de l'ajout de la configuration de secours du disjoncteur de circuit d'Hystrix, une erreur sera signalée. Le code est le suivant:
@RequestMapping ("/ Demo / API") Interface publique helloapi {@getMapping ("User / {id}") User GetUserById (@Pathvariable ("id") Long ID); @GetMapping ("Hello") String echo (@RequestParam ("Name") Nom de la chaîne);} @FeignClient (value = "MS-Server", Fallback = ConsumerFeigNerviceFallback.class) Interface publique ConsumerFeigNervice étend Helloapi {} @ComponentPublic Class ConsumerFeigNerviceFallback implémente ConsumerFeigNervice {@Override public User GetUserById (Long ID) {return New User (); } @Override public String echo (String Name) {return "ECHO ERROR:" + name; }}L'erreur est signalée comme suit:
Causées par: java.lang.illegalstateException: cartographie ambiguë. Impossible de mapper 'com.thoughtworks.demo.consumer.service.ConsumerFeigNervice' Méthode
Résumé public java.lang.string com.thoughtworks.demo.api.helloapi.echo (java.lang.string)
à {[/ démo / api / hello], méthodes = [get]}: il y a déjà la méthode «ConsumerFeigServiceFallback»
public java.lang.string com.thoughtworks.demo.consumer.service.consumerFeigServicefallback.echo (java.lang.string) mappé.
à org.springframework.web.servlet.handler.abstracthandlermethodmapping $ mappingregistry.assesertUniquethodmapping (abstracthandlermethodmapping.java:576) ~ [printemps-webmvc-4.3.14.release.jar: 4.3.14.release]
à org.springframework.web.servlet.handler.abstracthandlermethodmapping $ mappingregistry.register (abstracthandlermethodmapping.java:540) ~ [printemps-webmvc-4.3.14.release.jar: 4.3.14.release]
à org.springframework.web.servlet.handler.abstracthandlermethodmapping.registerhandlermethod (abstracthandlermethodmapping.java:264) ~ [printemps-webmvc-4.3.14.release.jar: 4.3.14.release]
à org.springframework.web.servlet.handler.abstracthandlermethodmapping.detecthandlerMethods (abstracthandlermethodmapping.java:250) ~ [printemps-webmvc-4.3.14.release.jar: 4.3.14.release]
à org.springframework.web.servlet.handler.abstracthandlermethodmapping.inithandlermethods (abstracthandlermethodmapping.java:214) ~ [printemps-webmvc-4.3.14.release.jar: 4.3.14.release]
à org.springframework.web.servlet.handler.abstracthandlermethodmapping.afterpropertiesset (abstracthandlermethodmapping.java:184) ~ [printemps-webmvc-4.3.14.release.jar: 4.3.14.release]
à org.springframework.web.servlet.mvc.method.annotation.requestmappinghandlermapping.afterpropertiesset (requestmappinghandlermapping.java:127) ~ [printemps-webmvc-4.3.14.release.jar: 4.3.14.release]
à org.springframework.beans.factory.support.abstractAutowireCapableBeanFactory.invokeInitMethods (AbstractAutowireCapableBeanFactory.java:1687) ~ [Spring-Beans-4.3.14.Release.Jar: 4.3.14.release]
à org.springframework.beans.factory.support.abstractAutowireCapableBeanFactory.InitializeBean (AbstractAutowireCapableBeanFactory.java:1624) ~ [Spring Beans-4.3.14.Release.Jar: 4.3.14.release]
... 21 cadres communs omis
La raison d'erreur est que la classe d'interface héritée ici est une interface de contrôleur, qui héritera de la classe parent lors de l'héritage.
@RequestMapping ("/ Demo / API")Lorsque SpringMVC faisait la cartographie, il a été constaté que la cartographie entre ConsumerFeigNervice et ConsumerFeigServicefallback a été répétée, donc une exception a été lancée. Comment le résoudre?
Il y a 2 solutions:
Tout d'abord, modifiez la configuration de mappage de ConsumerFeigNerviceFallback, le code est le suivant:
@ Composant @ requestMapping ("Fallback / Demo / API") Class public ConsumerFeigServiceFallback implémente ConsumerFeigNervice {@Override public User GetUserById (Long ID) {return new User (); } @Override public String echo (String Name) {return "ECHO ERROR:" + name; }}La seconde consiste à utiliser FallbackFactory, le code est le suivant:
@ComponentPublic Class ConsumerFeigNerviceFallback implémente FallBackFactory <ConsumerFeigNervice> {@Override public ConsumerFeigNervice create (Trowable Cause) {return new ConsumerFeigNervice () {@Override public User GetUseryId (long id) {return new User (); } @Override public String echo (String Name) {return "ECHO ERROR:" + name; }}; }}Après avoir coulé, j'ai éteint le fournisseur de services et j'ai constaté que le fusible ne prenait pas effet. Je ne suis pas entré dans la méthode de secours comme l'utilisation de @hystrixcommand seul. J'ai vérifié de nombreuses méthodes et j'ai constaté que le commutateur de configuration de Hystix, qui était à l'origine feign, n'était pas allumé.
Solution: ajoutez la configuration dans application.yml comme suit:
feign: Hystrix: Activé: true
Il n'y a aucune invite pour cette configuration dans Intellij Idea, et un avertissement est également signalé. Je ne sais pas si c'est considéré comme un bug. La version que j'utilise ici est
SpringbootVersion = '1.5.10.release'springCloudVersion =' Edgware.sr3 '
Ce qui précède est quelques petits pièges que j'ai trouvés lors de l'utilisation de feign. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.