首页 文章资讯内容详情

SpringCloud负载均衡笔记

2026-06-01 3 花语

本文内容纲要:

SpringCloud的负载均衡组件用的是Ribbon,这个东西就是服务消费者。它只是一个配置用的中转器,放在Zuul和EurekaClient之间用来转发的,它里面写了好多规则,用来指定负载的规则。

首先,Zuul:

application.yml

eureka: client: serviceUrl: defaultZone:http://localhost:7087/eureka/ server: port:7089 spring: application: name:service-zuul zuul: host: maxTotalConnections:10000 maxPerRouteConnections:60000 routes: api-a: path:/dbmeta/** serviceId:service-ribbon api-b: path:/kylin/** serviceId:service-kylin ribbon: eureka: enabled:false service-ribbon: ribbon: listOfServers:http://localhost:7088,http://localhost:7091 ConnectTimeout:10000 ReadTimeout:30000 MaxTotalHttpConnections:10000 MaxConnectionsPerHost:60000

Application

packagecom.shinho; importorg.springframework.boot.SpringApplication; importorg.springframework.boot.autoconfigure.SpringBootApplication; importorg.springframework.boot.builder.SpringApplicationBuilder; importorg.springframework.cloud.netflix.eureka.EnableEurekaClient; importorg.springframework.cloud.netflix.zuul.EnableZuulProxy; @EnableZuulProxy @SpringBootApplication publicclassDbzuulApplication{ publicstaticvoidmain(String[]args){ SpringApplication.run(DbzuulApplication.class,args); } }

pom.xml

<?xmlversion="1.0"encoding="UTF-8"?> <projectxmlns="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.0http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.shinho</groupId> <artifactId>dbzuul</artifactId> <version>0.0.1</version> <packaging>jar</packaging> <name>dbzuul</name> <description>DemoprojectforSpringBoot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.0.RELEASE</version> <relativePath/><!--lookupparentfromrepository--> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <spring-cloud.version>Finchley.M9</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>4.3.14.RELEASE</version> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <repositories> <repository> <id>spring-snapshots</id> <name>SpringSnapshots</name> <url>https://repo.spring.io/snapshot</url> <snapshots> <enabled>true</enabled> </snapshots> </repository> <repository> <id>spring-milestones</id> <name>SpringMilestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>spring-snapshots</id> <name>SpringSnapshots</name> <url>https://repo.spring.io/snapshot</url> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> <pluginRepository> <id>spring-milestones</id> <name>SpringMilestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </pluginRepository> </pluginRepositories> </project>

然后,Ribbon客户端

application.yml

eureka: client: serviceUrl: defaultZone:http://localhost:7087/eureka server: port:7090 spring: application: name:service-ribbon

Config类

packagecom.config; importorg.springframework.cloud.netflix.ribbon.ZonePreferenceServerListFilter; importorg.springframework.context.annotation.Bean; importorg.springframework.context.annotation.Configuration; importcom.netflix.client.config.IClientConfig; importcom.netflix.loadbalancer.BestAvailableRule; importcom.netflix.loadbalancer.IPing; importcom.netflix.loadbalancer.IRule; importcom.netflix.loadbalancer.PingUrl; importcom.netflix.loadbalancer.Server; importcom.netflix.loadbalancer.ServerList; importcom.netflix.loadbalancer.ServerListSubsetFilter; importcom.shinho.DbribbonApplication; @Configuration publicclassMyConfig{ @Bean publicIRuleribbonRule(){ returnnewBestAvailableRule(); } @Bean publicIPingribbonPing(){ returnnewPingUrl(); } @Bean publicServerList<Server>ribbonServerList(IClientConfigconfig){ returnnewDbribbonApplication.BazServiceList(config); } @Bean publicServerListSubsetFilterserverListFilter(){ ServerListSubsetFilterfilter=newServerListSubsetFilter(); returnfilter; } }

Application

packagecom.shinho; importorg.springframework.boot.SpringApplication; importorg.springframework.boot.autoconfigure.SpringBootApplication; importorg.springframework.cloud.netflix.ribbon.RibbonClient; importcom.config.MyConfig; importcom.netflix.client.config.IClientConfig; importcom.netflix.loadbalancer.ConfigurationBasedServerList; @SpringBootApplication @RibbonClient(name="service-ribbon",configuration=MyConfig.class) publicclassDbribbonApplication{ publicstaticvoidmain(String[]args){ SpringApplication.run(DbribbonApplication.class,args); } publicstaticclassBazServiceListextendsConfigurationBasedServerList{ publicBazServiceList(IClientConfigconfig){ super.initWithNiwsConfig(config); } } }

pom.xml

<?xmlversion="1.0"encoding="UTF-8"?> <projectxmlns="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.0http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.shinho</groupId> <artifactId>dbribbon</artifactId> <version>0.0.1</version> <packaging>jar</packaging> <name>dbribbon</name> <description>DemoprojectforSpringBoot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.0.RELEASE</version> <relativePath/><!--lookupparentfromrepository--> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <spring-cloud.version>Finchley.M9</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>4.3.14.RELEASE</version> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <repositories> <repository> <id>spring-snapshots</id> <name>SpringSnapshots</name> <url>https://repo.spring.io/snapshot</url> <snapshots> <enabled>true</enabled> </snapshots> </repository> <repository> <id>spring-milestones</id> <name>SpringMilestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>spring-snapshots</id> <name>SpringSnapshots</name> <url>https://repo.spring.io/snapshot</url> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> <pluginRepository> <id>spring-milestones</id> <name>SpringMilestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </pluginRepository> </pluginRepositories> </project>

客户端就和其它的一样了,注意客户端的Service-id不要和Ribbon的重复,Ribbon的Service-id是要单独的哦。

本文内容总结:

原文链接:https://www.cnblogs.com/wpcnblog/p/9021582.html