Java的新项目学成在线笔记-day9(五)

2.1.2 Ribbon测试 
Spring Cloud引入Ribbon配合 restTemplate 实现客户端负载均衡。Java中远程调用的技术有很多,如: webservice、socket、rmi、Apache HttpClient、OkHttp等,互联网项目使用基于http的客户端较多,本项目使 用OkHttp。  
1、在客户端添加Ribbon依赖: 这里在课程管理服务配置ribbon依赖

[AppleScript] 纯文本查看 复制代码

?

1

2

3

4

5

<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依赖

Java的新项目学成在线笔记-day9(五) 
2、配置Ribbon参数
这里在课程管理服务的application.yml中配置ribbon参数
 

[AppleScript] 纯文本查看 复制代码

?

1

2

3

4

5

ribbon:   MaxAutoRetries:

 2 #最大重试次数,当Eureka中可以找到服务,但是服务连不上时将会重试   MaxAutoRetriesNextServer:

3 #切换实例的重试次数 

 OkToRetryOnAllOperations: false  #对所有操作请求都进行重试,如果是get则可以,如果是post,put等操作 没有实现幂等的情况下是很危险的,所以设置为false 

 ConnectTimeout: 5000  #请求连接的超时时间   ReadTimeout: 6000 #请求处理的超时时间


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

Java的新项目学成在线笔记-day9(五) 
2)定义RestTemplate,使用@LoadBalanced注解 
在课程管理服务的启动类中定义RestTemplate
 

[AppleScript] 纯文本查看 复制代码

?

1

2

3

4

5

6

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] 纯文本查看 复制代码

?

01

02

03

04

05

06

07

08

09

10

11

//负载均衡调用 

  @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服务会轮 流被调用。

Java的新项目学成在线笔记-day9(五)

上一篇:Day9:尝试连接绑定数据与API


下一篇:Day9, 进程、线程、协程篇