一. 微服务远程调用方式之Ribbon
思考:如何实现远程调用?
1.1 使用Ribbon来实现远程调用(实现步骤及代码)
01.在启动类配置文件中添加RestTemplate的bean
02.使用restTemplate.getObject()获取远程接口的信息.
@Bean
@LoadBalanced//加了此注解后就可以做负载均衡
public RestTemplate restTemplate(){
return new RestTemplate();
}
Service业务层
@Autowired
private RestTemplate restTemplate;
//PRODUCT-SERVER某服务名称. 参数1:被调用服务接口地址 参数2:被调用某商品实体Product.class(例:下单服务调用商品服务)
Product product = restTemplate.getObject("http://PRODUCT-SERVER/get?id=" + productId, Product.class);
1.2 使用Ribbon实现负载均衡
01.请求地址不写具体ip和端口,而是使用远程服务id
02.在RestTemplate的bean上贴上@LoadBalanced注解
1.3 负载均衡策略调整(配置)
#注意:服务的名称需要和代码中的服务名称一致,不然是修改不了负载均衡策略.
PRODUCT-SERVER:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule
二. Spring中可以使用RestTemplate来操作REST资源
主要包含以下几个方法:
RestTemplate有点类似于一个WebService客户端请求的模版,可以调用http请求的WebService,并将结果转换成相应的对象类型。
getForEntity(),getForObject(),发送HTTP GET请求,getForEntity()返回的是ResponseEntity对象,里面包含响应实体对象及响应状态码,而getForObject()则直接返回响应实体对象;
postForEntity(),postForObject(),发送HTTP POST请求,postForEntity()返回的是ResponseEntity对象,里面包含响应实体对象及响应状态码,而postForObject()则直接返回响应实体对象;
put(),发送HTTP PUT请求;
delete(),发送HTTP DELETE请求;
exchange(),可以发送GET、POST、PUT和DELETE中的任意一种请求,同时还可以自定义请求头。