Netflix Feign 8.18.0的简单使用Demo

Netflix Feign 8.18.0的简单使用Demo

说明

非SpringCloud的Feign。
小白学习中。

Feign是一种远程调用解决方案,因此我区分了 “服务提供者”和“服务调用者” 。二者分离独立。

服务提供者

  • 创建一个普通的spring boot项目。
    引入依赖
<parent>
    <artifactId>spring-boot-starter-parent</artifactId>
    <groupId>org.springframework.boot</groupId>
    <version>2.3.3.RELEASE</version>
  </parent>

  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
      <version>2.3.3.RELEASE</version>
    </dependency>
        <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-autoconfigure</artifactId>
      <version>2.3.3.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>com.netflix.feign</groupId>
      <artifactId>feign-core</artifactId>
      <version>8.18.0</version>
    </dependency>
    <dependency>
      <groupId>com.netflix.feign</groupId>
      <artifactId>feign-jackson</artifactId>
      <version>8.18.0</version>
    </dependency>

    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
    </dependency>

  </dependencies>
  • 新建一个Provider模块

  • 编写一个普通的web服务接口
    服务提供者模块结构

  • application.yml 配置一下端口,这里配置为 8801

server:
  port: 8802
  • 实体类 User
/**
 * @author WillingWay619
 */
@Data
@ToString
public class User implements Serializable {

    private String name;

    private Integer age;
}

  • 控制器 UserController
import org.example.domain.User;
import org.springframework.web.bind.annotation.*;

/**
 * @author WillingWay619
 */
@RestController
@RequestMapping("user")
public class UserController {

    @RequestMapping(value = "/list", method = {RequestMethod.POST, RequestMethod.GET})
    // @PostMapping("/list")
    public User list(@RequestBody User user) throws Exception {
        System.out.println("----user: " + user);
        user.setAge(user.getAge()==null?20:user.getAge());
        user.setName(user.getName()==null?"Scott":user.getName());

        return user;
    }
}
  • 然后启动,最好测试一下
  • 测试成功,则一个 等待被feign调用的服务 就做好了!

服务调用者

  • 新建一个Consumer模块
    在这里插入图片描述

  • 配置文件中配置好feign的目标url及端口(8802调用8801

server:
  port: 8802

feign:
  service:
    provider:
      url: http://127.0.0.1
      port: 8801
  • 实体类User同上
  • FeignInit 初始化类
import example.client.FeignClient;
import feign.Feign;
import feign.Request;
import feign.Retryer;
import feign.jackson.JacksonDecoder;
import feign.jackson.JacksonEncoder;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author WillingWay619
 */
@Configuration
public class FeignInit {

    @Value("${feign.service.provider.url}")
    private String serviceProviderUrl;

    @Value("${feign.service.provider.port}")
    private String serviceProviderPort;

    @Bean
    public FeignClient initClient() {
        System.out.println("----serviceProviderUrl: " + serviceProviderUrl);
        System.out.println("----serviceProviderPort: " + serviceProviderPort);
        return Feign.builder()
                .options(new Request.Options(3000, 3000))
                .encoder(new JacksonEncoder())
                .decoder(new JacksonDecoder())
                .retryer(new Retryer.Default(5000, 5000, 3))
                .target(FeignClient.class, serviceProviderUrl + ":" + serviceProviderPort);
    }
}
  • FeignClient 客户端类
import example.domain.User;
import feign.Headers;
import feign.RequestLine;

/**
 * @author WillingWay619
 */
@Headers({"Content-Type: application/json", "accept: application/json"})
public interface FeignClient {

    @RequestLine("POST /user/list")
    public User getOwner(User user);

}
  • TestController测试接口
import example.client.FeignClient;
import example.domain.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author WillingWay619
 */
@RestController
@RequestMapping("test")
public class TestController {

    @Autowired
    private FeignClient feignClient;

    @RequestMapping("/1")
    public Object test1(String name, Integer age) throws Exception {
        System.out.println("----name: " + name);
        System.out.println("----age: " + age);

        User user = new User();
        user.setName(name);
        user.setAge(age);
        return feignClient.getOwner(user);
    }
}
  • 启动、测试
  • 测试成功,则一个 feign简单Demo 就做好了!

效果

  • 浏览器
    在这里插入图片描述

  • 调用者的控制台
    在这里插入图片描述

  • Provider的控制台
    在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值