zoukankan      html  css  js  c++  java
  • springcloud超简单的入门3--负载均衡

    上个文章的末尾说到,当有多个服务实例的时候,怎样来获取服务实例。但是,只是简单的通过get(0)来获取列表中的第一个实例来使用。
    现实场景中,还需要写一个算法来实现负载均衡来决定每次使用的服务实例,而不是每次都只使用第一个。

    好消息!好消息!下面播送一个好消息!
    现在不需要自己去写负载均衡算法了,spring cloud中已经集成了一个负载均衡工具包了 --- 它就是 Ribbon !

    它的负载均衡实现时在客户端的,所以我们需要把它引入的服务消费者实例中。

    那么,就让我们一起用起来把。Let‘s go now !

    Ribbon负载均衡

    • 相关依赖
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-netflix-ribbon</artifactId>
    </dependency>
    
    • Robin的简单使用,在RestTemplate上使用 @LoadBalanced 注解即可启用
     @Bean
     @LoadBalanced
     public RestTemplate getRestTemplate(){
         return new RestTemplate();
     }
    
    • 调用微服务
    @RestController
    @RequestMapping("/")
    public class TestController {
        @Resource
        RestTemplate restTemplate;
    
        @GetMapping("hi")
        //此处使用的是服务提供者的service-id,即,服务提供者的 spring.application.name
        //这是Ribbon的作用了,从Eureka注册中心,获取服务列表。缓存在本地,然后用户就可以直接使用serviceid来访问服务了
        public String hi() {
            return restTemplate.getForObject("http://MICROSERVICE-PROVIDER/hi/consumer", String.class);
        }
    }
    
    • 属性配置
    server:
      port: 8090
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:9090/eureka/
        register-with-eureka: false ##仅作为消费者不注册服务
    spring:
      application:
        name: microservice-consumer
    

    现在将消费服务者多启动几个实例,看看是否实现了负载均衡呢。

    • 修改负载均衡策略
      Ribbon默认的负载均衡策略是轮询,可以通过配置来改变均衡策略。
    @Configuration
    public class RibbonConfig {
        @Bean
        //此处将负载均衡策略改为了随机。
        public IRule useRule(){
            return new RandomRule();
        }
    }
    

    当然,Ribbon还有其他更丰富的配置,那就留给读者们,自己发掘把。毕竟我只是介绍怎么入门的。

    那么接下来呢,再介绍一下一个更为简单的服务调用工具把。请客官移目下方

    Feign声明式服务调用

    Feign是一个基于接口的编程方式 ,只需要声明接口和配置注解,spring框架会根据配置来调用服务。可以让服务间调用变的更简单

    Feign底层是使用了Ribbon作为负载均衡的客户端,所以需要引入eureka-cient

    • 相关依赖

      <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
      </dependency>
      <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-openfeign</artifactId>
      </dependency>
      
    • 启动类配置,使用@EnableFeignClients注解启动Feign功能

      @SpringBootApplication
      @EnableEurekaClient
      @EnableFeignClients
      public class FeignStarter {
          public static void main(String[] args) {
              SpringApplication.run(FeignStarter.class,args);
          }
      }
      
    • 使用@FeignClinet注解来声明服务接口

      @FeignClient("microservice-provider")  //服务提供者服务名
      public interface ProviderService {
          @GetMapping("hi/{name}") 		//与服务接口
          String hi(@PathVariable(value = "name") String name); //需指定路径取值的绑定名称,否则报错
      }
      
    • 调用Fegin声明的服务

      @RestController
      public class TestController {
          @Resource
          ProviderService providerService ; //自动注入Feign
      
          @GetMapping("hi")
          public String hi() {
              return providerService.hi("feign-consumer");
          }
      }
      

    怎么样,是不是感觉,Feign用起来比直接用RestTemplate更简单优雅呢?

  • 相关阅读:
    Open source cryptocurrency exchange
    Salted Password Hashing
    95. Unique Binary Search Trees II
    714. Best Time to Buy and Sell Stock with Transaction Fee
    680. Valid Palindrome II
    Java compiler level does not match the version of the installed Java project facet.
    eclipse自动编译
    Exception in thread "main" java.lang.StackOverflowError(栈溢出)
    博客背景美化——动态雪花飘落
    java九九乘法表
  • 原文地址:https://www.cnblogs.com/justalittlecoder/p/11523844.html
Copyright © 2011-2022 走看看