Spring CloudでFeignのよくある質問のまとめ
4075 ワード
Spring CloudではFeignのよくある質問のまとめです.
FeignClientインタフェース、
コードの例:
@FeignClient(
"microservice-provider-user")
public
interface UserFeignClient
{
@RequestMapping(
value =
"/simple/{id}", method = RequestMethod.GET)
public User findById(@PathVariable("id") Long id);
...
}
こちらの
FeignClientインタフェースでは、
コードの例:
@FeignClient(
"microservice-provider-user")
public
interface UserFeignClient
{
@RequestMapping(
value =
"/simple/{id}", method = RequestMethod.GET)
public User findById(@PathVariable("id") Long id);
...
}
こちらの
FeignClientマルチパラメータの構成
複雑なオブジェクトを直接使用するには:
@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をサポートしていることを知っています.
ただし、Hystrix Streamを使用して監視する必要があるとします.デフォルトでは、http://IP:PORT/hystrix.stream 404です.どのようにFeignにHystrix Streamサポートを追加しますか?
次の2つのステップが必要です.
手順1:依存を追加します.例:
org
.springframework
.cloud
groupId>
spring-cloud-starter-hystrix
artifactId>
dependency>
ステップ2:起動クラスに
@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の
パッケージが重なると、すべてのFeign Clientがこの構成を使用します.
初回リクエストに失敗しました
詳細は、Spring CloudでFeign/Ribbonの最初のリクエストに失敗した問題をどのように解決しますか?
(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/
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
}
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:依存を追加します.例:
.springframework
.cloud
groupId>
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/