springCloud 学习笔记2 ribbon 实现客户端负载均衡
2019-01-04 20:43
766 查看
版权声明:尊重原创 https://blog.csdn.net/higher_gao/article/details/85798761
测试自定义负载均衡器,注解实现 测试自定义负载均衡器,配置实现实现
maven基础
ribbon基本介绍
Ribbon是Netflix发布的负载均衡器,一个基于HTTP和TCP的客户端负载均衡工具,Spring Cloud集成了Ribbon,结合Eureka,可实现客户端的负载均衡
项目案例 客户端实现负载均衡结构图
准备工作
- 搭建eureak服务端,作为服务注册中心使用
- 搭建eureak客户端,作为服务提供者
- 搭建eureak客户端,作为服务消费者,集成ribbon模块
搭建eureak 服务端
1, pom文件配置
<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>
**属性文件配置**
#服务端口 server.port=8761 #服务名称serviceCenter eureka.instance.hostname=yihongyuan #禁止本身注册 eureka.client.register-with-eureka=false #禁止本身注册 eureka.client.fetch-registry=false #服务中心地址 eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
2, 启动类
@SpringBootApplication @EnableEurekaServer public class EurekaRibboServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaRibboServerApplication.class, args); } }
搭建eureak客户端,服务提供者
1, pom文件配置
<dependency> <groupId>org.springframework.boot</groupId>< 4000 /span> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
**属性文件配置**
spring: application: name: polices eureka: client: eureka-server-url: defautZone: http://localhost:8761/eureka/
2, 启动类
@SpringBootApplication @EnableEurekaClient @ComponentScan(value = "com") public class EureakRibbonProductApplication { public static void main(String[] args) { Scanner scan = new Scanner(System.in); String port = scan.nextLine(); new SpringApplicationBuilder(EureakRibbonProductApplication.class).properties("server.port=" + port).run(args); } }
3, 业务类
@RestController public class PoliceController { @RequestMapping(value = "/call/{id}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) public Police call(@PathVariable Integer id, HttpServletRequest request) { Police p = new Police(); p.setId(id); p.setName("angus"); p.setMessage(request.getRequestURL().toString()); return p; } }
4, 注册中心查看
5, 业务类测试
搭建eureak客户端,服务消费者,集成ribbon模块
1, pom文件配置
<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>
**属性文件配置**
server: port: 9000 spring: application: name: erueka_ribbon_customer eureka: client: eureka-server-url: defautZone: http://localhost:8761/eureka/
2, 启动类
@SpringBootApplication @EnableDiscoveryClient @ComponentScan(value = "com") @Configuration public class EurekaRibbonCustomerApplication { public static void main(String[] args) { SpringApplication.run(EurekaRibbonCustomerApplication.class, args); } @Bean @LoadBalanced public RestTemplate getRestTemplate() { return new RestTemplate(); } }
3, 业务类
@Controller public class MyController { @Autowired RestTemplate tpl; @GetMapping("/router") @ResponseBody public String router() { System.out.println("rout..."); // RestTemplate tpl = getRestTemplate(); String json = tpl.getForObject("http://polices/call/1", String.class); return json; }
4, 注册中心查看
如图见
5, 业务类测试
客户端默认使用轮询的方式访问8080,,8081实例
测试自定义负载均衡器,注解实现
1,自定义配置类
规则类 rule public class MyRule implements IRule { private ILoadBalancer lb; public Server choose(Object key) { System.out.println("这是自定义的规则类"); Random r = new Random(); int randomNum = r.nextInt(10); List<Server> servers = lb.getAllServers(); if (randomNum > 7) { Server s = getServerByPort(servers, 8081); return s; } return getServerByPort(servers, 8080); } private Server getServerByPort(List<Server> servers, int port) { for (Server s : servers) { if (s.getPort() == port) { return s; } } return null; } public void setLoadBalancer(ILoadBalancer lb) { this.lb = lb; } public ILoadBalancer getLoadBalancer() { return lb; } }
配置类 public class MyConfig { @Bean public IRule getRule() { return new MyRule(); } }
ribbon客户端类 @RibbonClient(name = "polices", configuration = MyConfig.class) public class MyClient { }
2,测试
在访问http://127.0.0.1:9000/router 时候,服务提供着实例 8080被优先访问到
测试自定义负载均衡器,配置实现实现
1,在配置文件中使用配置类
## ribbon自定义规则类 polices: ribbon: NFLoadBalancerRuleClassName: com.bw.rule.MyRule
2,测试
相关文章推荐
- springCloud 学习笔记3 feign 实现客户端负载均衡
- Spring Cloud Ribbon实现客户端负载均衡的示例
- spring cloud Ribbon 客户端负载均衡的学习(1)
- 客户端实现负载均衡:springCloud Ribbon的使用
- Spring Cloud 入门教程(五): Ribbon实现客户端的负载均衡
- 详解spring cloud中使用Ribbon实现客户端的软负载均衡
- Spring Cloud+Eureka+Ribbon实现客户端负载均衡
- Spring Cloud Ribbon实现客户端负载均衡的方法
- Spring Cloud 入门教程(五): Ribbon实现客户端的负载均衡
- SpringCloud客户端负载均衡Ribbon
- Spring Cloud微服务开发笔记5——Ribbon负载均衡策略规则定制
- Spring Cloud(二)客户端负载均衡Ribbon
- spring cloud 之 客户端负载均衡Ribbon深入理解
- 客户端负载均衡Ribbon之一:Spring Cloud Netflix负载均衡组件Ribbon介绍
- 第四章:客户端负载均衡:Spring Cloud Ribbon(Spring cloud微服务实战)
- 客户端负载均衡 Spring Cloud Ribbon
- Spring Cloud Ribbon客户端负载均衡
- 【SpringCloud】Netflix源码解析之Ribbon:负载均衡策略的定义和实现
- 04.Spring Cloud学习笔记之客户端负载均衡组件Ribbon
- Spring Cloud 客户端负载均衡之Ribbon(三)