Spring Cloud Feign

Spring Cloud Feign是一套基于Netflix Feign实现的声明式服务调用客户端。它使得编写Web服务客户端变得更加简单。我们只需要通过创建接口并用注解来配置它既可完成对Web服务接口的绑定。它具备可插拔的注解支持,包括Feign注解、JAX-RS注解。它也支持可插拔的编码器和解码器。Spring Cloud Feign还扩展了对Spring MVC注解的支持,同时还整合了Ribbon来提供均衡负载的HTTP客户端实现。

添加依赖

修改 spring-cloud-consul-consumer 的 pom 文件,添加 feign 依赖。

pom.xml

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

修改启动器

修改启动器类,添加 @EnableFeignClients 注解开启扫描Spring Cloud Feign客户端的功能:

ConsuleConsumerApplication.java

package com.louis.spring.cloud.consul.consumer;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;@EnableFeignClients
@SpringBootApplication
public class ConsuleConsumerApplication {public static void main(String[] args) {SpringApplication.run(ConsuleConsumerApplication.class, args);}@Bean@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}
}

添加Feign接口

添加 FeignHelloService 接口, 在类头添加注解 @FeignClient("service-producer") ,service-producer是要调用的服务名。

添加跟调用目标方法一样的方法声明,只需要方法声明,不需要具体实现,注意跟目标方法定义保持一致。

FeignHelloService.java

package com.louis.spring.cloud.consul.consumer.service;import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;@FeignClient("service-producer")
public interface FeignHelloService {@RequestMapping("/hello")public String hello();
}

添加控制器

添加 FeignHelloController 控制器,注入 FeignHelloService,就可以像使用本地方法一样进行调用了。

FeignHelloController.java

package com.louis.spring.cloud.consul.consumer.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import com.louis.spring.cloud.consul.consumer.service.FeignHelloService;@RestController
public class FeignHelloController {@Autowiredprivate FeignHelloService feignHelloService;@RequestMapping("/feign/call")public String call() {// 像调用本地服务一样return feignHelloService.hello();}
}

测试效果

启动成功之后,访问 http://localhost:8521/feign/call,发现调用成功,且 hello consul 和  hello consul two 结果随机出现。

这是因为 Feign 是基于 Ribbon 实现负载均衡的,而我们在上一节中配置了 Ribbon 的负载策略为随机策略。

转载于:https://www.cnblogs.com/7788IT/p/10667071.html

服务消费和负载(Feign)相关推荐

  1. SpringCloud系列之服务消费Ribbon和Feign区别

    在业界,一般有两种微服务的实践方法:基于dubbo的微服务架构.基于Spring Cloud的微服务架构.从概念上来讲,Dubbo和Spring Cloud并不能放在一起对比,因为Dubbo仅仅是一个 ...

  2. Spring Boot + Spring Cloud 构建微服务系统(三):服务消费和负载(Feign)

    Spring Cloud Feign Spring Cloud Feign是一套基于Netflix Feign实现的声明式服务调用客户端.它使得编写Web服务客户端变得更加简单.我们只需要通过创建接口 ...

  3. Spring Cloud Alibaba基础教程:几种服务消费方式(RestTemplate、WebClient、Feign)

    热门:Spring Cloud Greenwich.RELEASE 正式发布!一个非常有看头的版本! 通过<Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现&g ...

  4. Spring Cloud Alibaba基础教程:支持的几种服务消费方式(RestTemplate、WebClient、Feign)

    通过<Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现>一文的学习,我们已经学会如何使用Nacos来实现服务的注册与发现,同时也介绍如何通过LoadBal ...

  5. SpringCloud微服务:Ribbon和Feign组件,实现服务调用的负载均衡

    一.Ribbon简介 1.基本概念 Ribbon是一个客户端的负载均衡(Load Balancer,简称LB)器,它提供对大量的HTTP和TCP客户端的访问控制. 2.负载均衡简介 目前主流的负载均衡 ...

  6. SpringCloud系列研究---Eureka服务消费Feign

    转载自:https://www.cnblogs.com/chxuyuan/p/8358998.html SpringCloud系列研究---Eureka服务消费Feign 一.Feign简介 Feig ...

  7. Springcloud、Nacos 服务注册、负载均衡Ribbon、http客户端Feign

    SpringCloud是基于SpringBoot的一整套实现微服务的框架.它提供了微服务开发所需的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全局锁.决策竞选.分布式会话和集群状态管理等组 ...

  8. SpringCloud Feign 源码底层如何调用Ribbon实现服务调用的负载均衡

    在SpringCloud微服务中调用都不是直接用Ribbon进行服务调用,因为那样的化项目中的代码量会增加很多,微服务之间的调用是用Feign来进行调用,下面就是普通的一个接口调用例子 这样就可以进行 ...

  9. Nacos注册中心和服务消费方式

    哈喽朋友们本次小無分享Nacos注册中心和服务消费方式 前言:本期文章操作性不多,多在于详细的理论说明 还各位看官耐心看完 一,服务治理介绍 目录 一,服务治理介绍 二,nacos简介 nacos实战 ...

最新文章

  1. hihoCoder#1196 : 高斯消元·二(开关灯问题)
  2. '$.browser.msie' 为空或不是对象
  3. 【Linux服务器初上手】MobaXterm/系统版本/hostname/hosts/yum源配置/jdk/docker(不断完善)
  4. Vue_eslint编码规范检查---vue工作笔记0021
  5. java 类变量 赋值_Java 中类变量,实例变量,局部变量的赋值
  6. .bin文件打开编辑
  7. win7 64位 安装Infragistics NetAdvantage,报Error 1606 Could Not Access Network Location %SystemDrive%/ine
  8. 独家专访VB100:趋势科技退出缘于新病毒检测失败
  9. 黑月MySQL_易语言黑月编译器插件
  10. 在VMware下新建虚拟机Win10系统
  11. Referrer还是Referer? 一个迷人的错误
  12. sudo -s sudo su
  13. 使用Mysql Navcat导出查询数据excel时出现数据丢失
  14. 【无标题】https://e-cloudstore.com/ec/api/applist/index.html#/
  15. 当年轻人开始拼命戒抖音
  16. 弹窗广告避无可避,背后黑手如此投放!
  17. jeff-yan的挖井记
  18. Web前端开发常见面试题总结
  19. ID|IC|CPU卡|国密卡|二代证|防复制门禁一体机门禁读卡器带触摸键盘(不带二维码)选型必备
  20. QLineEdit用正则限制文本框的输入内容+正则表达式语法

热门文章

  1. 应物联网要求而生 美国团队研发出零功耗红外探测器
  2. Facebook 为安卓用户推出精简版 Messenger Lite,率先面向发展中国家
  3. 十四、w、vmstat、top、sar命令
  4. 触发器使用教程和命名规范
  5. angular之性能优化
  6. 图片加载库Glide
  7. Perl语言入门-第四章-子程序-习题
  8. Web前端笔记(5)
  9. No module named 'django.core.urlresolvers
  10. Ansible(六)对目标主机进行磁盘分区,创建逻辑卷、格式化并挂载