• SpringCloud之Ribbon运行


    1.环境准备

    1.首先我这里有spring-cloud-parent pom工程

    2.spring-cloud-eureka-server Eureka Server 子工程 这里端口我们使用90开头

    我们这里集群由两个服务实例组成,分别是9090与9091端口

    3.spring-cloud-user-service-consumer 用户服务 (也就是咱们的服务消费者)这里端口我们使用80 开头

    4.spring-cloud-order-service-provider 订单提供服务 (服务提供者) 这里端口我们使用70开头

    我们订单服务提供者也由两个实例组成,分别是7070与7071

    在这里插入图片描述

    2. spring-cloud-eureka-server

    我们spring-cloud-parent 父工程 与Eureka Server 服务spring-cloud-eureka-server不需要动,然后分别启动9090端口与9091端口的Eureka Server。
    在这里插入图片描述

    3.订单服务(服务提供者)

    3.1 application.yml
    我们这里使用springboot profiles 配置文件特性将订单提供者服务spring-cloud-order-service-provider分成不同端口

    spring:
      application:
        name: spring-cloud-order-service-provider
    
    ---
    spring:
      profiles: p1
    eureka:
      client:
        service-url:
          defaultZone: http://EurekaServerA:9090/eureka,http://EurekaServerB:9091/eureka
        fetch-registry: true
        register-with-eureka: true
      instance:
        prefer-ip-address: true   # 使用ip注册
        #自定义实例显示格式,添加版本号
        instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}:@project.version@
    server:
      port: 7070
    
    ---
    spring:
      profiles: p2
    eureka:
      client:
        service-url:
          defaultZone: http://EurekaServerA:9090/eureka,http://EurekaServerB:9091/eureka
        fetch-registry: true
        register-with-eureka: true
      instance:
        prefer-ip-address: true   # 使用ip注册
        #自定义实例显示格式,添加版本号
        instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}:@project.version@
    server:
      port: 7071
    

    并配置idea启动
    在这里插入图片描述
    在这里插入图片描述
    3.2 controller
    修改controller,让其返回当前服务的端口,利于我们观察

    @RestController
    @RequestMapping("/order/data")
    public class OrderStatisticServiceController {
        @Value("${server.port}")
        private Integer port;
        /**
         * 根据用户id获取今日完单数
         * @param id 用户ID
         * @return  完单数
         */
        @GetMapping("/getTodayFinishOrderNum/{id}")
        public Integer getTodayFinishOrderNum(@PathVariable("id") Integer id){
            return port;
        }
    }
    

    3.3 启动
    分别启动订单服务提供者 7070 与7071 服务,我们可以看到两个服务提供者注册到Eureka Server 上面了。
    在这里插入图片描述

    4.用户服务(服务调用者)

    订单调用者服务: spring-cloud-user-service-consumer:8080

    4.1 RestTemplateConfiguration

    我们需要在RestTemplate配置类里面在注入RestTemplate的方法上面添加注解@LoadBalanced

    @Configuration
    public class RestTemplateConfiguration {
        @Bean
        @LoadBalanced
        public RestTemplate getRestTemplate(){
            return  new RestTemplate();
        }
    }
    

    这就ok了,我们这里不需要添加Ribbon的依赖,因为Eureka Client包里面帮我们引入Ribbon相关的依赖
    在这里插入图片描述
    4.2 controller
    这里我们只需要在调用url中写入要调用的服务名字就可以了,然后Ribbon就会帮我们从服务列表找到合适的服务调用的

    @RestController
    @RequestMapping("/user/data")
    public class UserCenterController {
        @Autowired
        private RestTemplate restTemplate;
    
        @GetMapping("/getTodayStatistic/{id}")
        public Integer getTodayStatistic(@PathVariable("id") Integer id){
            String url  ="http://spring-cloud-order-service-provider/order/data/getTodayFinishOrderNum/"+id;
            return restTemplate.getForObject(url, Integer.class);
        }
    
    }
    

    4.3 启动测试
    在这里插入图片描述
    我们调用两次,分别返回7071与7070,说明我们Ribbon起作用了。
    在这里插入图片描述
    在这里插入图片描述
    4.4 调整负载均衡策略

    我们这边默认的负载均衡策略是:ZoneAvoidanceRule:区域权衡策略。然后我们可以通过配置来使用其他的负载均衡策略,比如我们使用随机策略:

    application.yml中配置

    这个是针对spring-cloud-order-service-provider 这个服务的。

    spring-cloud-order-service-provider:
      ribbon:
        NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
    

    感谢你看到这里,我是程序员麦冬,一个java开发从业者,深耕行业六年了,每天都会分享java相关技术文章或行业资讯

    欢迎大家关注和转发文章,后期还有福利赠送!

  • 相关阅读:
    CSS文字的处理
    typeof 检测变量的数据类型
    BZOJ 1257: [CQOI2007]余数之和
    BZOJ 1218: [HNOI2003]激光炸弹
    BZOJ 3251: 树上三角形
    BZOJ 3916: [Baltic2014]friends
    BZOJ 1610: [Usaco2008 Feb]Line连线游戏 暴力
    BZOJ 1593 [Usaco2008 Feb]Hotel 旅馆 双倍经验,线段树
    BZOJ 1096 [ZJOI2007]仓库建设 BZOJ 3437 小P的牧场 BZOJ 3156 防御准备 斜率优化dp
    BZOJ 2582 : Bovine Alliance DFS
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13290179.html
Copyright © 2020-2023  润新知