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声明式服务调用相关推荐

  1. SpringCloud之声明式服务调用 Feign(三)

    一 Feign简介 Feign是一种声明式.模板化的HTTP客户端,也是netflix公司组件.使用feign可以在远程调用另外服务的API,如果调用本地API一样. 我们知道,阿里巴巴的doubbo ...

  2. SpringCloud实战5-Feign声明式服务调用

    SpringCloud实战5-Feign声明式服务调用 在前面的文章中可以发现当我们通过RestTemplate调用其它服务的API时,所需要的参数须在请求的URL中进行拼接,如果参数少的话或许我们还 ...

  3. 两个子集pom互相调用_声明式服务调用组件Feign

    什么是Feign?    Feign是SpringCloud组件中的一个轻量级RESTful的HTTP服务客户端.Feign内置了Ribbon,用来做客户端负载均衡,去调用服务注册中心的服务. 什么是 ...

  4. springcloud(七)-Feign声明式REST调用

    前言 前面我们使用的RestTemplate实现REST API调用,代码大致如下: public User findById(@PathVariable Long id) {return restT ...

  5. Spring Cloud Feign 1(声明式服务调用Feign 简介)

    Spring Cloud Feign基于Netflix Feign 同时整合了Spring Cloud Ribbon和Spring Cloud Hytrix,除了提供两者的强大功能外,它还提供了一种声 ...

  6. Spring Cloud微服务之Feign——声明式服务间调用

    目录 写在前面 服务间调用常见的方案 方案一:HttpClient 方案二:RestTemplate 方案三:Feign 框架版本问题及可能遇到的坑 搭建服务注册中心 搭建服务1--service-a ...

  7. 04.声明式服务调用:Spring Cloud Feign(Greenwich.SR2)

    1.Feign是什么 Feign是整合了Ribbon与Hystrix外,还提供了声明式的Web服务客户端定义方式.采用了声明式API接口的风格,将Java Http客户端绑定到它的内部.Feign的首 ...

  8. feign和ajax,SpringCloud-feign 声明式服务调用

    以前学习java,一般就一个后端,都要学习如何在容器中运行,如tomcat,weblogic,现在微服务颠覆了这一切,一个系统要被拆分成多个服务,服务与服务间需要通信,让我想到了前端的ajax,jav ...

  9. 声明式服务调用feign原理图解

    https://www.cnblogs.com/crazymakercircle/p/11965726.html

最新文章

  1. nfc reader 卡密_红外NFC+50倍变焦,一款被严重低估的王牌?
  2. Unity3D中使用KiiCloud总结一
  3. python霍夫变换检测直线_OpenCV-Python教程(9、使用霍夫变换检测直线)
  4. 排序算法:归并排序、快速排序
  5. 磁力链接的BASE32编码向HEX编码的转换
  6. JNA—JNI终结者
  7. 1、ClassLoader.getResourceAsStream() 与Class.getResourceAsStream()的区别
  8. mysql挂载数据卷_docker卷挂载技术
  9. FX-3U PLC串口与PC通信调试
  10. httpget请求设置长度_Citrix ADCHTTP请求Smuggling详解
  11. BPF 之巅:洞悉 Linux 系统和应用性能
  12. chrome浏览器debug vue项目,跳过vue源码
  13. 一些名人语录(不断添加中...)
  14. 新浪与腾讯的开放平台对比
  15. python国内大学哪个教学厉害-国内的本科 CS 教学和国外相比有什么优劣?
  16. 台式计算机如何上网设置,台式电脑怎样设置宽带自动连接?
  17. 阿里、百度、华为都用什么编程语言?做程序员前,这些别说不知道!
  18. 使用 KubeSphere 和极狐GitLab 打造云原生持续交付系统
  19. 「论文翻译」Graph convolutional networks for computational drug development and discovery
  20. 【Matlab】Matlab作图的一些小知识

热门文章

  1. [JavaScript]走进 JAVASCRIPT 黑洞
  2. Windows 安装adb
  3. android 在设备上安装apk包
  4. Java面试题之Oracle 支持哪三种事务隔离级别
  5. python __builtins__ set类 (60)
  6. HTTP协议详解(真的很经典)
  7. 如何让图片开口说话 3DMeNow教程
  8. request 对象和 response 对象
  9. 3.27课·········悬浮动态分层导航与隐藏导航
  10. zoj 1010 (线段相交判断+多边形求面积)