服务调用OpenFeign

在使用 Ribbon + RestTemplate 时,利用 RestTemplate 对 HTTP 请求的封装处理,形成了一套模板化的调用方法。缺点:在每次进行服务调用时,都需要通过@Resource/@Autowired的方式,来声明一个 RestTemplate。

Feign是一个声明式web服务客户端(消费者),让编写web服务客户端变得非常容易,只需要创建一个接口并在接口上添加注解即可。

FeignSpring Cloud组件中一个轻量级RESTful的http服务客户端,feign内置Ribbon用来做客户端负载均衡,去调用服务注册中心的服务Feign的使用方式是:使用Feign的注解定义接口,调用这个接口,就可以调用服务注册中心的服务

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-feign</artifactId>

</dependency>

OpenFeignspringCloud在feign的基础上支持了spring MVC的注解,如@RequesMapping等等,OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理的方式产生实现了。实现类中做负载均衡并调用其他服务

1.消费者添加坐标

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-openfeign</artifactId>

</dependency>

2.消费者的启动类必须加上@EnableFeignClients来开启OpenFeign

@Component
3.@FeignClient(value = "CLOUD-PAYMENT-SERVICE")  //注解+生产者的入住注册中心名
public interface PaymentFeignService {
    @GetMapping(value = "/test/paymentId/{id}")  //这是访问生产者controller的接口url
    public PaymentEntity  paymentId(@PathVariable("id") Long id);  //参数
}

测试结果可以用

OpenFeign默认等待1秒钟,超过报错,所以需要开启OpenFeign客户端超时控制,在yml文件配置

负载均衡配置:

CLOUD-PAYMENT-SERVICE:  //生产者名  注册中心
  ribbon :     
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule  //随机

总结:

  1. 消费者引入坐标
  2. 消费者创建controller,调用服务层,
  3. 服务层是接口,类上加入生产者的入驻注册中心的名,例如@FeignClient(value = "CLOUD-PAYMENT-SERVICE")+@Component
  4. 服务层方法上消费者的访问url     例如@GetMapping(value = "/test/paymentId/{id}")  //这是访问生产者controller的接口url
  5. 参数为消费者需要什么参传入什么参数

消费者服务层案例:

@Component
@FeignClient(value = "CLOUD-PAYMENT-SERVICE")
public interface CumsService {
    @GetMapping(value = "/user/success")
    Result findUser(@RequestBody UserBean userBean);
}

6.生产者只需将服务名注入注册中心

服务调用OpenFeign

上一篇:如何让程序启动时以管理员身份运行


下一篇:nginx负载均衡部署