Spring CloudでFeignのよくある質問のまとめ

4075 ワード

Spring CloudではFeignのよくある質問のまとめです.
FeignClientインタフェース、@GettingMappingは使用できません などの組合せ注記
コードの例:
@FeignClient(
"microservice-provider-user")
public
interface UserFeignClient
{
@RequestMapping(
value =
"/simple/{id}", method = RequestMethod.GET)
public User findById(@PathVariable("id") Long id);
...
}
こちらの@RequestMapping(value = "/simple/{id}", method = RequestMethod.GET) @GetMapping("/simple/{id}")には書けません .
FeignClientインタフェースでは、@PathVariableに使用されている場合 ,valueを指定する必要があります
コードの例:
@FeignClient(
"microservice-provider-user")
public
interface UserFeignClient
{
@RequestMapping(
value =
"/simple/{id}", method = RequestMethod.GET)
public User findById(@PathVariable("id") Long id);
...
}
こちらの@PathVariable("id") の「id」は、省略できませんので、指定しなければなりません.
FeignClientマルチパラメータの構成microservice-provider-userをリクエストしたい場合は 次のようなパラメータがあります.http://microservice-provider-user/query-by?id=1&username=張三 どうしようかな?
複雑なオブジェクトを直接使用するには:
@FeignClient(
"microservice-provider-user")
public
interface UserFeignClient
{
@RequestMapping(
value =
"/query-by", method = RequestMethod.GET)
public User queryBy(User user);
...
}
このリクエストは成功しません.パラメータが複雑なオブジェクトであれば、GETメソッドを指定してもfeignはPOSTメソッドでリクエストを送信します.
正しい書き方:
書き方1:
@FeignClient(
"microservice-provider-user")
public
interface UserFeignClient
{
@RequestMapping(
value =
"/query-by", method = RequestMethod.GET)
public User queryBy(@RequestParam("id")Long id, @RequestParam("username")String username);
}
書き方2:
@FeignClient(
name =
"microservice-provider-user")
public
interface UserFeignClient
{
@RequestMapping(
value =
"/query-by", method = RequestMethod.GET)
public List queryBy(@RequestParam Map param);
}
Feign Hystrix Streamを使用するには、追加の操作が必要です.
Feign自体がHystrixをサポートしていることを知っています.@FeignClient(value = "microservice-provider-user", fallback = XXX.class)を直接使用することができます. @FeignClientで表記されているインタフェースを統合したfallbackクラスを指定します.
ただし、Hystrix Streamを使用して監視する必要があるとします.デフォルトでは、http://IP:PORT/hystrix.stream 404です.どのようにFeignにHystrix Streamサポートを追加しますか?
次の2つのステップが必要です.
手順1:依存を追加します.例:

org
.springframework
.cloud
groupId>
spring-cloud-starter-hystrix
artifactId>
dependency>
ステップ2:起動クラスに@EnableCircuitBreakerを追加 注記、例:
@SpringBootApplication
@EnableFeignClients
@EnableDiscoveryClient
@EnableCircuitBreaker
public
class MovieFeignHystrixApplication
{
public static void main(String[] args) {
SpringApplication
.run(
MovieFeignHystrixApplication
.class,
args);
}
}
このように修正した後、任意のAPIにアクセスしてから、http://IP:PORT/hystrix.streamすると、API監視データが山積みになっています.
単一Feign構成をカスタマイズする必要がある場合、Feignの@Configuration 注記のクラスは@ComponentScanとは使用できません のバッグが重なる
パッケージが重なると、すべてのFeign Clientがこの構成を使用します.
初回リクエストに失敗しました
詳細は、Spring CloudでFeign/Ribbonの最初のリクエストに失敗した問題をどのように解決しますか?@FeignClient  の属性の注意点
(1)serviceId属性は失効しており,できるだけname属性を用いる.例:
@
FeignClient(
serviceId =
"microservice-provider-user")
このように書くのはお勧めではありません.
@
FeignClient(
name =
"microservice-provider-user")
(2)url属性を使用する場合、古いバージョンのSpring Cloudではname属性を指定する必要はありませんが、新しいバージョン(例えばBrixton、Camden)@FeignClientではname属性を指定し、name、url属性ではプレースホルダをサポートする必要があります.例:
@FeignClient(name =
"${feign.name}", url =
"${feign.url}")
転載先:http://itmuch.com/spring-cloud-sum-feign/