OpenFeign

 1、OpenFeign介绍 

        Feign是Spring Cloud提供的一个声明式的伪Http客户端, 它使得调用远程服务就像调用本地服务一样简单只需要创建一个接口并添加一个注解即可

     当然在使用OpenFeign前,你得先将服务进行注册,可以选择注册到Nacos,注册流程如果不懂,可以参考

Nacos服务注册当然我相信你应该是懂的,因为学微服务一般都是先学习服务注册。

2、使用步骤

注意接下来操作,均在服务调用者模块

步骤一:在服务调用者中引入OpenFeign的依赖

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

当然推荐直接在总模块直接引入,这样就不用在各个模块独立引入,OpenFeign还是应用挺频繁的。

步骤二:在服务调用者的启动类加入注解:@EnableFeignClients

步骤三:定义一个新的接口,编写Feign客户端

@FeignClient("my-order")  //my-order是服务提供者的注册在nacos的服务模块名
public interface OrderService {
    @GetMapping("/order")    //这个路径是my-order里面的应该uri路径
    List<String> getOrderId();  // 方法名可以随便写,但是返回值一定要对应

}

          服务提供者查询对应的接口如下:

步骤四:注入使用

3、连接池

Feign请求别的服务,底层发起http请求,依赖于其它的框架。其底层支持的http客户端实现包括:

  • HttpURLConnection:默认实现,不支持连接池。

  • Apache HttpClient :支持连接池

  • OKHttp:支持连接池

因此我们可以更改底层实现,这样性能会变高点。

实现步骤如下:

步骤一 :引入依赖

<!--OK http 的依赖 -->
<dependency>
  <groupId>io.github.openfeign</groupId>
  <artifactId>feign-okhttp</artifactId>
</dependency>

步骤二:在yml中开启连接池。

feign:
  okhttp:
    enabled: true # 开启OKHttp功能

### OpenFeign 使用指南 #### 配置教程 为了使应用程序能够利用OpenFeign的功能,在项目中引入依赖是非常重要的。对于Spring Cloud应用来说,通常只需要在`pom.xml`文件或者构建工具对应的配置文件里添加相应的依赖项即可完成集成工作。 当涉及到具体的服务调用时,开发者可以通过定义接口并标注`@FeignClient`来指定目标服务名称以及基础路径等信息[^3]。例如: ```java @FeignClient(name = "example-service", url = "${feign.client.config.example.url}") public interface ExampleService { @GetMapping("/api/example") String getExample(); } ``` 上述代码片段展示了如何声明一个简单的Feign客户端用于访问名为`example-service`的服务中的API资源。 #### 日志级别设置 关于日志级别的设定,OpenFeign提供了四种不同的选项:NONE、BASIC、HEADERS 和 FULL。这些级别决定了哪些类型的日志会被记录下来以便于调试和监控目的。如果想要查看更详细的交互细节,则可以考虑将日志等级设为FULL,这样不仅可以获取到HTTP请求的方法名、URL地址及其返回的状态码之外的信息,还能看到完整的头部字段乃至消息主体的内容[^5]。 #### 处理400错误案例分析 针对某些情况下可能出现的400 Bad Request异常情况,特别是由于参数过多而导致的问题,解决方案之一就是调整传递方式。比如原本作为查询字符串附加在URL后面的参数列表(如menuIds),改由POST方法携带至服务器端处理;或者是采用分页机制减少单次传输的数据量,从而避免触发浏览器或框架内部的安全限制措施[^4]。 ```python def post_menu_ids(menu_ids): """ POST method to send a list of menu IDs. Args: menu_ids (list): List of integer values representing the ID's of menus. Returns: dict: Response from server after processing request with provided menu ids. """ response = requests.post('http://service/menu', json={"ids": menu_ids}) return response.json() ``` 此Python函数示范了怎样转换成POST请求发送大量ID数据给远程服务端点的例子。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值