博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringCloud(二)之Ribbon的实现负载均衡的基本应用
阅读量:5141 次
发布时间:2019-06-13

本文共 2857 字,大约阅读时间需要 9 分钟。

一 Ribbon简介   
 Ribbon是Netflix发布的负载均衡器,它是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。
Spring Cloud Ribbon虽然只是一个工具类框架,它不像服务注册中心、配置中心、API网关那样需要独立部署,但是它几乎存在于每一个Spring Cloud构建的微服务和基础设施中。因为微服务间的调用,
API网关的请求转发等内容,实际上都是通过Ribbon来实现的,包括后续我们将要介绍的Feign,它也是基于Ribbon实现的工具。所以,对Spring Cloud Ribbon的理解和使用,对于我们使用Spring Cloud来构建微服务非常重要。
在Spring Cloub 项目中  使用  feign 的更多,默认集成了ribbon,写起来更加思路清晰和方便,
下一篇 讲feign。
二 新建order_service项目
1 为RestTemplate添加注解@LoadBalanced
package unicom.com.cn.order_service; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.context.annotation.Bean; import org.springframework.web.client.RestTemplate; @SpringBootApplication @EnableFeignClients public class OrderServiceApplication {
public static void main(String[] args) {
SpringApplication.run(OrderServiceApplication.class, args); } @Bean @LoadBalanced public RestTemplate restTemplate() {
return new RestTemplate(); } } 2.application.yml 的配置(注册中心一定要启动 Eureka)
server:   port: 8781 eureka:   client:     serviceUrl:     #在此指定服务注册中心地址       defaultZone: http://localhost:8761/eureka/ #在此指定服务的名字 spring:   application:     name: order-service 3.对应业务中的调用
@Service public class ProductOrderServiceImpl implements ProductOrderService {
// 方式一 @Autowired private RestTemplate restTemplate; @Override public ProductOrder save(int userId, int productId) {
Map
productMap = restTemplate.getForObject("http://product-service/api/v1/product/find?id="+productId, Map.class); ProductOrder productOrder = new ProductOrder(); productOrder.setCreateTime(new Date()); productOrder.setUserId(userId); productOrder.setTradeNo(UUID.randomUUID().toString()); productOrder.setProductName(productMap.get("name").toString()); productOrder.setPrice(Integer.parseInt(productMap.get("price").toString())); return productOrder; } }
三 测试
1 启动eureka-server微服务
2 启动product_service微服务(和上面一样在配置文件中修改下端口就行8771)
3 启动product_service微服务(和上面一样在配置文件中修改下端口就行8772)
4启动order_service微服务(8781)
 
  测试结果

 

注册成功。

调用 order_service 中的方法是否成功

测试结果(多测试几次可以得出ribbon默认采用轮询的方式进行负载均衡)

 

四 修改ribbon默认采用轮询的方式(随机)

 自定义负载均衡策略:http://cloud.spring.io/spring-cloud-static/Finchley.RELEASE/single/spring-cloud.html#_customizing_the_ribbon_client_by_setting_properties

在调用方的yml 文件中加上:

#自定义负载均衡策略(随机)

  product-service:
    ribbon:
      NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

5,策略选择:

1、如果每个机器配置一样,则建议不修改策略 (推荐)
2、如果部分机器配置强,则可以改为 WeightedResponseTimeRule

转载于:https://www.cnblogs.com/xiaowangbangzhu/p/10396612.html

你可能感兴趣的文章
JSP—page指令
查看>>
NOIP的基本模板合集(2)
查看>>
openscales2.2 的初始缩放等级
查看>>
hdu 4310 Hero
查看>>
mac中使用vi修改二进制文件
查看>>
css3 box-sizing属性
查看>>
copy_from_user 详解
查看>>
spring-AOP(面向切面编程)-注解方式配置
查看>>
Sping
查看>>
UI design principle android 系统根据不同屏幕密度选择不同图片
查看>>
GridView 动态列上方添加相应的Combox等控件
查看>>
申请开发者账号
查看>>
oracle启动
查看>>
c++模板学习
查看>>
【转】MySQL Event
查看>>
[转]html5监听任何App自带返回键javascript事件
查看>>
mongodb数据备份与还原
查看>>
通俗理解LDA主题模型
查看>>
回射服务器-多路复用 select 01 (阻塞)
查看>>
分享吉林大学机械科学与工程学院,zhao jun 博士的Halcon学习过程及知识分享
查看>>