在【Spring Cloud学习笔记之微服务实现(一)】中,我们实现了微服务,但是在实际的项目中,我们需要实现动态访问微服务,在此之前,已经介绍了Spring Cloud和Eureka,并且实现了eureka注册中心。现在我们实现一下动态调用。
注:注册中心的服务在此期间保持启动状态。
修改商品微服务的实现
首先修改配置信息:
我们增加Spring Cloud的依赖管理和Eureka服务的依赖,pom.xml:
4.0.0
com.test
MySpringCloudProject01
1.0-SNAPSHOT
1.8
org.springframework.boot
spring-boot-starter-parent
1.5.14.RELEASE
org.springframework.boot
spring-boot-starter-web
org.springframework.cloud
spring-cloud-starter-eureka-server
org.springframework.cloud
spring-cloud-dependencies
Edgware.SR4
pom
import
我们修改一下配置文件application.properties:
server.port=8081
#应用名称
spring.application.name=itcast-microservice-item
#是否需要将自己注册到注册中心中,默认值true
eureka.client.register-with-eureka=true
#是否从注册中心获取注册信息,默认值true
eureka.client.fetch-registry=false
#客户端和服务端进行交互的地址
eureka.client.service-url.defaultZone=http://127.0.0.1:8088/eureka/
#将自己的ip地址注册到Eureka服务中
eureka.instance.ip-address=true
然后我们修改相关代码:
ItemController.java:
@RestController
public class ItemController {
@Autowired
private ItemService itemService;
@GetMapping(value = "/item/{id}")
public Item queryItemById(@PathVariable(name = "id") Long id){
return itemService.queryItemById(id);
}
}
App.java:
@EnableDiscoveryClient //声明这是Eureka的客户端
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
其余代码不需要修改。修改完成后我们启动App,然后刷新注册中心,可以看到服务注册到了注册中心:
修改订单微服务的实现
首先修改配置信息:
我们增加Spring Cloud的依赖管理和Eureka服务的依赖,我们排除了Eureka Server的一部分配置,因为我们在项目中引入了Eureka Server的依赖,会破坏springMVC的配置,会导致响应变成xml而不是json。pom.xml:
4.0.0
com.test
MySpringCloudProject02
1.0-SNAPSHOT
1.8
org.springframework.boot
spring-boot-starter-parent
1.5.14.RELEASE
org.springframework.boot
spring-boot-starter-web
org.springframework.cloud
spring-cloud-starter-eureka-server
com.fasterxml.jackson.dataformat
jackson-dataformat-xml
org.springframework.cloud
spring-cloud-dependencies
Edgware.SR4
pom
import
application.properties:
server.port=8082
itcast.item.url=http://localhost:8081/item/
#应用名称
spring.application.name=itcast-microservice-order
#是否需要将自己注册到注册中心中,默认值true
eureka.client.register-with-eureka=false
#是否从注册中心获取注册信息,默认值true
eureka.client.fetch-registry=false
#客户端和服务端进行交互的地址
eureka.client.service-url.defaultZone=http://127.0.0.1:8088/eureka/
修改相关代码:
ItemService.java:
@Service
public class ItemService {
@Autowired
private RestTemplate restTemplate;
@Autowired
private DiscoveryClient discoveryClient;
public Item queryItemById(Long id){
String serviceId = "itcast-microservice-item";
List instances = discoveryClient.getInstances(serviceId);
if (instances == null || instances.isEmpty()){
return null;
}
ServiceInstance serviceInstance = instances.get(0);
//拼接服务地址
String url = "http://" + serviceInstance.getHost() + ":" + serviceInstance.getPort();
Item item = restTemplate.getForObject(url + id, Item.class);
return item;
}
}
App.java:
@EnableDiscoveryClient
@SpringBootApplication
public class App {
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
其余代码不需要修改。修改完成后我们启动App,然后在浏览器中输入网址: http://localhost:8082/order/12345 ,可以看到如下执行结果:
这样我们就实现了将服务注册到Eureka注册中心,然后动态调用微服务。
注:以上为【黑马程序员|java进阶教程Spring Cloud微服务解决方案】视频的学习笔记,侵删。