使用 Netflix Feign 客户端调用服务
Netflix 的 Feign 客户端库是启用 Load Balancer 的 RestTemplate 类的替代方案。Feign 库采用不同的方法来调用 REST 服务。使用这种方法,开发人员首先定义一个 Java 接口,然后添加 Spring Cloud 注解,以映射将要调用的服务。Spring Cloud 框架将动态生成一个代理类,用于调用目标 REST 服务。除了接口定义,开发人员不需要编写其他调用服务的代码。
1. 添加依赖
2. 使用 @EnableFeignClients 注解标注引导类
3. 定义接口
上述代码中,使用了 @FeignClient 注解,并将我们想让这个接口代表的服务的应用程序 ID 传递给它。接下来,在这个接口中定义一个 getOrganization() 方法,客户端可以调用该方法来调用组织服务。
定义 getOrganization() 方法的方式看起来就像在 Spring 控制器类中公开一个端点的方式一样。
首先,为 getOrganization() 方法定义一个 @RequestMapping 注解,该注解映射 HTTP 动词以及将在 organization 服务调用中公开的端点。
其次,使用 @PathVariable 注解将URL传入的组织ID映射到方法调用上的organizationId参数。
调用组织服务的返回值将被自动映射到 Organization 类,这个类被定义为 getOrganization() 方法的返回值。
要使用 OrganizationFeignClient 类,我们需要做的只是自动装配并使用它。Feign 客户端代码将为我们处理所有编码。
通过 Feign 客户端,被调用的服务返回的 HTTP 状态码 4xx ~ 5xx 都将映射为 FeignException。
FeignException 包含可以被解析为特定错误消息的 JSON 体。
Feign 提供了编写错误解码器类的功能,该类可以将错误映射回自定义的 Exception 类。
Last updated