1.RestTemplate

spring提供的,专门用来做Rest API近程调用的工具,它相似于HttpClient,是执行http申请的工具。RestTemplate对Rest API做了高度封装,提供了非常简单的办法:
getForObject(url,转换类型,提交的参数数据),例如:return restTemplate.getForObject("http://item-service/{1}", JsonResult.class, orderId);
postForObject(url,协定体数据(头、体的体),转换的类型)。例如:@PostMapping("/item-service/decreaseNumber")public JsonResult<?> decreaseNumber(@RequestBody List<Item> items){    return restTemplate.postForObject("http://item-service/decreaseNumber",items,JsonResult.class);}

1.1近程调用

1.  新建模块: sp06-ribbon2.  增加依赖:web、eureka-client、ribbon、sp01    3.  yml:app.name、port、eureka地址4.  新建 RestTemplate 实例。在启动类中。如下:
@Beanpublic RestTemplate restTemplate(){   //应用申请工厂来设置超时参数 SimpleClientHttpRequestFactory f = new SimpleClientHttpRequestFactory();   f.setConnectTimeout(1000);   f.setReadTimeout(1000);   return new RestTemplate(f);}
5.  RibbonController 中,应用 RestTemplate 调用 2,3,4 我的项目

2.Ribbon

对RestTemplate性能进行增强,增加了负载平衡和重试。

2.1负载平衡

增加集群:Item8001和Item8002

对RestTemplate增加注解@EnableBalanced,对它进行加强。


调用地址,给成服务id(不是写死的端口号了)

2.2重试(重试不是必须的,看零碎要求)

2.2.1增加spring-retry依赖(不能用插件,间接写,而后又提醒)

2.2.2配置重试参数,没有提醒(只能手写在配置文件里)

ribbon:  MaxAutoRetries: 1  MaxAutoRetriesNextServer: 2

2.2.3在06-ribbon的启动类中,应用申请工厂来设置超时参数

@Beanpublic RestTemplate restTemplate(){   //应用申请工厂来设置超时参数 SimpleClientHttpRequestFactory f = new SimpleClientHttpRequestFactory();   f.setConnectTimeout(1000);   f.setReadTimeout(1000);   return new RestTemplate(f);}
setConnectTimeout-连贯超时工夫setReadTimeout-曾经连贯,并且曾经发送申请,承受响应时的超时工夫这两个超时工夫,不能再yml中设置,只能应用java代码设置

2.2.4在itemController中模仿超时失败

if(Math.Random()<0.9){//90%的概率执行提早    //随机提早0-5秒    long t = new Random().nextInt(5000);    System.out.println("提早"+t);    Thread.sleep(t);    }

2.2.5把sp05-eureka配置文件复制两份:

application-eureka1.yml 1连贯2
eureka:  client:    register-with-eureka: true fetch-registry: true #1连贯2 service-url:      defaultZone: http://eureka2:2002/eureka  instance:    #集群中辨别不同服务器主机名 hostname: eureka1
application-eureka2.yml 2连贯1
eureka:  client:    register-with-eureka: true fetch-registry: true #2连贯1 service-url:      defaultZone: http://eureka1:2001/eureka  instance:    #集群中辨别不同服务器主机名 hostname: eureka2