RestTemplate介绍
- RestTemplate是Spring Cloud访问Restful API的请求对象
- RestTemplate与HttpClient、OKHttp职能类似
@LoadBalanced注解
- @LoadBalanced是Ribbon提供的客户端负载均衡注解
- 通常RestTemplate与@LoadBalanced联合使用
创建订单服务
Spring Initializr
web->Spring Web
Spring Cloud Discovery -> Eureka Discover Client
Spring Cloud Routing -> Ribbon
确保pom.xml引入ribbon
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
appliaction.yml
spring:
application:
name: member-service
eureka:
client:
service-url:
defaultZone:
http://localhost:8761/eureka
入口类注入RestTemplate
@SpringBootApplication
@EnableEurekaClient
public class MemberServiceApplication {
@Bean //注入
@LoadBalanced //Ribbon负载均衡,默认轮询
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
业务开发,服务间通信
@Controller
public class MemberController {
@Resource
private RestTemplate restTemplate;
@GetMapping("/borrow")
@ResponseBody
public String borrow(String sn){
/*
RestTemplate负载均衡格式要求:
http://微服务id/webapi地址
*/
Book book = restTemplate.getForObject("http://book-service/bsn?sn=" + sn, Book.class);
return book.getName() + ":" + book.getDesc() + "图书借阅成功";
}
}
业务实体Book与JSON属性对应即可
public class Book {
private String sn;
private String name;
private String desc;
public String getSn() {
return sn;
}
public void setSn(String sn) {
this.sn = sn;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}