springcloud学习之Open Feign (声明式的伪RPC远程调用)

1. Open Feign 是什么?

Feign,假装、伪装。OpenFeign可以使消费者将提供者提供的服务名伪装为接口进行消费,消费者只需使用“Service接口 + 注解”的方式即可直接调用Service接口方法,而无需再使用RestTemplate了

2. Ribbon与OpenFeign

Ribbon是Netflix公司的一个开源的负载均衡项目,是一个客户端负载均衡器,运行在消费者端。
OpenFeign也是运行在消费者端的,使用Ribbon进行负载均衡,所以OpenFeign直接内置了Ribbon。即在导入OpenFeign依赖后,无需再专门导入Ribbon依赖了

3.Open Feign 的简单使用

引入jar包,这里需要注意的一点是:OpenFeign内置了Ribbon,所以不需要引入Ribbon的jar包
pom.xml

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
    <version>2.2.3.RELEASE</version>
</dependency>

新建一个接口类

package com.xhc.example.userservice;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;

/**
 * @author xuehuichen
 * @version V1.0
 * @Package com.xhc.example.userservice
 * @date 2021/3/20 下午5:24
 */
@FeignClient("order-service")
public interface OrderServiceFeignClient {

	// 这里声明的是服务提供方的接口,类似于dubbo一样的使用方法
    @GetMapping("/orders")
    public String getAllOrder();

}

PS:其实正常情况下都是把这个接口统一的定义为一个单独的模块

在主方法中添加开启OpenFeign的注解

@EnableFeignClients
@SpringBootApplication
public class UserServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(UserServiceApplication.class, args);
    }

}

新建一个Controller

@RestController
public class OpenFeignController {
    @Autowired
    OrderServiceFeignClient orderServiceFeignClient;

    @GetMapping("/test")
    public String test(){
        return orderServiceFeignClient.getAllOrder();
    }
}

服务消费者的代码完毕,接下来是服务提供者代码(另外新建一个微服务项目)

@RestController
public class OrderService {

    @Value("${server.port}")
    private int port;

    @GetMapping("/orders")
    public String getAllOrder(){
        System.out.println("port"+port);
        return "Return all order";
    }
}

application.properties

# 应用名称
spring.application.name=order-service
# 应用服务 WEB 访问端口
server.port=8080

至此,一个使用Open Feign的简单例子就已经写完!这个简单的例子已经实现了Feign远程调用和Ribbon客户端负载均衡,是不是很简单?

4. Open Feign 的原理

4.1 思考Feign要做的事情

  • 参数的解析和装载
  • 针对指定的feignClient,生成动态代理
  • 针对FeignClient中的方法描述进行解析
  • 组装出一个Request对象,发起请求
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值