SpringCloud http客户端Feign -- Feign替代RestTemplate

Posted CodeJiao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringCloud http客户端Feign -- Feign替代RestTemplate相关的知识,希望对你有一定的参考价值。

本节案例承接上节案例

1. Feign替代RestTemplate


1.1 RestTemplate方式调用存在的问题


1.2 Feign的介绍

Feign是一个声明式的http客户端 官方地址,其作用就是帮助我们优雅的实现http请求的发送,解决上面提到的问题。


1.3 定义和使用Feign客户端


1.3.1 引入feign客户端依赖-

        <!--feign客户端依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

1.3.2 在order-service的启动类添加注解开启Feign的功育


@EnableFeignClients

1.3.3 编写Feian客户端

package cn.itcast.order.clients;

import cn.itcast.order.pojo.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

/**
 * ClassName: UserClient
 * Description:
 *
 * @author Tianjiao
 * @date 2022/2/23 22:43
 */
@FeignClient("user-service")
public interface UserClient 
    @GetMapping("/user/id")
    User findById(@PathVariable("id") Long id);


1.3.4 用Feign客户端代替RestTemplate

package cn.itcast.order.service;

import cn.itcast.order.clients.UserClient;
import cn.itcast.order.mapper.OrderMapper;
import cn.itcast.order.pojo.Order;
import cn.itcast.order.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

@Service
public class OrderService 

    @Autowired
    private OrderMapper orderMapper;
    
    @Autowired
    UserClient userClient;

    public Order queryOrderById(Long orderId) 
        // 1.查询订单
        Order order = orderMapper.findById(orderId);
        // 2. 使用Feign远程调用
        User user = userClient.findById(order.getUserId());
        // 3. 封装user信息
        order.setUser(user);
        // 4.返回
        return order;
    

启动测试:


注意他们都在public的命名空间:


1.3.5 小结


1.4 说明: Feign里面默认集成了Ribbon(负载均衡)



以上是关于SpringCloud http客户端Feign -- Feign替代RestTemplate的主要内容,如果未能解决你的问题,请参考以下文章

springcloud系列四 feign远程调用服务

SpringCloud之声明式服务调用 Feign

SpringCloud Feign使用

SpringCloud-服务的消费者(Feign)

SpringCloud 之Feign服务消费者

SpringCloud http客户端Feign -- 自定义Feign的配置(一般情况下需要配置的是日志级别)Feign的配置优化