Spring Cloud中服务间调用有两种restful调用方式,一种是Resttemplate
,另一种是Feign。
实现RestTemplate调用方式
1、使用LoadBalance注解,将restTemplate作为一个bean配置
@Component
public class RestTemplateConfig {
//使用LoadBalance注解,将restTemplate作为一个bean配置
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return restTemplate();
}
}
2、在controller中将RestTemplate引入
@RestController
public class ClientController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("/getProductMsg")
public String getProductMsg(){
//第三种方式(利用@LoadBalance注解,可在restTemplate里使用PRODUCT应用名字,来访问PRODUCT的服务)
String response = restTemplate.getForObject("http://PRODUCT/msg",String.class);
return response;
}
实现Feign调用方式
1、增加依赖
<!-- 添加feign声明式webservice client -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
2、在启动主类上加注解@EnableFeignClients
3、新建一个Client,来调用product的接口,声明调用呢些方法
//表示访问product的接口
//@FeignClient(name="product")
public interface ProductClient {
@GetMapping("/msg") //调用product的这个接口
String productMsg(); //返回productMsg
}
4、controller
@RestController
public class ClientController {
//Feign的使用方法
@Autowired
private ProductClient productClient;
@GetMapping("/getProductMsg")
public String getProductMsg(){
//Feign的使用方法
String response = productClient.productMsg();
return response;
}
}
Ribbon,负载均衡
Eureka属于客户端发现,客戶端向Eureka Serve拉取已注册的可用服务信息,然后根据负载均衡策略,直接命中哪台服务器提供服务,这些操作都是在客户端完成,不需要服务端,spring cloud中的客户端负载均衡器就是Ribbon组件,Restemplate、Feign、Zuul都使用到了Ribbon,只要使用@template和@FeignClient时,ribbon就会自动使用。