Spring Cloud学习(二):Ribbon客户端负载均衡
2019-08-16 10:42:08来源:博客园 阅读 ()
Spring Cloud学习(二):Ribbon客户端负载均衡
1. Ribbon介绍
微服务是将一个完整的服务按照不同的业务拆分成一个个独立的服务,这些服务之间的通信基于Http Restful,在SpringCloud中服务之间的调用中就有通过Ribbon和RestTemplate。
-
Ribbon主要功能是基于客户端的负载均衡。
-
RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。
2.代码实现
-
之前文章已经创建了Eueaka-client服务,在该服务中新增一个Controller模拟业务处理
/** * @author 吕梁山 * @date 2019/7/17 */ @RestController public class TestController { @Value("${server.port}") private String port; @RequestMapping("test") public String test(String userName){ return "此次服务端口号:" + port + ",接收到的参数:" + userName; } }
-
将该服务复制一份,更换端口,然后将两个服务都启动,因为都已经注册到eurake服务端中,所以在eureka服务端可以看到已经注册了两个同样的服务
-
新建一个Ribbon服务
-
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <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> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.6.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.pikaqiu.springcloud</groupId> <artifactId>ribbon</artifactId> <version>0.0.1-SNAPSHOT</version> <name>ribbon</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> <spring-cloud.version>Greenwich.SR2</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-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </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> </project>
-
application.yml
server: port: 5001 spring: application: name: ribbon eureka: client: service-url: defaultZone: http://eureka-server1:3001/eureka/,http://eureka-server2:3002/eureka/ instance: instance-id: Ribbon
-
向程序的ioc注入一个bean: restTemplate,并通过@LoadBalanced注解表明这个restRemplate开启负载均衡的功能。
@SpringBootApplication @EnableEurekaClient public class SpringCloudRibbonApplication { public static void main(String[] args) { SpringApplication.run(SpringCloudRibbonApplication.class, args); } @Bean @LoadBalanced public RestTemplate restTemplate(){ return new RestTemplate(); } }
-
同样添加一个测试的Controller
/** * @author 吕梁山 * @date 2019/7/16 */ @RestController public class MyTestController { private String service = "http://eureka-client"; @Autowired private RestTemplate restTemplate; @RequestMapping("test") public String test(String userName){ return restTemplate.getForObject(service + "/test?userName=" + userName, String.class); } }
-
现在eurek中可以看到已经注册了两个client服务一个ribbon服务
-
测试 访问
http://localhost:5001/test?userName=测试
会发现ribbon会去轮询访问两个client服务
此次服务端口号:4001,接收到的参数:测试 此次服务端口号:4002,接收到的参数:测试
3. 更换负载均衡策略
Ribbon默认的策略是轮训,也就是挨个访问每个服务,也可以自己更换策略或者已定义策略,com.netflix.loadbalancer包下有很多种定义好的策略,可以自己选择,同样可以参照写好的策略类自己写一个策略类
eureka-client: ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
-
eureka-client 需要进行负载均衡的服务name
-
NFLoadBalancerRuleClassName 策略类路径,如果是自定义就写自己项目里的路径
欢迎留言:http://pikaqiu.vip/article/2367.html
示例代码:https://github.com/Liangshan1994/SpringCloud
原文链接:https://www.cnblogs.com/liangshandada/p/11212245.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:java玩转zip压缩包
- Spring系列.ApplicationContext接口 2020-06-11
- springboot2配置JavaMelody与springMVC配置JavaMelody 2020-06-11
- 学习Java 8 Stream Api (4) - Stream 终端操作之 collect 2020-06-11
- java学习之第一天 2020-06-11
- 给你一份超详细 Spring Boot 知识清单 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash