zoukankan      html  css  js  c++  java
  • 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相关技术文章或行业资讯

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

  • 相关阅读:
    JavaScript中的闭包
    SQL 备忘
    SqlServer 2005 升级至SP2过程中出现"身份验证"无法通过的问题
    unable to start debugging on the web server iis does not list an application that matches the launched url
    Freebsd 编译内核
    Freebsd 6.2中关于无线网络的设定
    【Oracle】ORA01219
    【Linux】Windows到Linux的文件复制
    【Web】jar命令行生成jar包
    【Linux】CIFS挂载Windows共享
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13290179.html
Copyright © 2011-2022 走看看