存在多个服务时,通过注册中心实现服务间的调用。
1.搭建订单服务工程
在父工程microservice-springcloud中,创建Maven子模块microservice-eureka-order。
<1>在pom.xml中,添加spring-cloud-starter-eureka依赖
<2>编写配置文件
<3>创建订单实体类
<4>创建订单控制器类
2.编写用户服务功能
<1>在microservice-eureka-user工程的引导类中创建spring实例,用于访问Rest服务的客户端实例。
<2>创建用户控制类
3.启动服务应用,测试服务调用
详情:
1.搭建订单服务工程
在父工程microservice-springcloud中,创建Maven子模块microservice-eureka-order。
<1>在pom.xml中,添加spring-cloud-starter-eureka依赖
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
<2>编写配置文件
server:
port:7900 #指定该Eureka实例的端口号
eureka:
instance:
prefe-ip-address:true #是否显示主机的IP
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://registry:8761/eureka/ #指定Eureka服务端地址
spring:
application:
name:microservice-eureka-order #模块的名称
<3>创建订单实体类。创建com.itheima.spring.po包,并在包中创建订单实体类Order。
public class order {
private String id;
private Double price;
private String receivePhone;
private String receiveAddress;
private String receiverName;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
public String getReceiverName() {
return receiverName;
}
public void setReceiverName(String receiverName) {
this.receiverName = receiverName;
}
public String getReceiveAddress() {
return receiveAddress;
}
public void setReceiveAddress(String receiveAddress) {
this.receiveAddress = receiveAddress;
}
public String getReceivePhone() {
return receivePhone;
}
public void setReceivePhone(String receivePhone) {
this.receivePhone = receivePhone;
}
@Override
public String toString(){
return "Order [id="+ id +",price="+price+","+"receiverName="+ receiverName +","+
"receiveAddress="+ receiveAddress +",receivePhone="+ receivePhone +"]";
}
}
<4>创建订单控制器类
@RestController
public class OrderController {
/**
* 通过id查订单
*/
@GetMapping("/order/{id}")
public String findOrderById(@PathVariable String id){
Order order = new order();
order.setId("123");
order.setPrice(23.5);
order.setreceiverAddress("beijing");
order.setreceiverName("xioaqiang");
order.setreceiverPhone("123456879");
return order.toString();
}
}
<5>在引导类中加入@EnableEurekaClient
2.编写用户服务功能
<1>在microservice-eureka-user工程的引导类中创建spring实例,用于访问Rest服务的客户端实例。
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
RestTemplate是spring提供的用于访问Rest服务的客户端实例,它提供了多种方便快捷访问远程Http服务的方法,能够大大提高客户端的编写效率。
<2>创建用户控制类,并在类中编写查询方法。
@RestController
public class UserController{
@Autowired
private RestTemplate restTemplate;
/*
*查找与用户相关的订单
*/
@Getmapping("findOrdersByUser/{id}")
public String findOrdersByUser(@PathVariable String id){
//假设用户只有一个订单,并且订单id为132
int oid = 123;
return this.restTemplate
.getForObject("http://localhost:79000/order/"+oid,String.class);
}
}
3.启动服务应用,测试服务调用
通过浏览器访问地址http:localhost:8000/findOrderByUser/1(1表示用户id)。