博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(四)基于Spring Cloud Fegin的跨服调用
阅读量:6294 次
发布时间:2019-06-22

本文共 3953 字,大约阅读时间需要 13 分钟。

hot3.png

基于去年写的SpringCloud系列 由于工作原因一直没有接着往下写

现在重新捡起来 介绍下SpringCloud的其他组件

上次说到Ribbon做的负载均衡 是用的Spring提供RestTemple来做的请求

去看RestTemple的请求源码 原理上还是用java.net.uri去请求跨服调用,而本篇着重介绍Spring cloud的Fegin组件,这个组件是Spring提供的封装好的跨服调用组建 可以使服务之间的调用更为便捷

我得业务场景是这样的

34457b8942118b9516dd7b0afd145b72bd0.jpg

一台SpringEureka 提供注册服务 两台一样的服务 分别启动在9001/9002端口

一台服务two需要调用One服务的某一个方法

以下是POM文件

4.0.0
SpringRibbon
SpringRibbon
1.0-SNAPSHOT
org.springframework.boot
spring-boot-starter-parent
1.3.5.RELEASE
UTF-8
1.7
org.springframework.cloud
spring-cloud-starter-parent
Brixton.SR3
pom
import
org.springframework.cloud
spring-cloud-starter-eureka
org.springframework.cloud
spring-cloud-starter-feign
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-maven-plugin

然后再启动器类里 加入标签@EnableFeignClients 这个标签是用来申请启动Feign组件的

然后加入一层Controller层 如下:

package Controller;import org.springframework.cloud.netflix.feign.FeignClient;import org.springframework.cloud.netflix.ribbon.RibbonClient;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;@FeignClient("ONE-CLOUD-CLIENT")@RibbonClient(name = "ONE-CLOUD-CLIENT",configuration = RibbonConfiguration.class)public interface FeignController {    @RequestMapping(value = "/service-instances/{clientName}",method = RequestMethod.GET)    public String method(@PathVariable("clientName") String clientName);//请求附带一个叫clientName的参数    @RequestMapping(value = "/method",method = RequestMethod.GET)    public String requestMethod();}

如上 我们创建一个接口 在这个接口文件里面用FeignClient来申明本接口 请求的是哪个服务,用在Eureka注册的服务名字来区分

并且通过RibbonClient标签来配置负载策略 (此处采用的是轮询)详细配置见上一章

在这个接口的方法上 通过RequestMapping来配置这个接口请求的One服务的路径 ,如:One服务里面有一个/method的路径,我们通过RequestMapping配置请求路径和请求方法 那么在这个Controller调用的时候就会通过你配置的路径去请求指定服务里面的方法。并且采用Ribbon的负载策略

调用如下

@RestControllerpublic class requestController {    @Bean    @LoadBalanced    RestTemplate restTemplate(){        return new RestTemplate();    }    @Autowired    private RestTemplate restTemplete;    @Autowired    private FeignController feignController;    @RequestMapping("/getinfo")    public String getinfo() {        StringBuffer sb=new StringBuffer();        for (int i = 0; i < 1000; i++) {            sb.append("["+(i+1)+"]"+":"+restTemplete.getForEntity("http://ONE-CLOUD-CLIENT/method", String.class).getBody()+"/n");        }        return sb.toString();    }    @RequestMapping("/getmethod")    public String getMethod(){        return feignController.method("ONE-CLOUD-CLIENT");    }    @RequestMapping("/gettestmethod")    public String testmethod(){        StringBuffer sb=new StringBuffer();        for (int i=0;i<100;i++){            sb.append(feignController.requestMethod());        }        return sb.toString();    }}

可以看到利用Spring的IOC获取到刚才配置的feignController 对象 然后调用即可

转载于:https://my.oschina.net/u/2970507/blog/1828810

你可能感兴趣的文章
GIT 常用配置
查看>>
JS监听回车键
查看>>
Android 4.0中振动控制
查看>>
go gdb调试 参数设置 减小执行文件体积
查看>>
IE6、 IE7、IE8、Firefox兼容性问题
查看>>
该如何继续走下去。。
查看>>
Yii框架官方指南系列43——专题:URL(创建、路由、美化及自定义)
查看>>
Jenkins Android gradle只能打包app-release-unsigned.apk
查看>>
ibase4j nginx配置
查看>>
数据库设计规范之对象设计使用规范
查看>>
WIN7上VM中的LINUX如何设置上网
查看>>
git 提交失败 HTTP 413 curl 22 The requested URL returned error: 413 Request Entity Too Large
查看>>
jQuery-EasyUI异步加载树形菜单
查看>>
鸟哥的Linux私房菜基础学习篇(第二版)第十二章课后习题与答案
查看>>
John the Ripper password cracker
查看>>
centos redis 自动重启脚本
查看>>
Docker Toolbox Looks like something went wrong
查看>>
接口隔离原则最直白描述
查看>>
双系统删除分区后Grub启动失败
查看>>
Spring整合Struts的几种最常见方式
查看>>