SpringCloud Feign声明式服务调用
SpringCloud Feign声明式服务调用
- 1. 加入pom依赖
- 2. Application.java上声明@EnableFeignClients
- 3. @FeignClient声明接口调用服务名,(SpirngMVC绑定方法,可有可无)
- 4. Feign负载均衡是通过ribbon实现的
- 5. 常见问题与解决
- 6. 小技巧,可调试用
- 参考
1. 加入pom依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
2. Application.java上声明@EnableFeignClients
表示允许声明式feign调用
@EnableEurekaClient
@SpringBootApplication
@EnableFeignClients(basePackages = { "com.service.client.feign.inter" })
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}
3. @FeignClient声明接口调用服务名,(SpirngMVC绑定方法,可有可无)
接口@FeignClient注解指定服务名来绑定服务,然后再使用Spring MVC的注解来绑定具体该服务提供的REST接口。
@FeignClient("hello-service-provider")
public interface HelloServiceFeign {@RequestMapping(value = "/demo/getHost", method = RequestMethod.GET)public String getHost(String name);@RequestMapping(value = "/demo/postPerson", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")public Person postPerson(String name);
注意,(SpirngMVC绑定方法,可有可无),若写则@RequestMapping需要写全面,假如XXInterface中Controller层也有 @RestController, @RequestMapping("/hello")
则应该为:
@FeignClient("hello-service-provider")
public interface HelloServiceFeign {@RequestMapping(value = "/hello/demo/getHost", method = RequestMethod.GET)public String getHost(String name);@RequestMapping(value = "/hello/demo/postPerson", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")public Person postPerson(String name);
}
4. Feign负载均衡是通过ribbon实现的
Spring Cloud Feign的客户端负载均衡是通过Spring Cloud Ribbon实现的,可以直接配置Ribbon客户端的方式来自定义各个服务客户端调用参数。
Spring Cloud Ribbon默认负载均衡策略是轮询策略,不过该不一定满足我们的需要。Ribbon一共提供了7种负载均衡策略,如果我们需要ZoneAvoidanceRule,首先要在application.properties文件中添加配置,如下所示:
ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.ZoneAvoidanceRule
不过,只是添加了如上配置,还无法实现负载均衡策略的更改。还需要实例化该策略,可以在应用主类中直接加入IRule实例的创建,如下:
/*** 服务调用者,,eureka客户端 feign调用** @version* @since 1.8*/
@EnableEurekaClient
@SpringBootApplication
@EnableFeignClients(basePackages = { "com.client.feign.inter" })
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}@Beanpublic IRule feignRule() {return new ZoneAvoidanceRule();}
}
5. 常见问题与解决
- 遇到404,检查@GetMapping中url
- 超时,application.yml配置ribbon
- 还报超时,访问不到,有可能跨域问题
在controller层增加 @CrossOrigin;
- 没报错,就是返回结果不是期望的值,有可能程序中间有异常报错
日志如上,被调用的服务日志打印完全一致,结果不是想要的,最后发现是程序后续处理过程有bug…;
6. 小技巧,可调试用
在url处配置服务的ip与端口,调试程序问题;
@FeignClient(name="hello-service-provider",url="http://xxx.xxx.xxx.xxx/")
public interface HelloServiceFeign {@RequestMapping(value = "/hello/demo/getHost", method = RequestMethod.GET)public String getHost(String name);@RequestMapping(value = "/hello/demo/postPerson", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")public Person postPerson(String name);
}
参考
- https://www.jianshu.com/p/59295c91dde7
SpringCloud Feign声明式服务调用相关推荐
- SpringCloud之声明式服务调用 Feign(三)
一 Feign简介 Feign是一种声明式.模板化的HTTP客户端,也是netflix公司组件.使用feign可以在远程调用另外服务的API,如果调用本地API一样. 我们知道,阿里巴巴的doubbo ...
- SpringCloud实战5-Feign声明式服务调用
SpringCloud实战5-Feign声明式服务调用 在前面的文章中可以发现当我们通过RestTemplate调用其它服务的API时,所需要的参数须在请求的URL中进行拼接,如果参数少的话或许我们还 ...
- 两个子集pom互相调用_声明式服务调用组件Feign
什么是Feign? Feign是SpringCloud组件中的一个轻量级RESTful的HTTP服务客户端.Feign内置了Ribbon,用来做客户端负载均衡,去调用服务注册中心的服务. 什么是 ...
- springcloud(七)-Feign声明式REST调用
前言 前面我们使用的RestTemplate实现REST API调用,代码大致如下: public User findById(@PathVariable Long id) {return restT ...
- Spring Cloud Feign 1(声明式服务调用Feign 简介)
Spring Cloud Feign基于Netflix Feign 同时整合了Spring Cloud Ribbon和Spring Cloud Hytrix,除了提供两者的强大功能外,它还提供了一种声 ...
- Spring Cloud微服务之Feign——声明式服务间调用
目录 写在前面 服务间调用常见的方案 方案一:HttpClient 方案二:RestTemplate 方案三:Feign 框架版本问题及可能遇到的坑 搭建服务注册中心 搭建服务1--service-a ...
- 04.声明式服务调用:Spring Cloud Feign(Greenwich.SR2)
1.Feign是什么 Feign是整合了Ribbon与Hystrix外,还提供了声明式的Web服务客户端定义方式.采用了声明式API接口的风格,将Java Http客户端绑定到它的内部.Feign的首 ...
- feign和ajax,SpringCloud-feign 声明式服务调用
以前学习java,一般就一个后端,都要学习如何在容器中运行,如tomcat,weblogic,现在微服务颠覆了这一切,一个系统要被拆分成多个服务,服务与服务间需要通信,让我想到了前端的ajax,jav ...
- 声明式服务调用feign原理图解
https://www.cnblogs.com/crazymakercircle/p/11965726.html
最新文章
- nfc reader 卡密_红外NFC+50倍变焦,一款被严重低估的王牌?
- Unity3D中使用KiiCloud总结一
- python霍夫变换检测直线_OpenCV-Python教程(9、使用霍夫变换检测直线)
- 排序算法:归并排序、快速排序
- 磁力链接的BASE32编码向HEX编码的转换
- JNA—JNI终结者
- 1、ClassLoader.getResourceAsStream() 与Class.getResourceAsStream()的区别
- mysql挂载数据卷_docker卷挂载技术
- FX-3U PLC串口与PC通信调试
- httpget请求设置长度_Citrix ADCHTTP请求Smuggling详解
- BPF 之巅:洞悉 Linux 系统和应用性能
- chrome浏览器debug vue项目,跳过vue源码
- 一些名人语录(不断添加中...)
- 新浪与腾讯的开放平台对比
- python国内大学哪个教学厉害-国内的本科 CS 教学和国外相比有什么优劣?
- 台式计算机如何上网设置,台式电脑怎样设置宽带自动连接?
- 阿里、百度、华为都用什么编程语言?做程序员前,这些别说不知道!
- 使用 KubeSphere 和极狐GitLab 打造云原生持续交付系统
- 「论文翻译」Graph convolutional networks for computational drug development and discovery
- 【Matlab】Matlab作图的一些小知识
热门文章
- [JavaScript]走进 JAVASCRIPT 黑洞
- Windows 安装adb
- android 在设备上安装apk包
- Java面试题之Oracle 支持哪三种事务隔离级别
- python __builtins__ set类 (60)
- HTTP协议详解(真的很经典)
- 如何让图片开口说话 3DMeNow教程
- request 对象和 response 对象
- 3.27课·········悬浮动态分层导航与隐藏导航
- zoj 1010 (线段相交判断+多边形求面积)