码迷,mamicode.com
首页 > 编程语言 > 详细

Spring Cloud RestTemplate学习

时间:2018-11-05 23:35:07      阅读:354      评论:0      收藏:0      [点我收藏+]

标签:XML   get   注册   port   autowired   区域   eureka   文件中   部署   

通过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学习

标签:XML   get   注册   port   autowired   区域   eureka   文件中   部署   

原文地址:https://www.cnblogs.com/lyx-me/p/9912131.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!