首页 > 其他分享 >Feign

Feign

时间:2023-06-21 14:55:28浏览次数:43  
标签:Feign springframework user org import order

http客户端Feign

RestTemplate方式调用存在的问题:

//通过”userservice“这个服务名称代替ip、端口

String url = "http://userservice/user/" + order.getUserId(); 

User user = restTemplate.getForObject(url, User.class);

问题:代码可读性差,编程体验不统一

   参数复杂URL难以维护

Feign makes writing java http clients easier

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

作用:帮助我们优雅的实现http请求的发送,解决上面提到的问题。

一、定义和使用Feign客户端

使用Feign的步骤如下:

(1)引入依赖:

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

(2)在order-service的启动类添加注解开启Feign的功能:

  @EnableFeignClients

(3)编写Feign客户端:

  UserClient接口

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;

@FeignClient("userservice")
public interface UserClient {
    @GetMapping("/user/{id}")
    User findById(@PathVariable("id") Long id);
}

主要是基于SpringMVC的注解来声明远程调用的信息,比如:

  服务名称:userservice

  请求方式:GET

  请求路径:/user/{id}

  请求参数:Long id

  返回值类型:User

package cn.itcast.order.web;

import cn.itcast.order.clients.UserClient;
import cn.itcast.order.pojo.Order;
import cn.itcast.order.pojo.User;
import cn.itcast.order.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
@RequestMapping("order")
public class OrderController {

   @Autowired
   private OrderService orderService;

   @Autowired
   private UserClient userClient;

    @GetMapping("{orderId}")
   public Order queryOrderByUserId(@PathVariable Long orderId){
       //1、根据id查询订单并返回
       Order order = orderService.queryOrderById(orderId);
       //2、用Feign远程调用
       User user = userClient.findById(order.getUserId());
       //3、封装user到Order
       order.setUser(user);
       //4、返回
       return order;

   }

//   @Autowired
//   private RestTemplate restTemplate;
//
//    @GetMapping("{orderId}")
//    public Order queryOrderByUserId(@PathVariable("orderId") Long orderId) {
//        //1、根据id查询订单并返回
//        Order order = orderService.queryOrderById(orderId);
//
//        //2、利用RestTemplate发起http请求,查询用户
//        //String url = "http://localhost:8081/user/" + order.getUserId();
//
//        //通过”userservice“这个服务名称代替ip、端口
//        String url = "http://userservice/user/" + order.getUserId();
//        User user = restTemplate.getForObject(url, User.class);
//        //3、封装user到Order
//        order.setUser(user);
//        return order;
//    }


}

Feign的使用步骤

1、引入依赖

2、添加@EnableFeignClients注解

3、编写FeignClient接口

4、使用FeignClient中定义的方法代替RestTemplate

标签:Feign,springframework,user,org,import,order
From: https://www.cnblogs.com/fxzm/p/17496210.html

相关文章

  • Feign
    1.概念Feign是SpringCloudNetflix组件中的一个轻量级RESTful的HTTP服务客户端,实现了负载均衡和Rest调用的开源框架封装了Ribbon和RestTemplate,实现了WebService的面向接口编程,进一步降低了项目的耦合度。Feign内置了Ribbon,用来做客户端负载均衡调用服务注册中心的服务。Fe......
  • feign携带用户信息
    1.通过feignConfig配置文件来携带用户信息。2.@FeignClient(name="user-server",configuration={FeignConfig.class})3.feignConfig是实现了请求拦截器的,他可以把用户信息放到requestTemplate中。在header里面放一个key(user-info),value是用户信息。4.服务端,feign实现了......
  • springboot-feign接口压缩异常
    WARNorg.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver-Resolved[org.springframework.http.converter.HttpMessageNotReadableException:JSONparseerror:Illegalcharacter((CTRL-CHAR,code31)):onlyregularwhitespace(\r,\......
  • 真实案例:Feign 切换 okhttp 无法生效,被老大骂的有点慌!
    来源:https://www.cnblogs.com/mufeng3421/p/11442412.html提示:如果只看如何解决问题,请看文章的末尾如何解决这个问题1.场景描述最近项目中使用了feign当做http请求工具来使用、相对于httpclient、resttemplate来说,fegin用起来方便很多。然后项目有httptrace的需求,需要输出请求......
  • com.netflix.hystrix.exception.HystrixRuntimeException: xxxFeign#xxxx timed-out a
    问题描述在使用Feign进行远程调用时遇到的bug。原因是因为超时了。需要对超时时间进行设置一下即可。在Nacos进行设置原先的contentTimeout和readTimeout都是2000,修改成20000后bug便解决了。......
  • springboot - feign.FeignException$BadRequest: [400] during [GET] to [http:
    ERROR失败原因:、feign.FeignException$BadRequest:[400]during[GET]to[http://方法?携带的请求头条件。。。。。[ManualStockControllerFeign#deleteManualStockTaskByIds(List)]:<!doctypehtml><htmllang="en"><head><title>HTTPStatus400–Bad......
  • 微服务之间的调用方式RestTemplate和FeignClient
    SpringCloud服务间的调用有两种方式:RestTemplate和FeignClient。不管是什么方式,他都是通过REST接口调用服务的http接口,参数和结果默认都是通过jackson序列化和反序列化。因为SpringMVC的RestController定义的接口,返回的数据都是通过Jackson序列化成JSON数据。一、RestTemplate使用......
  • spring cloud 之 openfeign 记录(通过feign上传)
    今日搭建好nacos nacos踩坑记录迫不及待的进入了下一步,服务间的远程调用,就踩了一个小小的坑 我做的是一个阿里oss上传的服务!阿里oss服务个人可以有三个月试用,对新手非常的友好首先是一个openfeign编写上的问题@RequestMapping(value="/common/oss/download",meth......
  • Feign使用实践
    Feign是一个声明式的HTTP客户端,用于简化微服务架构中的服务调用。它基于注解和接口定义,可以与服务发现组件(例如Eureka)和负载均衡组件(例如Ribbon)集成,提供了更简洁、可读性更高的代码来实现服务间的通信。下面是使用Java代码实现Feign入门示例的详细步骤:添加依赖项:在您的Java......
  • 4.OpenFeign
    5.OpenFeignOpenFeign主要基于接口和注解实现了远程调用5.1.简介官网:https://docs.spring.io/spring-cloud-openfeign/docs/2.2.4.RELEASE/reference/html/#spring-cloud-feignFeign是声明性(注解)Web服务客户端。它使编写Web服务客户端更加容易。要使用Feign,先创建一个接......