Blage's Coding Blage's Coding
Home
算法
  • 手写Spring
  • SSM
  • SpringBoot
  • JavaWeb
  • JAVA基础
  • 容器
  • Netty

    • IO模型
    • Netty初级
    • Netty原理
  • JVM
  • JUC
  • Redis基础
  • 源码分析
  • 实战应用
  • 单机缓存
  • MySQL

    • 基础部分
    • 实战与处理方案
    • 面试
  • ORM框架

    • Mybatis
    • Mybatis_Plus
  • SpringCloudAlibaba
  • MQ消息队列
  • Nginx
  • Elasticsearch
  • Gateway
  • Xxl-job
  • Feign
  • Eureka
  • 面试
  • 工具
  • 项目
  • 关于
🌏本站
🧸GitHub (opens new window)
Home
算法
  • 手写Spring
  • SSM
  • SpringBoot
  • JavaWeb
  • JAVA基础
  • 容器
  • Netty

    • IO模型
    • Netty初级
    • Netty原理
  • JVM
  • JUC
  • Redis基础
  • 源码分析
  • 实战应用
  • 单机缓存
  • MySQL

    • 基础部分
    • 实战与处理方案
    • 面试
  • ORM框架

    • Mybatis
    • Mybatis_Plus
  • SpringCloudAlibaba
  • MQ消息队列
  • Nginx
  • Elasticsearch
  • Gateway
  • Xxl-job
  • Feign
  • Eureka
  • 面试
  • 工具
  • 项目
  • 关于
🌏本站
🧸GitHub (opens new window)
  • SpringCloudAlibaba

  • MQ消息队列

  • Nginx

  • Elasticsearch

  • Gateway

  • Xxl-job

  • Feign

    • Feign远程调用
      • 1.安装使用
      • 2.性能优化
      • 3.最佳实践
  • Eureka

  • 中间件
  • Feign
phan
2023-05-15
目录

Feign远程调用

# Feign远程调用

声明式http客户端,可以实现http请求发送。具有负载均衡功能,底层依赖于Ribbon

# 1.安装使用

  • 添加maven依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
1
2
3
4
  • 在启动类上开启注解功能@EnableFeignClients
  • 声明一个接口,这个接口不用我们去实现,使用时直接自动注入使用
@FeignClient("uservice") //对应服务提供者的服务名称
public interface UserClient {
    @GetMapping("/user/{id}")
    User findById(@PathVariable Long id);
}
1
2
3
4
5

除此之外Feign可以自定义配置日志级别,显示http的请求和应答信息。

# 2.性能优化

  • 日志接别设置为Basic或者None
  • 使用连接池代替默认的URLConnection(Apache HttpClient或者OKHttp)

# 3.最佳实践

  • 方式一:消费者发送FeignHttp请求和提供者controller的处理方法两者接口是一致的,那么可以统一给消费者的UserClient和提供者UserController提供统一接口去继承和实现。

    问题:紧耦合,同时父接口参数映射不能被继承。

  • 方式二:将FeignClient抽取为独立模块,把FeignClient、POJO、Feign默认配置都定义到一个项目中,供所有消费者使用,调用还是通过消费者调用。消费者服务中仅仅保留order服务相关的代码,关于user的实体类、HttpClient的声明全部都抽取挪到一个项目或者模块。

    问题:当定义的FeignClient不在SpringBootApplication的扫描包范围时,这些FeignClient无法使用。有两种方式解决。

@EnableFeignClients(basePackages = "cn.itcast.feign.clients")
@EnableFeignClients(clients = {UserClient.class})
1
2
编辑 (opens new window)
#中间件
上次更新: 2023/12/15, 15:49:57
xxl-job使用
Eureka基础

← xxl-job使用 Eureka基础→

Theme by Vdoing | Copyright © 2023-2024 blageCoder
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式