草庐IT

Feign

橡皮筋儿 2023-04-16 原文

Feign

Feign是一个声明式的http客户端,官方地址:https://github.com/OpenFeign/feign

1.使用

1.引入依赖

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

2.在消费者启动类开启Feign(添加注解)

@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication 
@EnableFeignClients //注解开启
public class OrderApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }
    @LoadBalanced
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

}

3.创建client文件,编写接口类

/**
 * @Date 2022/10/30 19:17
 * @Author 郜宇博
 */
@FeignClient("userservice")
public interface UserClient {
    /**
     * @param id userid
     * @return User对象
     * 
     */
    @GetMapping("user/{id}")
    User findById(@PathVariable("id") Long id);
}

4.使用

@GetMapping("{orderId}")
public Order queryOrderByUserId(@PathVariable("orderId") Long orderId) {
    // 根据id查询订单并返回
    Order order = orderService.queryOrderById(orderId);
    //调用接口==================
    User user = userClient.queryById(order.getUserId());
    //调用接口结束=====================
    order.setUser(user);
    return order;
}

并且feign已经集成了ribbon

2.性能优化

1.HttpClient支持

2.连接池

3.日志级别尽量用basic

feign底层的连接是没有连接池的,需要更换httpclient

<!--        Feign-http-->
        <dependency>
            <groupId>io.github.openfeign</groupId>
            <artifactId>feign-httpclient</artifactId>
        </dependency>

连接池配置

feign:
  httpclient:
    enabled: true # 支持httpclient

3.实践使用

1.创建feign-api模块整合请求

2.引入依赖

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

3.编写client接口和实体类

/**
 * @Date 2022/10/30 19:17
 * @Author 郜宇博
 */
@FeignClient("userservice")
public interface UserClient {
    /**
     * @param id userid
     * @return User对象
     * 11
     */
    @GetMapping("user/{id}")
    User findById(@PathVariable("id") Long id);
}

4.在消费者pom文件中引入编写的feign-api工程

<!--        feign-api-->
        <dependency>
            <groupId>cn.itcast.demo</groupId>
            <artifactId>feign-api</artifactId>
            <version>1.0</version>
        </dependency>

5.使用前注入client类

由于在其他工程中,因此无法直接注入,需要在启动类的注解中加入Client类

@Autowired
private UserClient userClient;

启动类中

6.使用

//调用接口==================
User user = userClient.queryById(order.getUserId());
//调用接口结束=====================

