1. Feignを使用してサービスコールを行う場合は、継承された方法を使用してサービスを呼び出します。 Hystrixの回路ブレーカー処理フォールバック構成に参加すると、エラーが報告され、解決されます。 2。Feign Default構成を使用して、回路ブレーカーは有効になり、解決されました。
最近、私はマイクロサービスについて学んでいましたが、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)パブリックインターフェイスConsumerFeignService拡張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.thoughtworks.demo.consumer.service.consumerfeignservice'メソッドをマッピングできません
パブリックアブストラクトjava.lang.string com.thoughtworks.demo.api.helloapi.echo(java.lang.string)
{[/demo/api/hello]、methods = [get]}へ:既に「consumerfeignservicefallback」ビーンメソッドがあります
public java.lang.string com.thoughtworks.demo.consumer.service.consumerfeignservicefallback.echo(java.lang.string)マッピング。
atorg.springframework.web.servlet.handler.abstracthandlermethodmapping $ mappingregistry.assertuniquemethodmapping(abstracthandlermethodmapping.java:576)〜
atorg.springframework.web.servlet.handler.abstracthandlermethodmapping $ mappingregistry.register(abstacthandlermethodmapping.java:540)〜
atorg.springframework.web.servlet.handler.abstracthandlermethodmapping.registerhandlermethod(abstracthandlermethodmapping.java:264)〜[spring-webmvc-4.3.14.Release.jar:4.3.14.Release]
atorg.springframework.web.servlet.handler.abstracthandlermethodmapping.detectecthandlermethodmapping.java:250)〜
atorg.springframework.web.servlet.handler.abstracthandlermethodmapping.inithandlermethods(abstracthandlermethodmapping.java:214)〜
atorg.springframework.web.servlet.handler.abstracthandlermethodmapping.afterpropertiesset(abstracthandlermethodmapping.java:184)〜
atorg.springframework.web.servlet.mtod.annotation.RequestMappingHandLermapping.afterPropertiesset(RequestMappingHandLermapping.java:127)〜
atorg.springframework.beans.factory.support.abstractautowirecapablebeanfactory.invokeinitmethods(abstractautowirecapablebeanfactory.java:1687)〜
atorg.springframework.beans.factory.support.abstractautowirecapablebeanfactory.initializebean(abstractautowirecapablebeanfactory.java:1624)〜
... 21の一般的なフレームは省略されています
エラーの理由は、ここで継承されるインターフェイスクラスがコントローラーインターフェイスであり、継承するときに親クラスから継承することです。
@RequestMapping( "/demo/api")
SpringMVCがマッピングを行っていたとき、ConsumerFeignServiceとConsumerFeignService Fallbackの間のマッピングが繰り返されることがわかったため、例外がスローされました。それを解決する方法は?
2つの解決策があります。
まず、ConsumerFeignServiceFallbackのマッピング構成を変更すると、コードは次のとおりです。
@component @requestmapping( "Fallback/demo/api")Public Class ConsumerFeignServiceFallbackはConsumerFeignService {@Override public user getUserById(long id){return new user(); } @Override public string echo(string name){return "echo error:" + name; }}2つ目はFallbackFactoryを使用することです。コードは次のとおりです。
@componentPublic Class ConsumerFeignServiceFallbackを実装するFallbackFactory <ConsumerFeignService> {@Override Public ConsumerFeignService Create(Throwable Cause){return new ConsumerFeignService(){@OverRide PublicユーザーgetUserByID(long id){return new user(); } @Override public string echo(string name){return "echo error:" + name; }}; }}実行後、私はサービスプロバイダーをオフにし、ヒューズが有効になっていないことがわかりました。 @HyStrixCommandのみを使用するようなフォールバック方法には入りませんでした。多くの方法をチェックして、もともと装備されていたHystixの構成スイッチがオンになっていないことがわかりました。
解決策:application.ymlに構成を次のように追加します。
feign:hystrix:enabled:true
Intellijのアイデアにはこの構成の迅速なものはなく、警告も報告されています。バグと見なされているかどうかはわかりません。ここで使用するバージョンはです
springbootversion = '1.5.10.Release'springcloudversion =' edgware.sr3 '
上記は、feignを使用しているときに見つけた小さな落とし穴です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。