Spring Cloud學習筆記之微服務實現(二)(Spring Boot+Spring Cloud+IDEA)
阿新 • • 發佈:2018-11-09
在【Spring Cloud學習筆記之微服務實現(一)】中,我們實現了微服務,但是在實際的專案中,我們需要實現動態訪問微服務,在此之前,已經介紹了Spring Cloud和Eureka,並且實現了eureka註冊中心。現在我們實現一下動態呼叫。
注:註冊中心的服務在此期間保持啟動狀態。
修改商品微服務的實現
首先修改配置資訊:
我們增加Spring Cloud的依賴管理和Eureka服務的依賴,pom.xml:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.test</groupId> <artifactId>MySpringCloudProject01</artifactId> <version>1.0-SNAPSHOT</version> <properties> <java.version>1.8</java.version> </properties> <!-- 配置資訊 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.14.RELEASE</version> </parent> <dependencies> <!-- 加入web的支援 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 匯入Eureka服務的依賴 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency> </dependencies> <!-- 匯入Spring Cloud的依賴管理 --> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Edgware.SR4</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> </project>
我們修改一下配置檔案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:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.test</groupId>
<artifactId>MySpringCloudProject02</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<java.version>1.8</java.version>
</properties>
<!-- 配置資訊 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.14.RELEASE</version>
</parent>
<dependencies>
<!-- 加入web的支援 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 匯入Eureka服務的依賴 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
<!-- 排除eureka server的一些配置 -->
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<!-- 匯入Spring Cloud的依賴管理 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Edgware.SR4</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
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<ServiceInstance> 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微服務解決方案】視訊的學習筆記,侵刪。