spring cloud ribbon的使用
上节我们学会了如何搭建一个eureka server服务,本节我们使用ribbon来实现服务间的调用。
前置条件:
1、创建几个工程
eureka-server
|- 服务注册中心
product-provider-8777
product-provider-8778
product-provider-8779
product-provider-8780
|- 服务提供者,提供商品查询服务,请求url为: http://host:port/product/selectOne/{productId},返回服务的端口、服务名和商品信息
|- 上面四个product-provider-%d的工程代码都是一样的
|- 8777 和 8778 一组,spring.application.name = product-provider-01
|- 8779 和 8780 一组,spring.application.name = product-provider-02
order-consumer
|- 服务消费者,调用product-provider-%d服务,来完成商品信息的获取
|- 访问url : http://host:port/orders/create/{providerId}/{productId}
** providerId 用来替换上面%d的值
** productId 商品编号,可以使用p0001、p0002、p0003
需求:
|- 在consumer工程中使用ribbon来完成provider工程的调用
|- 调用 product-provider-01 时修改默认的负载均衡策略(轮询)采用自定义的随机策略
|- ribbon客户端立即初始化,服务端配置
ribbon:
eager-load:
enabled: true
clients: product-provider-8780 # 需要立即初始化的服务名
实现步骤:
1、eureka-server和product-provider功能没有什么特殊的地方,需要将8777和8778工程的spring.application.name的值改成product-provider-01另外2个修改成product-provider-02
2、consumer工程
|- 配置RestTemplate,需要加上@LoadBalanced注解,使之具有客户端负载均衡的能力(ribbon)
|- 由于product-provider-01的负载均衡策略需要改变,因此需要配置RibbonClient
** 注意: 在RibbonClient中指定的配置文件不可在spring boot的主上下文中被扫描到,否则会是一个全局的配置,对所有的RibbonClient都会生效,如果需要对单独的RibbonClient
生效,则需要定义一个配置文件 RibbonProductProvider01Conf 这个可以在spring boot的主上下文中,里面的RibbonClient指定的配置文件 RibbonProductProvider01Configuration
必须要在spring boot的主上下文之外。
代码结构:
实现:
一、注册中心和服务提供者
这部分的代码都是普通的代码,没有什么需要注意的
二、服务消费者
1、定义RestTemplate
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
注意: @LoadBalanced注解 加上即可
2、修改product-provider-01的负载均衡策略
2.1、RibbonProductProvider01Configuration文件的编写
/**
* 注意: 此类不可被spring 的主上下文扫描到,否则就是全局配置,对所有的ribbon客户端都会起作用
* <p>
* 对 spring.application.name = product-provider-01 进行单独配置
* 修改对product-provider-01的负载均衡策略为随机访问,不在是默认的轮训访问
*
* @author huan.fu
* @date 2018/5/29 - 11:40
*/
@Configuration
public class RibbonProductProvider01Configuration {
/**
* 设置负载均衡策略为 随机,默认是轮训
*
* @return
*/
@Bean
public IRule ribbonRule() {
return new RandomRule();
}
}
可以进行配置的选项,以及默认值
IClientConfig DefaultClientConfigImpl
IRule ZoneAvoidanceRule
IPing DummyPing
ServerList<Server> ConfigurationBasedServerList
ServerListFilter<Server> ZonePreferenceServerListFilter
ILoadBalancer ZoneAwareLoadBalancer
ServerListUpdater PollingServerListUpdater
2.2、 RibbonProductProvider01Conf配置文件的编写
/**
* 对 spring.application.name = product-provider-01 进行单独配置
* 修改对product-provider-01的负载均衡策略为随机访问,不在是默认的轮训访问
*
* @author huan.fu
* @date 2018/5/29 - 11:40
*/
@RibbonClient(name = "product-provider-01", configuration = RibbonProductProvider01Configuration.class)
@Component
public class RibbonProductProvider01Conf {
}
注意:@RibbonClient中的name的是服务提供者的spring.application.name的值,configuration指向上面编写的配置文件
3、编写控制层进行调用
/**
* 订单控制器
*
* @author huan.fu
* @date 2018/5/28 - 16:52
*/
@RestController
@RequestMapping("orders")
public class OrdersController {
@Autowired
private RestTemplate restTemplate;
/**
* 创建订单
*
* @param productId
* @return
*/
@GetMapping("create/{providerId}/{productId}")
public Map<String, Object> createOrders(@PathVariable String providerId, @PathVariable String productId) {
return restTemplate.getForObject("http://product-provider-" + providerId + "/product/selectOne/" + productId, Map.class);
}
}
测试:
1、注册中心截图
2、运行结果
完整代码
https://gitee.com/huan1993/spring-cloud-parent/tree/master/ribbon
spring cloud ribbon的使用的更多相关文章
- 撸一撸Spring Cloud Ribbon的原理-负载均衡器
在上一篇<撸一撸Spring Cloud Ribbon的原理>中整理发现,RestTemplate内部调用负载均衡拦截器,拦截器内最终是调用了负载均衡器来选择服务实例. 接下来撸一撸负载均 ...
- 笔记:Spring Cloud Ribbon 客户端配置详解
自动化配置 由于 Ribbon 中定义的每一个接口都有多种不同的策略实现,同时这些接口之间又有一定的依赖关系,Spring Cloud Ribbon 中的自动化配置能够很方便的自动化构建接口的具体实现 ...
- 笔记:Spring Cloud Ribbon 客户端负载均衡
Spring Cloud Ribbon 是一个基于 HTTP 和 TCP 的客户端负载均衡工具,基于 Netflix Ribbon 实现,通过Spring Cloud 的封装,可以让我们轻松的将面向服 ...
- 为Spring Cloud Ribbon配置请求重试(Camden.SR2+)
当我们使用Spring Cloud Ribbon实现客户端负载均衡的时候,通常都会利用@LoadBalanced来让RestTemplate具备客户端负载功能,从而实现面向服务名的接口访问. 下面的例 ...
- Spring Cloud微服务笔记(四)客户端负载均衡:Spring Cloud Ribbon
客户端负载均衡:Spring Cloud Ribbon 一.负载均衡概念 负载均衡在系统架构中是一个非常重要,并且是不得不去实施的内容.因为负载均衡对系统的高可用性. 网络压力的缓解和处理能力的扩容的 ...
- 基于Spring cloud Ribbon和Eureka实现客户端负载均衡
前言 本案例将基于Spring cloud Ribbon和Eureka实现客户端负载均衡,其中Ribbon用于实现客户端负载均衡,Eureka主要是用于服务注册及发现: 传统的服务端负载均衡 常见的服 ...
- 撸一撸Spring Cloud Ribbon的原理-负载均衡策略
在前两篇<撸一撸Spring Cloud Ribbon的原理>,<撸一撸Spring Cloud Ribbon的原理-负载均衡器>中,整理了Ribbon如何通过负载均衡拦截器植 ...
- spring cloud Ribbon
参考:https://www.jianshu.com/p/1bd66db5dc46 Ribbon 是什么 spring cloud ribbon 是一个基于HTTP 和 TCP 的客户端负载均衡工具, ...
- 第四章 客户端负载均衡:Spring Cloud Ribbon
spring cloud ribbon 是一个基于 HTTP 和 TCP 的客户端负载均衡工具,它基于Netflix Ribbon 实现.通过Spring Cloud 的封装,可以轻松的将面向服务的R ...
- Spring Cloud Ribbon入门
一.简介 Spring Cloud Ribbon是一个基于Http和TCP的客户端负载均衡工具,它是基于Netflix Ribbon实现的.它不像服务注册中心.配置中心.API网关那样独立部署,但是它 ...
随机推荐
- openswan协商流程之(七):main_inR3
主模式第六包(收包):main_inR3 1. 序言 main_inR3()函数是ISAKMP协商过程中第一阶段的最后一个报文的接收处理函数,它的作用同main_inI3_outR3()部分功能相同: ...
- Identity角色管理三(创建角色)
首先创建视图模型 using System.ComponentModel; using System.ComponentModel.DataAnnotations; namespace Shop.Vi ...
- python库--pandas--Series
方法 返回数据类型 参数 说明 Series(一维) .Series() Series 实例s 创建一维数据类型Series data=None 要转化为Series的数据(也可用dict ...
- JAVA反序列化漏洞基础原理
JAVA反序列化漏洞基础原理 1.1 什么是序列化和反序列化? Java序列化是指把Java对象转换为字节序列的过程: Java反序列化是指把字节序列恢复为Java对象的过程: 1.2 为什么要序列化 ...
- C++快读讲解
C++快读讲解 inline int read(){ int x=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9'){ if(ch=='-') ...
- 解决使用tomcat服务器发布web项目时出现URL中文乱码的问题
打开Tomcat的安装路径 打开server.xml文件 在修改端口号的一行既是下图中位置添加 URIEncoding="UTF-8" 就能替换在用eclipse或者myeclip ...
- Linux从头学13:想彻底搞懂“系统调用”的底层原理?建议您别错过这篇【调用门】
作 者:道哥,10+年嵌入式开发老兵,专注于:C/C++.嵌入式.Linux. 关注下方公众号,回复[书籍],获取 Linux.嵌入式领域经典书籍:回复[PDF],获取所有原创文章( PDF 格式). ...
- PHP脚本设置及获取进程名
今天来学习的是两个非常简单的函数,一个可以用来设置我们执行脚本时运行的进程名.而另一个就是简单的获取当前运行的进程名.这两个函数对于大量的脚本运行代码有很大的作用,比如我们需要 kill 掉某个进程时 ...
- 分布式文件系统FastDFS在CentOS7上的安装及与Springboot的整合
1. 概述 FastDFS 是目前比较流行的分布式文件系统,可以很容易的实现横向扩展.动态扩容.灾备.高可用和负载均衡. FastDFS 的服务分为 tracker 服务 和 storage 服务, ...
- Java学习之随堂笔记系列——day03
内容回顾:1.标识符和类型转换 1.1 标识符:给类.方法.变量取得名字就是标识符. 命名规则: 1.必须是字母.数字._.$组成 2. ...