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.okhttp 3 < / groupId >
< artifactId > okhttp < / artifactId > < / dependency >
|
由于依赖了spring-cloud-starter-eureka,会自动添加spring-cloud-starter-ribbon依赖
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的服务列表
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 OkHttp 3 ClientHttpRequestFactory ( ) ) ; }
|
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服务会轮 流被调用。