SpringCloud中服务之间RPC调用主要有RestTemplate+Ribbon和Feign客户端调用
RestTemplate+Ribbon所需的依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
使用RestTemplate调用需在启动类加注解加载
@LoadBalanced
@Bean
RestTemplate restTemplate() {
return new RestTemplate();
}
在业务层中调用方式
@Service
public class OrderService {
@Autowired
private RestTemplate restTemplate;
public String call() {
return this.restTemplate.getForObject("http://service-user/api/user/home", String.class);
}
}
这里getForObject第一个参数调用服务接口url地址,即 应用服务名 + 接口api相对地址,第二个参数为返回结果类型
使用Feign客户端调用其他服务需引入Feign依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
启动类加 @EnableFeignClients 注解
然后写个对应的接口类
@FeignClient(value="service-user")
public interface UserFeign {
@RequestMapping(value="/api/user/home")
String home();
}
@FeignClient的value是在application.yml中定义的其他服务的服务名
Controller接入层中使用Feign调用
@Autowired
UserFeign userFeign;
@RequestMapping(value="/user_home")
@ResponseBody
public String userHome() {
return userFeign.home();
}