A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

2.1.2 Ribbon测试
Spring Cloud引入Ribbon配合 restTemplate 实现客户端负载均衡。Java中远程调用的技术有很多,如: webservice、socket、rmi、Apache HttpClient、OkHttp等,互联网项目使用基于http的客户端较多,本项目使 用OkHttp。  
1、在客户端添加Ribbon依赖: 这里在课程管理服务配置ribbon依赖
[AppleScript] 纯文本查看 复制代码
<dependency>  
   <groupId>org.springframework.cloud</groupId>   
  <artifactId>spring‐cloud‐starter‐ribbon</artifactId> </dependency> <dependency>  
   <groupId>com.squareup.okhttp3</groupId>  
   <artifactId>okhttp</artifactId> </dependency>

由于依赖了spring-cloud-starter-eureka,会自动添加spring-cloud-starter-ribbon依赖

10.jpg
2、配置Ribbon参数
这里在课程管理服务的application.yml中配置ribbon参数

[AppleScript] 纯文本查看 复制代码
ribbon:   MaxAutoRetries:
 2 #最大重试次数,当Eureka中可以找到服务,但是服务连不上时将会重试   MaxAutoRetriesNextServer: 
3 #切换实例的重试次数  
 OkToRetryOnAllOperations: false  #对所有操作请求都进行重试,如果是get则可以,如果是post,put等操作 没有实现幂等的情况下是很危险的,所以设置为false  
 ConnectTimeout: 5000  #请求连接的超时时间   ReadTimeout: 6000 #请求处理的超时时间 

3、负载均衡测试 1)启动两个cms服务,注意端口要不一致
启动完成观察Eureka Server的服务列表

11.jpg
2)定义RestTemplate,使用@LoadBalanced注解
在课程管理服务的启动类中定义RestTemplate

[AppleScript] 纯文本查看 复制代码
 
ribbon:   MaxAutoRetries: 2 #最大重试次数,当Eureka中可以找到服务,但是服务连不上时将会重试 
  MaxAutoRetriesNextServer: 3 #切换实例的重试次数 
  OkToRetryOnAllOperations: false  #对所有操作请求都进行重试,如果是get则可以,如果是post,put等操作 没有实现幂等的情况下是很危险的,所以设置为false
   ConnectTimeout: 5000  #请求连接的超时时间   ReadTimeout: 6000 #请求处理的超时时间    
@Bean @LoadBalanced public RestTemplate restTemplate() {   
  return new RestTemplate(new OkHttp3ClientHttpRequestFactory()); } 

3)测试代码 在课程管理服务工程创建单元测试代码,远程调用cms的查询页面接口:

[AppleScript] 纯文本查看 复制代码
 //负载均衡调用  
   @Test   
  public void testRibbon() {      
   //服务id     
    String serviceId = "XC‐SERVICE‐MANAGE‐CMS";   
      for(int i=0;i<10;i++){      
       //通过服务id调用    
         ResponseEntity<CmsPage> forEntity = restTemplate.getForEntity("http://" + serviceId  + "/cms/page/get/5a754adf6abb500ad05688d9", CmsPage.class);             CmsPage cmsPage = forEntity.getBody();       
      System.out.println(cmsPage);       
  }   
  }

4)负载均衡测试 添加@LoadBalanced注解后,restTemplate会走LoadBalancerInterceptor拦截器,此拦截器中会通过 RibbonLoadBalancerClient查询服务地址,可以在此类打断点观察每次调用的服务地址和端口,两个cms服务会轮 流被调用。

12.jpg

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马