感谢阅读,希望能对你有所帮助,博文若有瑕疵请在评论区留言或在主页个人介绍中添加我私聊我,感谢每一位小伙伴不吝赐教。我是XiaoLin,既会写bug也会唱rap的男孩,这个专栏主要是介绍目前微服务最主流的解决方案,SpringCloudAlibaba,将会分组件介绍。专栏地址: SpringCloudAlibaba。
Feign是Spring Cloud提供的一个声明式的伪Http客户端, 它使得调用远程服务就像调用本地服务一样简单, 只需要创建一个接口并添加一个注解即可。
Nacos很好的兼容了Feign, Feign默认集成了 Ribbon, 所以在Nacos下使用Fegin默认就实现了负载均衡的效果。
在shop-order-server项目的pom文件加入Fegin的依赖。
- <!--fegin组件-->
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-openfeign</artifactId>
- </dependency>
- 复制代码
我们需要在启动类上添加@EnableFeignClients注解,只有有了这个注解才会扫描。
- @SpringBootApplication
- @EnableDiscoveryClient
- @EnableFeignClients // 支持Feign
- public class ShopOrderServerApp {
- public static void main(String[] args) {
- SpringApplication.run(ShopOrderServerApp.class,args);
- }
-
- @Bean
- @LoadBalanced
- public RestTemplate getInstance(){
- return new RestTemplate();
- }
- }
- 复制代码
在Shop-order-server中新增一个接口。
- // name指定FeignClient的名称,如果项目使用了Ribbon,name属性会作为微服务的名称,用于服务发现
- @FeignClient(name = "product-service")
- public interface ProductFeignApi {
- @RequestMapping("/product")
- Product findById(@RequestParam("productId") Long productId);
- }
- 复制代码
- @Autowired
- ProductFeignApi productFeignApi;
- @Override
- public Order getById(Long oid, Long pid) {
- Product product = productFeignApi.findById(pid);
- Order order = orderDao.getOne(oid);
- order.setPname(product.getPname());
- return order;
- }
- 复制代码
我们可以配置超时属性。
- feign:
- client:
- config:
- default:
- connectTimeout: 5000
- readTimeout: 5000
- 复制代码