spring-cloud-ribbon负载均衡(一)
2017-08-21 10:36
666 查看
在dubbo项目中, zookeeper即注册中心帮我们实现了调度和负载均衡的能力, 这种方式被称为服务器端的负载均衡, springcloud中, 使用ribbon实现的客户端负载均衡
1、Eureka为所有Netflix服务提供服务注册。Ribbon客户端的创建和配置为每个目标服务执行。Ribbon客户端组件提供一系列完善的配置选项,比如连接超时、重试、重试算法等。Ribbon内置可插拔、可定制的负载均衡组件。下面是用到的一些负载均衡策略:
(1) 简单轮询负载均衡
(2) 加权响应时间负载均衡
(3) 区域感知轮询负载均衡
(4) 随机负载均衡
2、ribbon用以实现负载均衡;实现软负载均衡,核心有三点:
服务发现,发现依赖服务的列表
服务选择规则,在多个服务中如何选择一个有效服务
服务监听,检测失效的服务,高效剔除失效服务
3、代码结构
使用@RibbonClients注解 ,在getServerList方法中,首先获取ZoneAwareLoadBalancer,然后获取serverList,获取到serverList以后即可选择一个有效服务进行调度(默认轮询)
4、application
5、controller
6、application.properties
7、config.properties
8、pom.xml
1、Eureka为所有Netflix服务提供服务注册。Ribbon客户端的创建和配置为每个目标服务执行。Ribbon客户端组件提供一系列完善的配置选项,比如连接超时、重试、重试算法等。Ribbon内置可插拔、可定制的负载均衡组件。下面是用到的一些负载均衡策略:
(1) 简单轮询负载均衡
(2) 加权响应时间负载均衡
(3) 区域感知轮询负载均衡
(4) 随机负载均衡
2、ribbon用以实现负载均衡;实现软负载均衡,核心有三点:
服务发现,发现依赖服务的列表
服务选择规则,在多个服务中如何选择一个有效服务
服务监听,检测失效的服务,高效剔除失效服务
3、代码结构
使用@RibbonClients注解 ,在getServerList方法中,首先获取ZoneAwareLoadBalancer,然后获取serverList,获取到serverList以后即可选择一个有效服务进行调度(默认轮询)
4、application
package com.wei.qin; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.ribbon.RibbonClients; /** * ribbon启动 * * @auther dwx * * 2017年8月21日 */ @SpringBootApplication @RibbonClients public class RibbonApplication { public static void main(String[] args) { SpringApplication.run(RibbonApplication.class, args); } }
5、controller
package com.wei.qin; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.netflix.ribbon.SpringClientFactory; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import com.netflix.loadbalancer.Server; import com.netflix.loadbalancer.ServerList; import com.netflix.loadbalancer.ZoneAwareLoadBalancer; @RestController public class ConfigController { @Autowired private SpringClientFactory clientFactory; @SuppressWarnings("unchecked") @RequestMapping("/ribbon") @ResponseBody public String getServerList() throws Exception { ZoneAwareLoadBalancer<Server> lb = (ZoneAwareLoadBalancer<Server>) clientFactory.getLoadBalancer("myclient"); ServerList<Server> serverList = lb.getServerListImpl(); List<Server> serverDetailList = serverList.getInitialListOfServers(); StringBuilder sfd = new StringBuilder(); if (!CollectionUtils.isEmpty(serverDetailList)) { for (Server s : serverDetailList) { sfd.append(s.getHost()).append(",").append(s.getHost()).append("\n"); } } else { sfd.append("no message"); } return sfd.toString(); } }
6、application.properties
ribbon.client.name=myclient server.port=8086 server.tomcat.accept-count=5000 server.tomcat.max-threads=5000 server.tomcat.max-connections=5000
7、config.properties
myclient.ribbon.ReadTimeout=3000 myclient.ribbon.ConnectTimeout=3000 myclient.ribbon.ServerListRefreshInterval=2000 myclient.ribbon.OkToRetryOnAllOperations=true myclient.ribbon.MaxAutoRetriesNextServer=1 myclient.ribbon.MaxAutoRetries=1 #\u8868\u660E\u6709\u6548\u7684\u670D\u52A1\u5217\u8868 myclient.ribbon.listOfServers=www.baidu.com:80,www.163.com:80,www.csdn.net:80
8、pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.wei.qin</groupId> <artifactId>springcloudribbon</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>springcloudribbon</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-netflix</artifactId> <version>1.0.7.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!--ribbon--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId> </dependency> </dependencies> </project>
相关文章推荐
- springcloud使用ribbon实现客户端负载均衡
- 【Spring Cloud】Ribbon负载均衡
- 干货分享微服务spring-cloud(4.负载均衡ribbon与熔断器hystrix)
- SpringCloud 笔记 (二)---- 简单搭建一个服务消费者,实现简单的ribbon负载均衡
- 【Spring Cloud】Ribbon负载均衡
- 客户端负载均衡Ribbon之一:Spring Cloud Netflix负载均衡组件Ribbon介绍
- Spring Cloud Netflix负载均衡组件Ribbon介绍
- 【Spring Cloud】Ribbon负载均衡
- Spring Cloud Ribbon实现客户端负载均衡
- spring cloud ribbon - 负载均衡
- 【Spring Cloud】Ribbon负载均衡
- Spring-Cloud 负载均衡 Ribbon
- Spring Cloud Ribbon——客户端负载均衡
- Spring Cloud -- Ribbon负载均衡
- 【Spring Cloud】Ribbon负载均衡
- 【Spring Cloud】Ribbon负载均衡
- 第六章 Spring Cloud 自定义Ribbon的负载均衡(java配置)
- 【Spring Cloud】Ribbon负载均衡
- 【Spring Cloud】Ribbon负载均衡
- Spring Cloud Ribbon(负载均衡)