上节我们学会了如何搭建一个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使用例子,你将能够理解Ribbon的工作方式,如何配置和使用它,以及它在微服务架构中的作用。实践中,你可以根据demoribbon的代码逐步学习,加深对Ribbon的理解,并将其应用于你的...
在实际使用Spring Cloud Ribbon时,我们需要在配置文件中指定服务实例的ID(服务名),然后在需要调用远程服务的地方注入`IRestTemplate`或`LoadBalancerClient`,通过它们来发起请求。`IRestTemplate`是基于HTTP的...
默认情况下,Ribbon使用轮询策略。我们可以在配置中自定义策略,例如: ```yaml ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule ``` 4. **自定义Ribbon配置** 如果需要更复杂的...
在给定的标题和描述中,我们看到了几个关键组件:Eureka、Zuul、Ribbon、Hystrix 和 Feign,这些都是Spring Cloud生态中的重要组成部分。下面将详细阐述这些组件及其在实际应用中的作用。 1. **Eureka**:它是...
浅谈Spring Cloud Ribbon的原理 Spring Cloud Ribbon是一个基于Netflix的开源项目,主要提供客户端的软件负载均衡算法,将中间层服务连接在一起。Ribbon客户端组件提供了一系列完善的配置项,如连接超时、重试等。...
《Spring Cloud实战》一书深入探讨了Spring Cloud这一强大的微服务框架,它是当前软件开发领域中最受欢迎的构建微服务架构的工具。Spring Cloud基于Spring Boot的便利性,为开发者提供了全面的微服务开发支持,包括...
Eureka是SpringCloud中的服务发现组件,而Ribbon是客户端负载均衡器。本文将详细介绍如何将这三个组件整合在一起,以及它们在实际应用中的工作原理和配置。 **Eureka服务发现** Eureka是Netflix开源的一个基于REST...
在 Spring Cloud 中,Ribbon 通常与 Eureka 配合使用,自动从服务发现组件获取服务列表并进行负载均衡。 8. **Feign**: Feign 是一个声明式的 HTTP 客户端,它使得构建与 RESTful 服务的客户端变得简单。Feign 可以...
Spring Cloud Ribbon源码解读 一、Ribbon初始化过程 Spring Cloud Ribbon的初始化过程涉及多个配置类,主要包括以下几个: 1. LoadBalancerAutoConfiguration:这个配置类负责注入Ribbon相关组件到Spring容器中,...
使用ZoneAvoidancePredicate和AvailabilityPredicate来判断是否选择某个server,前一个判断判定一个zone的运行性能是否可用,剔除不可用的zone的所有server,AvailabilityPredicate用于过滤掉连接数过多的Server。
Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端 负载均衡的工具。 简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一。Ribbon客户端...
在这个"springcloud-ribbon负载均衡demo"中,我们将探讨Ribbon的基本概念、工作原理以及如何在实际项目中进行配置和使用。 首先,Ribbon是Netflix开源的一个Java库,用于客户端的负载均衡。在微服务架构中,每个...
springcloud ribbon 服务消费者 http://knight-black-bob.iteye.com/blog/2356224
2. SpringCloud的核心组件:如Eureka用于服务注册与发现,Zuul或 Ribbon进行客户端负载均衡,Hystrix提供断路器模式以防止服务雪崩,以及Spring Cloud Config支持配置管理等。 3. SpringCloud在国内的实际应用案例...
要使用 Spring Cloud Ribbon 实现客户端负载均衡,我们需要在项目中添加 Ribbon 的依赖项,然后使用 @RibbonClient 注解来标记项目为 Ribbon 负载均衡的客户端。同时,我们还需要使用 @LoadBalanced 注解来标记 ...
通过以上介绍,我们不仅了解了Spring Cloud的基本概念和核心组件,还掌握了如何下载并使用其源码进行深入学习的方法。这对于开发者来说是非常宝贵的学习资源,有助于更好地理解和应用Spring Cloud技术栈。
接下来,SpringCloud Ribbon是客户端负载均衡器,它与Eureka结合,可以在消费服务时实现自动负载均衡。Ribbon提供了多种策略,如轮询、随机等,用于选择服务实例。 SpringCloud Zuul是边缘服务和API网关,它可以对...
SpringCloud是中国Java开发者广泛使用的微服务框架,它包含了一系列组件,用于构建分布式系统。这个压缩包文件"SpringCloud 15个完整例子"提供了一系列从基础到进阶的示例项目,帮助用户深入理解并实践SpringCloud的...
在本项目中,我们关注的是如何整合 Feign、Ribbon 和熔断器,这些都是 SpringCloud 生态系统中的关键组件。 1. **Eureka**:Eureka 是 Netflix 提供的服务注册与发现组件。在分布式系统中,服务之间需要互相调用,...