1. 程式人生 > >Spring Cloud學習筆記之微服務實現(二)(Spring Boot+Spring Cloud+IDEA)

Spring Cloud學習筆記之微服務實現(二)(Spring Boot+Spring Cloud+IDEA)

在【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微服務解決方案】視訊的學習筆記,侵刪。