负载均衡是指将负载分摊到多个执行单元上,常见的负载均衡有两种方式:一种是独立进程单元,通过负载均衡策略,将请求转发到不同的执行单元上,例如 Ngnix;另一种是将负载均衡逻辑以代码的形式封装到服务消费者的客户端上,服务消费者客户端维护了一份服务提供者的信息列表,有了信息列表,通过负载均衡策略将请求分摊给多个服务提供者,从而达到负载均衡的目的,例如 Ribbon

新建 spring-cloud-eureka-ribbon-client Module

pom

<parent>
<artifactId>spring-cloud-parent</artifactId>
<groupId>com.karonda</groupId>
<version>1.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion> <artifactId>spring-cloud-eureka-ribbon-client</artifactId> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</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>
</dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

application.yml

server:
port: 8021 eureka:
client:
service-url:
defaultZone: http://localhost:8001/eureka/ spring:
application:
name: ribbon-client

启动类

@EnableEurekaClient
@SpringBootApplication
public class EurekaRibbonClientApp {
public static void main(String[] args){
SpringApplication.run(EurekaRibbonClientApp.class, args);
}
}

RestTemplate

@Configuration
public class RibbonConfig {
@Bean
@LoadBalanced // 开启负载均衡功能
RestTemplate restTemplate(){
return new RestTemplate();
}
}

Service

@Service
public class RibbonService {
@Autowired
RestTemplate restTemplate; public String hi(String name){
return restTemplate.getForObject("http://eureka-client/hi?name=" + name, String.class);
}
}

Controller

@RestController
public class RibbonController {
@Autowired
RibbonService ribbonService; @GetMapping("/hi")
public String hi(@RequestParam String name){
return ribbonService.hi(name);
}
}

测试

  1. 启动 eureka-server
  2. 启动 eureka-client (两个实例:一个 8011 端口,一个 8012 端口)
  3. 启动 eureka-ribbon-client

多次访问 http://localhost:8021/hi?name=victor 可以看到 8011 和 8012 端口交替出现

完整代码:GitHub

本人 C# 转 Java 的 newbie, 如有错误或不足欢迎指正,谢谢

最新文章

  1. 第一次在linux上登录博客
  2. Java深入 - Java 内存分配和回收机制
  3. July 12th, Week 29th Tuesday, 2016
  4. Java学习-023-Properties 类 XML 配置文件读取及写入源代码
  5. fuck&#39;em
  6. Happy Number——LeetCode
  7. 微软GitHub组织
  8. Java程序执行Linux命令
  9. codeforces 374D. Inna and Sequence 线段树
  10. 第一次接触Axure
  11. PHP文件操作整理
  12. pyhton课堂随笔-基本画图
  13. poj1002总结
  14. (转)php读取文件使用redis的pipeline导入大批量数据
  15. AngularJS实战之cookie的读取
  16. 微信小游戏 4M升8M分包加载
  17. VirtualBox虚拟机增加CentOS根目录容量 LVM扩容
  18. ManualResetEvent
  19. [APIO2018] Duathlon 铁人两项 圆方树,DP
  20. go语言基础之同级目录

热门文章

  1. Linux系统下安装配置JDK(rpm方式及tar.gz方式)
  2. ansible快速部署cassandra3集群
  3. layui导航
  4. stm32与地磁传感器HMC5883L
  5. 八位“Booth二位乘算法”乘法器
  6. 性能工具-io工具
  7. c++ priority_queue应用(重要)
  8. 压缩css与js
  9. rgw配置删除快速回收对象
  10. Go 语言设计哲学之四:项目布局-你如何设计项目结构