`

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

  • 大小: 85.6 KB
  • 大小: 57.2 KB
  • 大小: 581.9 KB
分享到:
评论

相关推荐

    spring cloud Ribbon使用详细例子

    通过这个详细的Spring Cloud Ribbon使用例子,你将能够理解Ribbon的工作方式,如何配置和使用它,以及它在微服务架构中的作用。实践中,你可以根据demoribbon的代码逐步学习,加深对Ribbon的理解,并将其应用于你的...

    spring cloud ribbon方式使用服务

    在实际使用Spring Cloud Ribbon时,我们需要在配置文件中指定服务实例的ID(服务名),然后在需要调用远程服务的地方注入`IRestTemplate`或`LoadBalancerClient`,通过它们来发起请求。`IRestTemplate`是基于HTTP的...

    SpringCloud使用Ribbon实现负载均衡

    默认情况下,Ribbon使用轮询策略。我们可以在配置中自定义策略,例如: ```yaml ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule ``` 4. **自定义Ribbon配置** 如果需要更复杂的...

    spring cloud eureka zuul ribbon hystrix feign config 示例

    在给定的标题和描述中,我们看到了几个关键组件:Eureka、Zuul、Ribbon、Hystrix 和 Feign,这些都是Spring Cloud生态中的重要组成部分。下面将详细阐述这些组件及其在实际应用中的作用。 1. **Eureka**:它是...

    浅谈Spring Cloud Ribbon的原理

    浅谈Spring Cloud Ribbon的原理 Spring Cloud Ribbon是一个基于Netflix的开源项目,主要提供客户端的软件负载均衡算法,将中间层服务连接在一起。Ribbon客户端组件提供了一系列完善的配置项,如连接超时、重试等。...

    Spring Cloud实战 _springcloud实战_springcloud_

    《Spring Cloud实战》一书深入探讨了Spring Cloud这一强大的微服务框架,它是当前软件开发领域中最受欢迎的构建微服务架构的工具。Spring Cloud基于Spring Boot的便利性,为开发者提供了全面的微服务开发支持,包括...

    springcloud+eureka+ribbon整合

    Eureka是SpringCloud中的服务发现组件,而Ribbon是客户端负载均衡器。本文将详细介绍如何将这三个组件整合在一起,以及它们在实际应用中的工作原理和配置。 **Eureka服务发现** Eureka是Netflix开源的一个基于REST...

    spring-cloud项目_springcloud_springcloud项目_springcloud_spring-clou

    在 Spring Cloud 中,Ribbon 通常与 Eureka 配合使用,自动从服务发现组件获取服务列表并进行负载均衡。 8. **Feign**: Feign 是一个声明式的 HTTP 客户端,它使得构建与 RESTful 服务的客户端变得简单。Feign 可以...

    spring cloud ribbon源码解读

    Spring Cloud Ribbon源码解读 一、Ribbon初始化过程 Spring Cloud Ribbon的初始化过程涉及多个配置类,主要包括以下几个: 1. LoadBalancerAutoConfiguration:这个配置类负责注入Ribbon相关组件到Spring容器中,...

    Spring Cloud中使用Ribbon

    使用ZoneAvoidancePredicate和AvailabilityPredicate来判断是否选择某个server,前一个判断判定一个zone的运行性能是否可用,剔除不可用的zone的所有server,AvailabilityPredicate用于过滤掉连接数过多的Server。

    微服务springcloud之ribbon使用demo

    Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端 负载均衡的工具。 简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一。Ribbon客户端...

    springcloud-ribbon负载均衡demo

    在这个"springcloud-ribbon负载均衡demo"中,我们将探讨Ribbon的基本概念、工作原理以及如何在实际项目中进行配置和使用。 首先,Ribbon是Netflix开源的一个Java库,用于客户端的负载均衡。在微服务架构中,每个...

    springcloud ribbon 服务消费者

    springcloud ribbon 服务消费者 http://knight-black-bob.iteye.com/blog/2356224

    springcloud视频学习

    2. SpringCloud的核心组件:如Eureka用于服务注册与发现,Zuul或 Ribbon进行客户端负载均衡,Hystrix提供断路器模式以防止服务雪崩,以及Spring Cloud Config支持配置管理等。 3. SpringCloud在国内的实际应用案例...

    Spring Cloud Ribbon实现客户端负载均衡的方法

    要使用 Spring Cloud Ribbon 实现客户端负载均衡,我们需要在项目中添加 Ribbon 的依赖项,然后使用 @RibbonClient 注解来标记项目为 Ribbon 负载均衡的客户端。同时,我们还需要使用 @LoadBalanced 注解来标记 ...

    SpringCloud项目源码下载.docx

    通过以上介绍,我们不仅了解了Spring Cloud的基本概念和核心组件,还掌握了如何下载并使用其源码进行深入学习的方法。这对于开发者来说是非常宝贵的学习资源,有助于更好地理解和应用Spring Cloud技术栈。

    尚硅谷周阳老师SpringCloud笔记

    接下来,SpringCloud Ribbon是客户端负载均衡器,它与Eureka结合,可以在消费服务时实现自动负载均衡。Ribbon提供了多种策略,如轮询、随机等,用于选择服务实例。 SpringCloud Zuul是边缘服务和API网关,它可以对...

    SpringCloud 15个完整例子

    SpringCloud是中国Java开发者广泛使用的微服务框架,它包含了一系列组件,用于构建分布式系统。这个压缩包文件"SpringCloud 15个完整例子"提供了一系列从基础到进阶的示例项目,帮助用户深入理解并实践SpringCloud的...

    springCloud 框架,整合feign,ribbon,熔断器

    在本项目中,我们关注的是如何整合 Feign、Ribbon 和熔断器,这些都是 SpringCloud 生态系统中的关键组件。 1. **Eureka**:Eureka 是 Netflix 提供的服务注册与发现组件。在分布式系统中,服务之间需要互相调用,...

Global site tag (gtag.js) - Google Analytics