1. Feign을 사용하여 서비스 호출을 할 때 상속 된 방법을 사용하여 서비스를 호출하십시오. Hystrix의 회로 차단기 처리 폴백 구성에 가입하면 오류 가보고되어 해결되었습니다. 2. Feign 기본 구성을 사용하면 회로 차단기가 적용되지 않으며 해결되었습니다.
최근에 나는 마이크로 서비스에 대해 배우고 있었고 Feign을 사용하여 서비스 호출을 할 때 상속을 사용하여 서비스를 호출한다는 것을 알았습니다. Hystrix의 회로 차단기 처리 폴백 구성을 추가하면 오류 가보고됩니다. 코드는 다음과 같습니다.
@requestmapping ( "/demo/api") public interface helloApi {@getMapping ( "user/{id}") user getUserById (@PathVariable ( "id") long id); @GetMapping ( "Hello") String Echo (@requestparam ( "name") String name);} @feignclient (value = "ms-server", fallback = consumerfeignservicefallback.class) public 인터페이스 consumerfeignservice 확장 helloapi {} @ComponentPublic Class ConsumerFeignServiceFallback은 ConsumerFeignService {@override public user getUserByid (long id) {return new user (); } @override public String echo (문자열 이름) {return "echo error :" + name; }}오류는 다음과 같이보고됩니다.
원인 : java.lang.ilegalstateException : 모호한 매핑. 'com.thoughtworks.demo.consumer.service.consumerfeignservice'메소드를 매핑 할 수 없습니다
공개 초록 Java.lang.string com.thoughtworks.demo.api.helloapi.echo (java.lang.string)
{[/demo/api/hello], methods = [get]} : 이미 'ConsumerFeignServicefallback'Bean 메소드가 있습니다
public java.lang.string com.thoughtworks.demo.consumer.service.consumerfeignservicefall.echo (java.lang.string) 매핑.
org.springframework.web.servlet.handler.abstracthandlermethodmapping $ mappingregistry.assertuniquemethodmapping (Abstracthandlermethodmapping.java:576) ~ [Spring-webmvc-4.3.14.jar : 4.3.14.release]
org.springframework.web.servlet.handler.abstracthandlermethodmapping $ mappingregistry.register (Abstracthandlermethodmapping.java:540) ~ [스프링 webmvc-4.3.14.release.jar : 4.3.14. Release]
org.springframework.web.servlet.handler.abstracthandlermethodmapping.registerhandlermethod (Abstracthandlermethodmapping.java:264) ~ [스프링 webmvc-4.3.14.release.jar : 4.3.14. Release]
org.springframework.web.servlet.handler.abstracthandlermethodmapping.detecthandlermethods (Abstracthandlermethodmapping.java:250) ~ [Spring-webmvc-4.3.3.jar : 4.3.14. Release]
org.springframework.web.servlet.handler.abstracthandlermethodmapping.inithandlermethods (Abstracthandlermethodmapping.java:214) ~ [스프링 webmvc-4.3.14.release.jar : 4.3.14. Release]
org.springframework.web.servlet.handler.abstracthandlermethodmapping.afterpropertiesset (Abstracthandlermethodmapping.java:184) ~ [Spring-webmvc-4.3.3.14.release.jar : 4.3.14. Release]
at org.springframework.web.servlet.mvc.method.annotation.requestmappinghandlermpapp.afterpropertiesset (requestmappinghandlermpapp.java:127) ~ [Spring-webmvc-4.3. Jar : 4.3.14. Release]
org.springframework.beans.factory.support.AbstractAutoweRecapableBeanFactory.invokeInitMethods (AbstractAutoweRecapableBeanFactory.java:1687) ~ [Spring-Beans-4.3.14. Release.jar : 4.3.14. Release]
org.springframework.bean.bean.support.abstractautoweRecapablebeanfactory.initializebean (acpractAutoweRecapableBeanFactory.java:1624) ~ [Spring-Beans-4.3.14.Release.jar : 4.3.14.Release]
... 21 공통 프레임이 생략되었습니다
오류 이유는 여기에 상속 된 인터페이스 클래스가 상속 될 때 상위 클래스에서 상속되는 컨트롤러 인터페이스이기 때문입니다.
@requestmapping ( "/demo/api")
SpringMVC가 매핑을 할 때 ConsumerFeignService와 ConsumerFeignServicefallback 사이의 매핑이 반복되어 예외가 발생한 것으로 나타났습니다. 그것을 해결하는 방법?
두 가지 솔루션이 있습니다.
먼저 ConsumerFeignServicefallback의 매핑 구성을 변경하면 코드는 다음과 같습니다.
@component @requestmapping ( "fallback/demo/api") 공개 클래스 소비자 소비자 소비자 inservice {@override public user getUserByid (long id) {return new user (); } @override public String echo (문자열 이름) {return "echo error :" + name; }}두 번째는 fallbackfactory를 사용하는 것입니다. 코드는 다음과 같습니다.
@ComponentPublic Class ConsumerFeignServiceFallback은 FollbackFactory <ConsumerFeignService> {@Override public consumerfeignservice create (return new consumerfeignservice () {@override public user getUserByid (long id) {return new user (); } @override public String echo (문자열 이름) {return "echo error :" + name; }}; }}실행 후 서비스 제공 업체를 끄고 퓨즈가 적용되지 않는다는 것을 알았습니다. @HyStrixCommand 만 사용하는 것과 같은 폴백 메소드에 들어 가지 않았습니다. 많은 방법을 확인한 결과 원래 Feign이었던 Hystix의 구성 스위치가 켜지지 않았다는 것을 알았습니다.
솔루션 : 다음과 같이 application.yml에 구성 추가 :
Feign : Hystrix : enabled : true
Intellij 아이디어에는이 구성에 대한 프롬프트가 없으며 경고도보고됩니다. 버그로 간주되는지 모르겠습니다. 내가 여기서 사용하는 버전은
SpringBootversion = '1.5.10. Release'SpringCloudVersion ='edgware.sr3 '
위는 Feign을 사용할 때 찾은 작은 함정입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.