有关Feign的更多相关文章

  1. Feign传递文件以及MultipartFile对象 - 2

    Feign微服务调用传递文件以及MultipartFile多媒体参数对象上游服务提供者测试服务提供者下游消费者异常原因错误解决方案通过Feign调用接口,来到jdk动态代理的invoke方法,拿到分发器,执行invoke逻辑。invoke方法:构建ReuqestTemplate以及请求报文,执行并解密,执行请求拦截器。可行的解决方案寻找SpringEncoder来源注册自定义Encoder编写自定义Encoder自定义文件上传接口标识注解编写encode逻辑测试总结上游服务提供者使用spring接收文件可以使用MultipartFile对象,并同时使用RequestPart注解标识这个一个多媒

  2. 分布式微服务中Feign的使用 让你完全了解使用Feign - 2

    Feign简介Feign是声明式的http客户端,官网地址:[https://github.com/openfeign/feign]其作用就是帮助我们优雅的实现http请求的发送。它让微服务的调用变得更简单了,类似Controller调用service。SpringCloud集成了Ribbon和Eureka,可在使用Feign时提供负载均衡的http客户端。只需要创建一个接口,然后添加注解即可!RestTemplate的缺点微服务远程调用方式还有通过RestTemplate,但是RestTemplate存在一定的缺点比如参数很多的情况下那么他的http地址将会难以维护。相信我用过Feign之后

  3. feign自定义负载到指定ip - 2

    项目背景:目前使用的springcloud微服务架构,开发人员本地联调过程中,会用到许多并非自己开发的微服务支持。但是这样就需要启动多个应用,严重影响开发效率。现在架构组讨论写一个feign重负载,可以指定一次请求负载到具体ip。大致想法:重写feign的负载均衡客户端LoadBalancerFeignClient,每次请求会执行excute方法,在excute方法中获取指定ip,替换feign已经负载好的ip。遇到问题:配置类没加getset方法,导致无法读取配置文件;DiscoveryClient获取服务列表用getApplication方法,之前用的getInstance获取不到;版本问

  4. SpringCloud Feign异步调用传参问题 - 2

    背景各个子系统之间通过feign调用,每个服务提供方需要验证每个请求header里的token。publicvoidinvokeFeign()throwsException{feignService1.method();feignService2.method();feignService3.method();....}定义拦截每次发送feign调用拦截器RequestInterceptor的子类,每次发送feign请求前将token带入请求头@ConfigurationpublicclassFeignTokenInterceptorimplementsRequestInterceptor{@

  5. Feign的性能优化 - 2

    使用feign之前需要引入相关的依赖(在服务消费端也就是客户端使用)org.springframework.cloudspring-cloud-starter-openfeign application.ymlserver:port:8195spring:cloud:nacos:discovery:server-addr:192.168.122.131:8848application:name:Feign-consumer一,性能优化1----设置合理的日志OpenFeign提供了日志打印的功能,我们可以调整日志的输出级别,去了解OpenFeign的http请求的细节。即对OpenFeign远

  6. java - 将 Feign 与 Hystrix 结合使用时如何允许 400 错误传播? - 2

    我正在构建一个调用另一个微服务的SpringBoot微服务,自然希望使用Hystrix和Feign客户端,它们都包含在SpringCloud中。我使用的是Camden.SR5版本。对于来自Feign的任何超时、连接失败和50x响应代码,我希望Hystrix启动并正常工作:触发断路器并调用回退(如果已配置)等。它默认执行此操作,所以我很好。但是对于40x响应代码,其中包括无效条目、错误格式的字段等,我希望Hystrix将这些异常传播给调用者,这样我也可以根据自己的选择来处理它们。这不是我观察到的默认设置。如何在SpringCloud中配置Hystrix/Feign来执行此操作?开箱即用,

  7. java - Feign Client 不解析 Query 参数 - 2

    这是我的界面。publicinterfaceSCIMServiceStub{@RequestLine("GET/Users/{id}")SCIMUsergetUser(@Param("id")Stringid);@RequestLine("GET/Groups?filter=displayName+Eq+{roleName}")SCIMGroupisValidRole(@Param("roleName")StringroleName);}这里getUser调用工作正常。但是isValidRole无法正常工作,因为请求最终是这样发送的。/Groups?filter=displayName

  8. java - spring cloud feign hystrix 回退不起作用 - 2

    与springboot版本1.3.8.RELEASE和云版本“Brixton.SR”相同的代码工作正常。但是“1.5.2.RELEASE”和“Dalston.RC1”不起作用。异常HTTP状态500-请求处理失败;嵌套异常是java.lang.RuntimeException:com.netflix.client.ClientException:Loadbalancerdoesnothaveavailableserverforclient:math-service 最佳答案 好的,您可以将以下内容添加到您的application.p

  9. java - 使用 Feign 上传文件 - multipart/form-data - 2

    我正在尝试使用feign完成多部分文件上传,但我似乎无法在任何地方找到一个很好的例子。我基本上希望HTTP请求结果与此类似:...Content-Type:multipart/form-data;boundary=AaB03x--AaB03xContent-Disposition:form-data;name="name"Larry--AaB03xContent-Disposition:form-data;name="file";filename="file1.txt"Content-Type:text/plain...contentsoffile1.txt...--AaB03x--甚

  10. java - 使用 Hystrix Feign 记录请求和响应 json 负载 - 2

    我正在使用HystrixFeign和Spring编码器。我想记录每个请求发出的确切请求(Json)负载还有回应。我该怎么做? 最佳答案 当你定义你的feign配置时,你必须setthefeignloggerlevel,根据feignloggerclass,你有4个可能的值,所以你可能想使用Logger.Level.FULL.希望对你有帮助。 关于java-使用HystrixFeign记录请求和响应json负载,我们在StackOverflow上找到一个类似的问题:

随机推荐