Spring提供了一个RestTemplate模板工具类,对基于Http的客户端进行了封装,并且实现了对象与json的序列化和反序列化,非常方便。RestTemplate并没有限定Http的客户端类型,而是进行了抽象,目前常用的3种都有支持:
- HttpClient
- OkHttp
- JDK原生的URLConnection(默认的)
在启动类中配置
@SpringBootApplication
@EnableDiscoverClient
public class UserConsumerDemoApplication{
@Bean
@LoadBanlanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
public static void main(String[] args){
SpringApplication.run(UserConsumerDemoApplication.class);
}
}
通过调用服务名称调用
@Service
public class UserService{
@Autowired
private RestTemplate restTemplate;
public User queryUserById(Long id){
//地址直接写服务名称即可
String baseUrl = "http://user-service/user/";
User user = restTemplate.getForObject(baseUrl+id,User.class);
return user;
}
}
Ribbon默认的负载均衡策略是简单的轮询,在刚才的源码中我们看到拦截中是使用RibbonLoadBalanceClient来进行负载均衡的
fallback
引入Hystrix依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
调用方法名上加@HystrixCommand(fallback="queryUserByIdFallback")
queryUserByIdFallback方法返回值,参数与调动方法一样,通用时不写参数。
网友评论