2.3:服务消费者(Feign)

本文介绍Spring Cloud Feign,一种声明式服务调用客户端,支持Feign和JAX-RS注解,整合Ribbon和Eureka实现负载均衡。文章详细讲解如何在项目中引入Feign依赖,创建启动类并配置FeignClient接口,实现远程服务调用。
摘要由CSDN通过智能技术生成

一. 什么是Feign?

  1. Spring Cloud Feign是一套基于Netflix Feign实现的声明式服务调用客户端。

  2. 伪RPC客户端(本质还是用http)

  3. 具备可插拔的注解支持,包括Feign注解、JAX-RS注解。它也支持可插拔的编码器和解码器。

  4. Spring Cloud Feign还扩展了对Spring MVC注解的支持,同时还整合了Ribbon和Eureka来提供均衡负载的HTTP客户端实现。


二. 使用Fegin

  1. 在pom.xml中添加依赖(新旧版本依赖名称不一样)下面是dalston版本

<dependencies>

    ...

    <dependency>

        <groupId>org.springframework.cloud</groupId>

        <artifactId>spring-cloud-starter-feign</artifactId>

    </dependency>

</dependencies>

 

  1. 创建应用启动类

    1. 启动类增加@EnableFeignClients

@SpringBootApplication

@EnableFeignClients

public class OrderServiceApplication {

 

    public static void main(String[] args) {

        SpringApplication.run(OrderServiceApplication.class, args);

    }

 

}

 

  1. 增加一个接口 并在接口类上加上注解:@FeignClient(name="product-service")

/**

* 商品服务客户端

*/

@FeignClient(name = "product-service")

public interface ProductClient {

 

    @GetMapping("/api/v1/product/find")

    String findById(@RequestParam(value = "id") int id);

 

}

 

//对比product-service中的Controller

//@RestController

//@RequestMapping("/api/v1/product")

//public class ProductController {

//    

//    @Value("${server.port}")

//    private String port;

//

//    @Autowired

//    private ProductService productService;

//    

//    /**

//     * 根据id查找商品详情

//     * @param id

//     * @return

//     */

//    @RequestMapping("find")

//    public Object findById(int id){

//

//        Product product = productService.findById(id);

//

//        Product result = new Product();

//        BeanUtils.copyProperties(product,result);

//        result.setName( result.getName() + " data from port="+port );

//        return result;

//    }

//    

//}

 

  1. 注意点:

    1. 路径

    2. Http方法必须对应

    3. 使用requestBody,应该使用@PostMapping

    4. 多个参数的时候,通过@RequestParam("id") int id)方式调用

 


三. ribbon和Feign选择

  1. 选择feign的原因:

    1. 默认集成了ribbon

    2. 写起来更加思路清晰和方便

    3. 采用注解方式进行配置,配置熔断等方式方便

  2. 超时配置:

    1. 默认optons readtimeout是60,但是由于hystrix默认是1秒超时

 

application.yml中配置超时时间:

#修改调用超时时间

feign:

  client:

    config:

      default:

        connectTimeout: 2000

        readTimeout: 2000

 

另:模拟接口响应慢,线程睡眠新的方式

try {

    TimeUnit.SECONDS.sleep(1);

} catch (InterruptedException e) {

     e.printStackTrace();

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值