http客户端Feign

Feign替代RestTemplate
使用RestTemplate的方式:
RestTemplate是SpringWeb提供的Http客户端,但是使用RestTemplate代码可读性差,且参数复杂 url 难维护。

//        String url = "http://localhost:8081/user/" + order.getUserId();
//        将IP地址和端口号改为服务名称
        String url = "http://userService/user/" + order.getUserId();
        User user = restTemplate.getForObject(url, User.class);

使用Feign:
1.添加依赖

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

2.在orderService的启动类上添加注解开启Feign功能
@EnableFeignClients
3.编写Feign客户端

@FeignClient("userService")						// 指定调用的服务名称
public interface userClient {
    @GetMapping("/user/{id}")					// 请求方式 + 路径
    User findById(@PathVariable Long  id);		// 返回值类型 + 请求参数
}

4.使用

    @Autowired
    private userClient userClient;
    
    public Order queryOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);

        // 2.用 Feign远程调用
        User user = userClient.findById(order.getUserId());

        // 3.填充
        order.setUser(user);
        // 4.返回
        return order;
    }

如果启动的时候有报错:No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalancer?
SpringCloud Feign在Hoxton.M2 RELEASED版本之后不再使用Ribbon而是使用spring-cloud-loadbalancer,
所以不引入spring-cloud-loadbalancer会报错
考虑:

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<!-- 去除nacos-discovery中的子依赖ribbon -->        
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-netflix-ribbon</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
<!-- 使用spring-cloud-loadbalancer -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-loadbalancer</artifactId>
        </dependency>

自定义Feign的配置

配置Feign日志
第一种方式:

feign:
  client:
    config:
      default:		# 这里 default 就是全局配置, 如果是服务名称,则是针对某个服务的配置
        loggerLevel: NONE/BASIC/HEADERS/FULL		# 日志级别(默认是NONE)

性能优化

Feign底层的客户端实现:
HttpURLConnection:默认,不支持连接池,是JDK自带的
Apache HttpClient:支持连接池
okhttp:支持连接池
日志级别最好使用BASIC或者NONE
使用okhttp

        <dependency>
            <groupId>io.github.openfeign</groupId>
            <artifactId>feign-okhttp</artifactId>
        </dependency>

根据spring-cloud-openfeign-core包下的FeignAutoConfiguration类进行配置

# feign配置
feign:
  client:
    config:
      default:
        loggerLevel: NONE
  httpclient:
    enabled: false
    max-connections: 200    # 最大连接数
    max-connections-per-route: 30   # 每个请求的最大连接数
  okhttp:
    enabled: true

IDEA中的debug断点调试技巧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值