【全栈之路】微服务课程10_Feign之初遇见

Feign是什么

  • Feign是一个受到Retrofit,JAXRS-2.0和WebSocket启发的Java到HTTP客户端绑定器。
  • Feign的第一个目标是降低将Denominator统一绑定到HTTP API 的复杂性。
  • Feign 是一个声明web服务客户端,这使得编写web服务客户端更容易,使用Feign 创建一个接口并对它进行注解,它具有可插拔的注解支持包括Feign注解与JAX-RS注解,Feign还支持可插拔的编码器与解码器。

RestTemplate与Feign对比

【全栈之路】微服务课程10_Feign之初遇见_第1张图片

如何使用

  • 引入依赖

  org.springframework.cloud
  spring-cloud-starter-openfeign
  • 创建feign Client

@FeignClient(name = "shop-provider-user")
public interface UserFeignClient {
  @GetMapping("/users/{id}")
  User findById(@PathVariable("id") Long id);
}
  • 添加注解@EnableFeignClients
@EnableFeignClients
@SpringBootApplication//(scanBasePackages = {"com.dream.shop"})
public class MovieApplication {

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

    public static void main(String[] args) {
        SpringApplication.run(MovieApplication.class, args);
    }

}
  • 控制器调用
@RequestMapping("/movies")
@RestController
public class MovieController {
  @Autowired
  private RestTemplate restTemplate;

  @Autowired
  private UserFeignClient userFeignClient;

  @GetMapping("/usersByFeign/{id}")
  public User findByIdByFeign(@PathVariable Long id) {
    return this.userFeignClient.findById(id);
  }

  @GetMapping("/users/{id}")
  public User findById(@PathVariable Long id) {
    // 这里用到了RestTemplate的占位符能力
//    User user = this.restTemplate.getForObject("http://localhost:8000/users/{id}", User.class, id);
    User user = this.restTemplate.getForObject("http://shop-provider-user/users/{id}", User.class, id);
    // ...电影微服务的业务...
    return user;
  }
}

你可能感兴趣的:(springcloud,springboot)