1. При использовании Failign для выполнения сервисных вызовов используйте унаследованные методы для вызова службы. При присоединении к конфигурации резервного выключателя Hystrix обработка резервной обработки будет сообщена ошибка и была решена. 2. Используйте Feign Configurational по умолчанию, выключатель схемы не вступает в силу и был разрешен.
Недавно я узнал о микросервисах и обнаружил, что при использовании Feign для совершения сервисных вызовов я использовал наследство, чтобы позвонить в службу. При добавлении конфигурации резервного выключателя Hystrix обработка резервной обработки сообщается об ошибке. Код заключается в следующем:
@Requestmapping ("/demo/api") public interface helloapi {@getMapping ("user/{id}") user getUserbyid (@pathvariable ("id") Long id); @Getmapping ("hello") String echo (@requestparam ("name") name);} @Feignclient (value = "ms-server", swarkback = consumerfeignservicefallback.class) Общедоступный интерфейс ConsumerFeignService Extens Helloapi {} @Componentpublic class consumerfeignservicefallback реализует ConsumerFeignService {@Override public user getUserbyid (long id) {return new user (); } @Override public String echo (String name) {return "Echo Error:" + name; }}Ошибка сообщается следующим образом:
Вызвано: java.lang.illegalstateException: неоднозначное картирование. Не удается отобразить 'com.thoutworks.demo.consumer.service.consumerfeignservice'
Общественный абстрактный java.lang.string com.thoughtworks.demo.api.helloapi.echo (java.lang.string)
to {[/demo/api/hello], methods = [get]}: уже есть метод «ConsumerFeignServicefallback»
public java.lang.string com.thoughtworks.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.
на org.springframework.web.servlet.handler.abstracthandlermethodmapping $ mappingRegistry.register (AbstracThandLermethoDmapping.java:540) ~ [Spring-Webmvc-4.3.14.
at org.springframework.web.servlet.handler.abstracthandlermethodmapping.registerhandlermethod (AbstracThandLermethoDmapping.java:264) ~ [Spring-Webmvc-4.3.14.Release.jar: 4.3.14.release]
at org.springframework.web.servlet.handler.abstracthandlermethodmapping.detecthandlermethods (AbstracThandLermethoDmapping.java:250) ~ [Spring-Webmvc-4.3.14.
at org.springframework.web.servlet.handler.abstracthandlermethodmapping.inithandlermethods (AbstracThandlerMethodMapping.java:214) ~ [Spring-Webmvc-4.3.14.
в org.springframework.web.servlet.handler.abstracthandlermethodmapping.afterpropertiesset (AbstracThandlerMethodMapping.java:184) ~ [Spring-Webmvc-4.3.14.
at org.springframework.web.servlet.mvc.method.annotation.requestmappingHandlermapping.afterpropertiesset (requestmappingHandlermapping.java:127) ~ [Spring-Webmvc-4.3.14.14.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]
at org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.initializebean (Abstractautowirecapablebeanfactory.java:1624) ~ [Spring-Beans-4.3.14.
... 21 общие кадры опущены
Причина ошибки состоит в том, что класс интерфейса, унаследованный здесь, представляет собой интерфейс контроллера, который будет наследовать от родительского класса при наследстве.
@Requestmapping ("/demo/api")Когда SpringMVC делал картирование, было обнаружено, что отображение между ConmersFeignService и ConmersFeignServiceFallback было повторено, поэтому было брошено исключение. Как это решить?
Есть 2 решения:
Во -первых, изменить конфигурацию отображения ConsumerFeignServiceFallBack, код заключается в следующем:
@Component @requestmapping ("sharkback/demo/api") открытый класс ConsumerFeignServiceFallback реализует ConsumerFeignService {@Override public user getUserbyid (long id) {return new user (); } @Override public String echo (String name) {return "Echo Error:" + name; }}Второе - использовать BandbackFactory, код выглядит следующим образом:
@Componentpublic class consumerfeignservicefallback реализует BandbackFactory <ConsumerFeignService> {@Override public consumerfeignService create (throwable cause) {return new ConsumerFeignService () {@Override public user getUserbyid (long id) {return new user (); } @Override public String echo (String name) {return "Echo Error:" + name; }}; }}После запуска я отключил поставщика услуг и обнаружил, что предохранитель не вступит в силу. Я не вводил метод отступления, как использование @hystrixcommand. Я проверил много методов и обнаружил, что переключатель конфигурации Hystix, который был первоначально Feign, не включен.
Решение: добавьте конфигурацию в Application.yml следующим образом:
Файн: Hystrix: включено: true
В этой конфигурации нет никакой подсказки, и сообщается также о предупреждении. Я не знаю, считается ли это ошибкой. Версия, которую я использую здесь
SpringBootVersion = '1.5.10.Release'springCloudversion =' edgware.sr3 '
Вышеуказанное - несколько небольших ловушек, которые я обнаружил при использовании Feign. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.