首页 > 其他分享 >10.http客户端feign

10.http客户端feign

时间:2022-11-12 10:46:18浏览次数:69  
标签:10 feign http Feign class order public 客户端

http客户端feign

RestTemplate方式调用存在的问题
先来看我们以前利用RestTemplate发起远程调用的代码:String url = "http://userservice/user/" + order.getUserld();
User user = restTemplate.getForObject(url, User.class);
存在下面的问题:代码可读性差,编程体验不统一参数复杂URL难以维护

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

1.定义和使用Feign客户端,实现远程调用

1.1引入依赖

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

1.2在order-service启动类添加注解开启feign的功能

@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
@EnableFeignClients()
public class OrderApplication {

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

}

1.3编写Feign客户端

@FeignClient("userservice")//引号里面的是要调用的服务名称
public interface UserClient {
    @GetMapping("user/{id}")//Controller,请求路径
    User selectById(@PathVariable("id") Long id);
}

主要是基于SpringMVC的注解来声明远程调用的信息,比如:
服务名称: userservice
请求方式: GET请求路径: /user/[id)
请求参数: Long id
返回值类型: User

1.4 用Feign客户端代替RestTemplate


@Service
public class OrderService {

    @Autowired(required = false)
    private OrderMapper orderMapper;

    @Autowired(required = false)
    private UserClient userClient;

    public Order queryOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);
        //2.利用Feign远程调用userservice服务
        User user = userClient.selectById(order.getUserId());
        //3.
        order.setUser(user);
        // 4.返回
        return order;
    }
}

1.5总结

Feign的使用步骤

  • 引入依赖
  • 启动类添加@EnableFeignClients注解
  • 编写FeignClient接口
  • 使用FeignClient中定义的方法代替RestTemplate

2.Feign的自定义配置,这里以日志级别示例

2.1方式一,配置文件方式

①全局生效:

feign:
  client:
    config:
      default: #这里用default就是全局配置,如果是写服务名称,则是针对某个微服务的配置
        loggerLevel: FULL # 日志级别  

②局部生效:

feign:
  client:
    config:
      userservice: #这里用default就是全局配置,如果是写服务名称,则是针对某个微服务的配置
        loggerLevel: FULL # 日志级别   

2.2java代码的方式,先声明一个bean

public class FeignClientConf {
   
    @Bean
    public Logger.Level loggerLevel(){
        return Logger.Level.BASIC;
    }
}

而后如果是全局配置,则把它放到@EnableFeignClients这个注解中:

@EnableFeignClients(defaultConfiguration = FeignClientConfiguration.class)

如果是局部配置,则把它放到@FeignClient这个注解中:

@FeignClient(value = "userservice", configuration = FeignClientConfiguration.class)

标签:10,feign,http,Feign,class,order,public,客户端
From: https://www.cnblogs.com/zhangdashuaige/p/16882833.html

相关文章

  • #10077. 「一本通 3.2 练习 3」最短路计数
    问1~n的最短路有几个 #include<iostream>#include<cstring>#include<queue>usingnamespacestd;constintN=1e6+2,M=2e6+2;constintinf=0x3f3f3f3f,m......
  • 10. 对象深拷贝问题
    首先,要知道基本数据保存在栈内存,对象数据保存在堆内存,对象地址(就是变量名)保存在栈内存,浅拷贝只会复制栈内存的内容,而深拷贝会复制栈和堆内存中的内容;所以深拷贝的对象有......
  • #10075. 「一本通 3.2 练习 1」农场派对
    图上每个点有一头牛,现在牛群聚集到点X上聚会,然后又回到各自的点,而且牛只走最短路径问所有最短路中最长的一条(路径包含来回) 正反跑一次 spfa(X), spfa(i), an......
  • #10074. 「一本通 3.2 例 3」架设电话线
    在加权无向图上求出一条从1号结点到N号结点的路径,使路径上第K+1大的边权尽量小 二分答案md,判断1~n是否存在一条路径,花费不超过md把w<=md的边看作0,否则看作1......
  • 2022-11-11 这10天,纳斯达克V形反转的一点记录
    1.从11月2号开始,首先已经跌破上升趋势线2.联席会议开始,多头突然发力,2段上涨3.结果空头发力,多空争夺激烈。空头回落到多头的1/2甚至2/3以下,一定要出了!开盘,收盘,事件,会......
  • Linux学习笔记(10)——Linux账号管理与ACL权限设置
    Linux账号管理与ACL权限设置Linux账号管理与ACL权限设置一、Linux的账号与用户组1.1用户标识符:UID与GID1.2用户账户1.3关于用户组:有效与初始用户组,groups,newgr......
  • GL-Suggesting a book 20221104
    TopicSuggestingabookWhichbookisbeingdescribed?Canyouthinkofanymoregenres?IsShakespeareyourfavoriteauthororisAgathaChristiemoreyour......
  • python10
    一、创建并打开记录蚂蚁庄园动态的文件print("\n","="*10,"蚂蚁庄园动态","="*10)film=open('message.txt','w')print("\n即将显示……\n")  二、向蚂蚁庄园的动态文......
  • GL-Planning a trip 20221103 same
    Planningatrip20221103Needtogetawayfromitall?Planyourdreamvacationwithyourclassmates,Whowouldyouliketogoonholidaywith?这节课有人吗?I......
  • GL-Planning a trip 20221103
    Planningatrip这节课有人吗?Idon'thaveajobatpresentIhavebeenworkingfor5yearsmyhobbiesareplayvideogamesandlong-diatancerunning.Youwina......