zoukankan      html  css  js  c++  java
  • SpringCloud(三):服务消费以及负载均衡(RestTemplate+Ribbon)

    一、什么是Ribbon:

    Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法。默认是使用轮询。

    方法1:可以在springboot启动类之外定义一个配置类(@RibbonClient)配置对应的算法。

    方法2:在配置文件yml中配置

    相关链接:https://www.cnblogs.com/fengyuduke/p/10712569.html

    怎么使用Ribbon实现负载均衡?

    相关链接: https://www.cnblogs.com/xing-12/p/9889153.html

    1.你要有两个服务,一个是服务消费方,一个是服务提供方,并且服务提供方要有两个实例,也就是xing-user有两个实例,分别运行在8070和8071端口。

    2.所有服务注册到eureka server中。

    3.通过注入bean:  用RestTemplate调用restTemplate.getForObject("http://xing-user/user/findByName/"+name, User.class)方法。

    二、Eureka服务提供者集群

    先启动上篇文章中的注册中心eureka-server:8001, 以及hello-service:8011,接着修改hello-service项目配置文件中的端口,改成8012,再次运行用户服务项目。

    执行成功,查看Eureka注册中心,可以看到有用户服务应用有两个端口对应。

    (如果是IDEA用户,需要修改Application.java的执行方式,默认是单实例运行,所以你在运行8011的项目,修改端口无法再次运行。)

    三、RestTemplate+Ribbon消费者:  新建一个maven服务

     pom.xml:

        <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-eureka</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-ribbon</artifactId>
            </dependency>

    application.properties:

    spring.application.name=hello-consumer-ribbon
    server.port=8021
    eureka.client.serviceUrl.defaultZone=http://localhost:8001/eureka/spring.application.name=hello-consumer-ribbon
    server.port=8021
    eureka.client.serviceUrl.defaultZone=http://localhost:8001/eureka/

    启动类:

    package cn.demo;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.loadbalancer.LoadBalanced;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    import org.springframework.context.annotation.Bean;
    import org.springframework.http.ResponseEntity;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.client.RestTemplate;
    
    @SpringBootApplication
    @EnableDiscoveryClient
    @RestController
    public class HelloConsumerRibbonApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(HelloConsumerRibbonApplication.class, args);
        }
    
        @Bean
        @LoadBalanced
        public RestTemplate restTemplate () {
            return new RestTemplate();
        }
    
        @Autowired
        private RestTemplate restTemplate;
    
        //获取服务实例,作用为之后console显示效果;"http://USER-SERVICE/hello?name= 标识注册的服务。USER-SERVICE在eureka注册的服务名
        @RequestMapping("hello")
        public ResponseEntity<String> hello (String name) {
            return restTemplate.getForEntity("http://USER-SERVICE/hello?name=" + name, String.class);
        }
    
    }

    四、测试
    测试服务消费
    http://localhost:8021/hello?name=ribbon

    测试负载均衡:
    我们在hello-service hello方法中加上日志打印,然后再分别启动 hello-service:8012,8002,然后多次访问 http://localhost:8021/hello?name=ribbon,可以看到两个hello-service项目的控制台都有日志输出,表示实现了负载均衡。

    使用RestTemplate+Ribbon必须指定调用服务名称,如上面的HELLO-SERVICE,为了方便使用,SpringCloud还集成了Feign消费方式。
    ————————————————

  • 相关阅读:
    【bzoj2653】【middle】【主席树+二分答案】
    Codeforces 464E. The Classic Problem
    关于主席树的入门,讲解和题单
    BZOJ3531-[Sdoi2014]旅行(树剖+线段树动态开点)
    [bzoj3123][洛谷P3302] [SDOI2013]森林(树上主席树+启发式合并)
    1018_两个圆相交的面积
    String对象中常用的方法
    张爱玲写的信
    React Native拆包及热更新方案 · Solartisan
    vue项目实战
  • 原文地址:https://www.cnblogs.com/lgg20/p/11758793.html
Copyright © 2011-2022 走看看