上节我们学会了如何搭建一个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
相关推荐
详细的讲解了springcloud ribbon的使用,用代码列子说话,我相信对你会有帮助的。
spring cloud ribbon源码解读,关于ribbon的初始化过程,调用过程
SpringCloud使用Ribbon实现负载均衡https://blog.csdn.net/u012081441/article/details/80761830
spring cloud eureka zuul ribbon hystrix feign config 示例代码
使用ZoneAvoidancePredicate和AvailabilityPredicate来判断是否选择某个server,前一个判断判定一个zone的运行性能是否可用,剔除不可用的zone的所有server,AvailabilityPredicate用于过滤掉连接数过多的Server。
Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端 负载均衡的工具。 简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一。Ribbon客户端...
spring cloud ribbon源码解读,关于ribbon的初始化过程,调用过程
springcloud ribbon 服务消费者 http://knight-black-bob.iteye.com/blog/2356224
springcloud+eureka+ribbon 整合,ribbon+restTemplate实现服务调用
NULL 博文链接:https://huangyongxing310.iteye.com/blog/2381438
Spring Cloud 各组件Demo ,包含 Spring Cloud Eureka ,Spring Cloud Zuul , Spring Cloud Ribbon , Hystrix-Dashboard-Turbine 如有错误 ,请于本人联系 ,自会及时修改 , 防止误导他人
Spring Cloud(十)高可用的分布式配置中心 Spring Cloud Config 中使用 Refresh spring-cloud-config-bus-rabbitMQ Spring Cloud(十一)高可用的分布式配置中心 Spring Cloud Bus 消息总线集成(RabbitMQ)
14.尚硅谷_SpringCloud_SpringCloud国内使用情况 15.尚硅谷_SpringCloud_Rest微服务案例-总体概述 16.尚硅谷_SpringCloud_Rest微服务案例-父工程构建步骤 17.尚硅谷_SpringCloud_Rest微服务案例-API公共模块和部门...
一篇很好的springCloud学习的思维导读,详细的介绍了,springCloud的搭建步骤以及各组件的说明讲解 涵盖 Eureka服务注册与发现 Zookeeper服务注册与发现 Consul服务注册与发现 Ribbon负载均衡服务调用 OpenFeign...
课程中对比了 Dubbo 和 SpringCloud,并深入讲授SpringCloud核心组件Eureka、Ribbon、Feign、Hystrix、HystrixDashboard、Zuul、Config。除此之外,还通过整合SpringMVC+SpringBoot+Mybatis构建一个可用的基于Spring...
能跑通的springcloud项目,已经整合eureka,ribbon,熔断器,zuul,下下源码启动eureka,再启动消费程序即可。适合初步学习
Springcloud Zuul config eureka ribbon实例 ,用于入门学习
14.硅谷学习_SpringCloud_SpringCloud国内使用情况 15.硅谷学习_SpringCloud_Rest微服务案例-总体概述 16.硅谷学习_SpringCloud_Rest微服务案例-父工程构建步骤 17.硅谷学习_SpringCloud_Rest微服务案例-API公共...
基于Spring Cloud微服务化电商平台,每个模块单独封装,如有某个模块不能满足业务,可以单独进行改造,无需关心其他模块功能, 各个模块之间通过Fegin调用,多业务系统并行开发,可以用来学习了解Spring Cloud各个...
spring cloud整合MQTT简单示例,分为三个项目eureka-server、service-hi、service-ribbon,MQTT环境需要自己提前搭好,我这搭的环境是apache-apollo-1.7.1