Spring Cloud RestTemplate学习

Posted lyx-me

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Cloud RestTemplate学习相关的知识,希望对你有一定的参考价值。

通过RestTemplate进行服务调用

在RestTemplate基础上加上负载均衡:

Ribbon是一个基于HTTP和TCP的负载均衡工具,可以让我们轻松的将面向服务的Rest模板请求自动转换成客户端负载均衡的服务调用。它不像注册中心、配置中心和网关那样需要独立部署,它几乎存在于每一个微服务应用中,因为微服务间的调用、网关的请求转发都需要用到ribbon。
1、在pom.xml文件中加入Ribbon依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>

2、创建实例
可以在自定义的配置类中创建,但通常会放在入口类处(入口类本身也是一个配置类,因为@SpringBootApplication包含了@SpringBootConfiguration,@SpringBootConfiguration包含@Configuration),因为RestTemplate是一个与业务无关的基础bean。
@Bean
//负载均衡
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();
}
3、调用服务

@RestController
public class ConsumerController {
@Autowired
RestTemplate restTemplate;
@RequestMapping(value="/userInfo", method = RequestMethod.GET)
public String userInfo(@RequestParam String name, @RequestParam String age) {
//如果是post请求,可以用postForEntity
Map<String , Object> params = new HashMap<String , Object>();
params.put("name", name);
params.put("age", age);
return restTemplate.getForEntity("
http://USERINFO-SERVICE/userInfo?name={name}&age={age}",
String.class,params).getBody();
}
}

可以配置负载均衡策略,@Configuration ribbonRule @RibbonClients(defaultConfiguration={RibbonConfiguration.class}),也可以直接用@LoadBalanced默认负载均衡
默认是简单轮询负载均衡(RoundRobin),yml文件也可以配置规则,NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
1、简单轮询负载均衡(RoundRobin) 2:随机负载均衡 (Random)3:加权响应时间负载均衡 (WeightedResponseTime) 4:区域感知轮询负载均衡(ZoneAvoidanceRule)
@Primary
@Bean(name="lbcRestTemplate")
public RestTemplate restTemplate(){
return new RestTemplate();
}

@Autowired
@Qualifier(value = "lbcRestTemplate")
private RestTemplate lbcRestTemplate;

ServiceInstance serviceInstance = loadBalancerClient.choose("service-getScore");
String url = "http://" + serviceInstance.getHost() + ":" + serviceInstance.getPort() + "/getScore/"+id;
lbcRestTemplate.getForEntity(url,String.class).getBody();

服务提供者:服务的被调用方,服务注册

eureka.client.service-url.defaultZone=http://localhost:8005/eureka/,http://localhost:8006/eureka/ 同时启动8000,8001两个端口
服务消费者:服务注册eureka.client.service-url.defaultZone=http://localhost:8005/eureka/,http://localhost:8006/eureka/ 同时启动8002,8003两个端口
eureka集群:启动8005,8006两个端口
























































以上是关于Spring Cloud RestTemplate学习的主要内容,如果未能解决你的问题,请参考以下文章

Spring Cloud Alibaba Sentinel对RestTemplate的支持

Spring Cloud RestTemplate学习

Spring Cloud - 在 RestTemplate 中重试工作?

Spring Cloud 数据流 - 休息客户端 - 覆盖 RestTemplate

Spring Cloud Feign:Feign与RestTemplate相比是不是足够高效?

SpringCloud - Spring Cloud Alibaba 之 Sentinel DashBoard ;RestTemplate;OpenFeign