springcloud使用使用Feign-Ribbon做负载均衡实现声明式REST调用
什么是Feign
Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。使用Feign,只需要创建一个接口并注解。它具有可插拔的注解特性,可使用Feign 注解和JAX-RS注解。Feign支持可插拔的编码器和解码器。Feign默认集成了Ribbon,并和Eureka结合,默认实现了负载均衡的效果。注意:负载均衡是加在客户端中,而不是服务端中。
简而言之:
Feign 采用的是基于接口的注解
Feign 整合了ribbon
代码实现及演示效果
注册中心(略)
1、在客户端添加依赖包
|
1
2
3
4
|
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId></dependency> |
2、在客户端启动类中使用@EnableFeignClients开启feiginClient功能
|
1
2
3
4
5
6
7
8
|
@EnableEurekaClient@EnableFeignClients@SpringBootApplicationpublic class ServiceAApplication { public static void main(String[] args) { SpringApplication.run(ServiceAApplication.class, args); }} |
3、在客户端中新建一个ServiceAFeignClient接口调用service-b的服务
|
1
2
3
4
5
6
7
8
9
10
11
|
package com.example.servicea;import org.springframework.cloud.netflix.feign.FeignClient;import org.springframework.stereotype.Component;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;@Component@FeignClient(value = "service-b") //这里的name对应调用服务的spring.applicatoin.namepublic interface ServiceAFeignClient { @RequestMapping(value = "/hi") String hi(@RequestParam("id") String id);} |
4、在客户端系统中写一个测试controller
|
1
2
3
4
5
6
7
8
9
10
|
@RestControllerpublic class TestController { @Autowired ServiceAFeignClient serviceAFeignClient; @RequestMapping("/hi") public String hi(@RequestParam String id){ return serviceAFeignClient.hi(id); }} |
5、在服务端系统中提供一个hi()方法,供客户端调用
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
@EnableEurekaClient@RestController@SpringBootApplicationpublic class ServiceBApplication { public static void main(String[] args) { SpringApplication.run(ServiceBApplication.class, args); } @Value("${spring.application.name}") private String name; @Value("${server.port}") private String port; @RequestMapping("/hi") public String hi(@RequestParam String id){ return "hi, " + id + ", " + name + ":" + port; }} |
6、新建一个服务service-b-2,代码和service-b完全一致,只需改端口号(服务名也叫service-b,spring.application.name=service-b)
在eclipse中可以不新建工程,当启动了service-b后,改service-b的端口号,再启动一次,这样就启动了两个service-b服务,区别是端口号不同。
启动后会在Eureka注册中心中看到service-b有两个,一个端口号为8081,一个为8082:
DS Replicas
Instances currently registered with Eureka
| Application | AMIs | Availability Zones | Status |
|---|---|---|---|
| SERVICE-A | n/a (1) | (1) | UP (1) - SZVY2AWX5511361.china.huawei.com:service-a:8083 |
| SERVICE-B | n/a (2) | (2) |
7、查看效果
访问:http://localhost:8083/hi?id=123
返回:hi, 123, service-b:8082
刷新:hi, 123, service-b:8081
刷新:hi, 123, service-b:8082
刷新:hi, 123, service-b:8081
因为Ribbon负债均衡默认使用的是轮询机制。
springcloud使用使用Feign-Ribbon做负载均衡实现声明式REST调用的更多相关文章
- Spring Cloud Eureka 分布式开发之服务注册中心、负载均衡、声明式服务调用实现
介绍 本示例主要介绍 Spring Cloud 系列中的 Eureka,使你能快速上手负载均衡.声明式服务.服务注册中心等 Eureka Server Eureka 是 Netflix 的子模块,它是 ...
- springcloud(十二):Ribbon客户端负载均衡介绍
springcloud(十二):Ribbon客户端负载均衡介绍 Ribbon简介 使用分布式微服务脚骨的应用系统,在部署的时候通常会为部分或者全部微服务搭建集群环境,通过提供多个实例来提高系统的稳定型 ...
- ③SpringCloud 实战:使用 Ribbon 客户端负载均衡
这是SpringCloud实战系列中第三篇文章,了解前面第两篇文章更有助于更好理解本文内容: ①SpringCloud 实战:引入Eureka组件,完善服务治理 ②SpringCloud 实战:引入F ...
- SpringCloud之声明式服务调用 Feign(三)
一 Feign简介 Feign是一种声明式.模板化的HTTP客户端,也是netflix公司组件.使用feign可以在远程调用另外服务的API,如果调用本地API一样.我们知道,阿里巴巴的doubbo采 ...
- SpringCloud 源码系列(6)—— 声明式服务调用 Feign
SpringCloud 源码系列(1)-- 注册中心 Eureka(上) SpringCloud 源码系列(2)-- 注册中心 Eureka(中) SpringCloud 源码系列(3)-- 注册中心 ...
- springcloud 之Ribbon客户端负载均衡配置使用
pom.xml添加配置说明:这里服务注册与发现用的是Eureka,所以消费者端需要引入eureka,使用EurekaClient来调用服务 <dependency> <groupId ...
- 【一起学源码-微服务】Feign 源码三:Feign结合Ribbon实现负载均衡的原理分析
前言 前情回顾 上一讲我们已经知道了Feign的工作原理其实是在项目启动的时候,通过JDK动态代理为每个FeignClinent生成一个动态代理. 动态代理的数据结构是:ReflectiveFeign ...
- SpringCloud微服务实战——搭建企业级开发框架(十二):OpenFeign+Ribbon实现负载均衡
Ribbon是Netflix下的负载均衡项目,它主要实现中间层应用程序的负载均衡.为Ribbon配置服务提供者地址列表后,Ribbon就会基于某种负载均衡算法,自动帮助服务调用者去请求.Ribbo ...
- 使用ribbon实现负载均衡
使用ribbon之前的准备工作: 1.你要有两个服务,一个是服务消费方(下图的xing-movie是消费方),一个是服务提供方(xing-user是服务提供者),并且服务提供方要有两个实例,也就是xi ...
随机推荐
- Mac安装Appium的Android环境
1.下载android sdk http://down.tech.sina.com.cn/page/45703.html 2.解压,配置环境变量 ANDROID_HOME=/Users/wp/ ...
- [转帖]SAP MES生产执行系统解决方案
一.SAP MES概述: SAP公司成立于1972年,总部位于德国,是全球最大的企业管理和协同化商务解决方案供应商.全球第三大独立软件供应商.目前,在全球有120多个国家的超过86,000多家用户正在 ...
- golang yaml配置文件解析
yaml文件语法 此模块内容转自:http://www.ruanyifeng.com/blog/2016/07/yaml.html 大小写敏感 使用缩进表示层级关系 缩进时不允许使用Tab键,只允许使 ...
- Java对中文进行排序
对中文进行排序,同样是得定义一个Comparator,下面上代码: import java.text.Collator; import java.util.ArrayList; import java ...
- NOI前各种Idea总结以及各种文本乱堆
转载请注明原文地址:https://www.cnblogs.com/LadyLex/p/9227267.html 不过这篇的确没什么*用了转转吧 2018-6-24 关于一类延迟标记(来自UR14 思 ...
- 【BZOJ1078】[SCOI2008]斜堆(性质题)
[BZOJ1078][SCOI2008]斜堆(性质题) 题面 BZOJ 洛谷 题解 考虑一下这道题目的性质吧.思考一下最后插入进来的数是什么样子的.首先因为它是最后插入进来的,所以一定是比某个数小,然 ...
- 解题:POI2008 Building blocks
题面 显然我们需要考虑每一个区间,而这个问题显然我们都会做,这不就是这道题么,也就是说假如中位数是$mid$,区间和是$sum$,那么代价就是$\sum\limits_{i=l}^r |mid-num ...
- 【codevs2205】等差数列
题目大意:给定一个长度为 N 的序列,求这个序列中等差数列的个数. 题解:根据题意应该是一道序列计数 dp.设 \(dp[i][j]\) 表示以第 i 项结尾,公差为 j 的等差数列的个数,则状态转移 ...
- Nginx反向代理下IIS获取真实IP
1. iis 如果放在反向代理后面,日志里的c-ip是反向代理服务器的ip,不是真正用户的ip,想要记录用户的ip要做两件事. 一.在反向代理设置X-Forwarded-For段,以下为nginx下的 ...
- openstack项目【day23】:openstack组件介绍
本节内容 openstack介绍 openstack项目(服务名是项目名的别名) openstack运行流程 openstack各组件详解 一:openstack介绍 open ...