温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

SpringCloud中的负载均衡器Ribbon介绍及使用是怎样的

发布时间:2021-09-29 14:55:32 来源:亿速云 阅读:132 作者:柒染 栏目:编程语言

SpringCloud中的负载均衡器Ribbon介绍及使用是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

目前主流的负载方案分为以下两种:

  • 集中式负载均衡,在消费者和服务提供方中间使用独立的代理方式进行负载,有硬件的(比如 F5),也有软件的(比如 Nginx)。

  • 客户端自己做负载均衡,根据自己的请求情况做负载,Ribbon 就属于客户端自己做负载。

Spring Cloud Ribbon 是一个基于 HTTP 和 TCP 的客户端负载均衡工具,它基于 Netflix Ribbon 实现。通过 Spring Cloud 的封装,可以让我们轻松地将面向服务的 REST 模版请求自动转换成客户端负载均衡的服务调用。

Spring Cloud Ribbon 虽然只是一个工具类框架,它不像服务注册中心、配置中心、API 网关那样需要独立部署,但是它几乎存在于每一个 Spring Cloud 构建的微服务和基础设施中。因为微服务间的调用,API 网关的请求转发等内容,实际上都是通过 Ribbon 来实现的(https://github.com/Netflix/ribbon)。

Ribbon 模块

 Ribbon 模块介绍如下表 1 所示。

表 1 Ribbon 模块介绍

名  称说    明
ribbon-loadbalancer负载均衡模块,可独立使用,也可以和别的模块一起使用。
Ribbon内置的负载均衡算法都实现在其中。
ribbon-eureka基于 Eureka 封装的模块,能够快速、方便地集成 Eureka。
ribbon-transport基于 Netty 实现多协议的支持,比如 HTTP、Tcp、Udp 等。
ribbon-httpclient基于 Apache HttpClient 封装的 REST 客户端,集成了负载均衡模块,可以直接在项目中使用来调用接口。
ribbon-exampleRibbon 使用代码示例,通过这些示例能够让你的学习事半功倍。
ribbon-core一些比较核心且具有通用性的代码,客户端 API 的一些配置和其他 API 的定义。

Ribbon 使用

我们使用 Ribbon 来实现一个最简单的负载均衡调用功能,接口就用《使用Eureka编写服务提供者》提供的 /user/hello 接口,需要启动两个服务,一个是 8081 的端口,一个是 8083 的端口。

然后创建一个新的 Maven 项目 ribbon-native-demo,在项目中集成 Ribbon,在 pom.xml 中添加如下代码所示的依赖。

<dependency><groupId>com.netflix.ribbon</groupId><artifactId>ribbon</artifactId><version>2.2.2</version></dependency><dependency><groupId>com.netflix.ribbon</groupId><artifactId>ribbon-core</artifactId><version>2.2.2</version></dependency><dependency><groupId>com.netflix.ribbon</groupId><artifactId>ribbon-loadbalancer</artifactId><version>2.2.2</version></dependency><dependency><groupId>io.reactivex</groupId><artifactId>rxjava</artifactId><version>1.0.10</version></dependency>

接下来我们编写一个客户端来调用接口,代码如下所示。

// 服务列表List<Server> serverList = Lists.newArrayList(new Server("localhost", 8081), new Server("localhost", 8083));// 构建负载实例ILoadBalancer loadBalancer = LoadBalancerBuilder.newBuilder().buildFixedServerListLoadBalancer(serverList);// 调用 5 次来测试效果for (int i = 0; i < 5; i++) {String result = LoadBalancerCommand.<String>builder().withLoadBalancer(loadBalancer).build()
            .submit(new ServerOperation<String>() {public Observable<String> call(Server server) {try {String addr = "http://" + server.getHost() + ":" + server.getPort() + "/user/hello";
                        System.out.println(" 调用地址:" + addr);
                        URL url = new URL(addr);
                        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                        conn.setRequestMethod("GET");
                        conn.connect();
                        InputStream in = conn.getInputStream();
                        byte[] data = new byte[in.available()];in.read(data);return Observable.just(new String(data));
                    } catch (Exception e) {return Observable.error(e);
                    }
                }
            }).toBlocking().first();
    System.out.println(" 调用结果:" + result);
}

上述这个例子主要演示了 Ribbon 如何去做负载操作,调用接口用的最底层的 HttpURLConnection。当然你也可以用别的客户端,或者直接用 RibbonClient 执行程序,可以看到控制台输出的结果如下:

SpringCloud中的负载均衡器Ribbon介绍及使用是怎样的

从输出的结果中可以看到,负载起作用了,8083 调用了 3 次,8081 调用了 2 次。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI