1. 程式人生 > >SpringCloud實戰之初級入門(二)— 服務註冊與服務調用

SpringCloud實戰之初級入門(二)— 服務註冊與服務調用

com turn ace 如何使用 method png 描述 cal 愛奇藝

目錄

  • 1.環境介紹
  • 2.服務提供
    • 2.1 創建工程
    • 2.2 修改配置文件
    • 2.3 修改啟動文件
    • 2.5 親測註意事項
  • 3.服務調用
    • 3.1 創建工程
    • 3.2 修改配置文件
    • 3.3 修改啟動文件
    • 3.4 創建第一個微服務調用
  • 4.結語

1.環境介紹

接上一篇(SpringCloud實戰之初級入門(一)— eureka註冊中心),我們講到了註冊中心的高可用,集群,這篇我們講如何服務如何註冊在eureka上,如何使用Feign調用服務。

  1. 繼續使用上一篇的文章中的mirco-service-eureka工程,為了節約演示環境,我們去掉集群部署,只啟動一臺eureka實例。
  2. 修改eureka-server-node-1-test.yml
    中的defaultZone為http://localhost:9001/eureka/
  3. 通過修改的“eureka-server-node-1”名稱,debug啟動本實例。

2.服務提供

2.1 創建工程

為了照顧不同段位朋友的感受,像這種簡單的創建工程過程就不再貼圖了,如有不清楚的地方,請看上篇文章。創建一個名為"mirco-service-provider"的工程,可以勾選“eureka discovery”,或者在項目的pom.xml文件中加入如下代碼

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

2.2 修改配置文件

  1. 老規矩,將applicaiton.properties修改為application.yml。
  2. 加入如下代碼
server:
  port: 8001
  
spring:
  application:
    name: service-provider
    
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:9001/eureka/

2.3 修改啟動文件

  1. 在啟動文件中加上"@EnableDiscoveryClient"註解,然後啟動工程。
  2. 打開瀏覽器訪問http://localhost:9001/,可以看到如下圖所示,說明服務已經註冊成功。
    技術分享圖片

    2.4 創建第一個微服務

    怎麽建一個類就不說了,直接上代碼:
@RestController
public class MyFristServiceController {
    /**
     * 我的第一個微服務程序
     * @param name
     * @return
     */
    @RequestMapping(value="/helloWorld" , method= RequestMethod.GET)
    public String helloWorld(String name) {
        return "Hello," + name + ", this is your world!" ;
    }
}

重啟服務,訪問http://localhost:8001/helloWorld?name=jack,出現如下圖,說明我們第一個微服務創建成功:
技術分享圖片
為了稍顯B格,我們在MyFristServiceController上加上這個@RequestMapping("services"),讓訪問路徑變為http://localhost:8001/services/helloWorld?name=jack

2.5 親測註意事項

  1. 加入spring-cloud-starter-netflix-eureka-client依賴後啟動工程,會在控制臺中顯示在註冊中,然後服務器就停止了,這是因為沒有加入web方面的依賴,導致工程以為你這就是一個普通的驗證過程,這裏並沒有去監聽端口,依賴如下:
        <dependency>  
            <groupId>org.springframework.boot</groupId>  
            <artifactId>spring-boot-starter-web</artifactId>  
        </dependency>

3.服務調用

3.1 創建工程

我們用同樣的方式來創建一個名為"mirco-service-consumer"的工程

3.2 修改配置文件

  1. 老規矩,將applicaiton.properties修改為application.yml。
  2. 加入如下代碼
server:
  port: 8002

spring:
  application:
    name: service-consumer

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:9001/eureka/

3.3 修改啟動文件

在啟動文件中加上"@EnableDiscoveryClient"和"@EnableFeignClients"註解

3.4 創建第一個微服務調用

  1. 創建一個名為“MyFristConsumer”的Feign遠程調用接口:
@RequestMapping("services")
@FeignClient(name = "service-provider")
public interface MyFristConsumer {
    /**
     * 遠程調用helloWorld的接口
     * @param name
     * @return
     */
    @RequestMapping(value="/helloWorld" , method= RequestMethod.GET)
    public String helloWorld(@RequestParam("name") String name) ;
}

這裏面@FeignClient(name = "xxx"),xxx表示要調用的應用服務名稱一定不能弄錯了,然後是下面helloWorld方法,這裏面要註意的問題是如果我們的被調用服務是用@PathVariable的方法獲取參數,這裏參數獲取方法務必與被調用服務對應,如果不對應是訪問不到服務的。

  1. 創建一個controller類來測試我們的調用是否成功
@RestController
public class MyFristConsumerController {
    @Autowired
    private MyFristConsumer myFristConsumer ;
    /**
     * 我的第一個微服務調用程序
     * @param name
     * @return
     */
    @RequestMapping(value="/consumerHelloWorld" , method= RequestMethod.GET)
    public String helloWorld(String name) {
        return myFristConsumer.helloWorld(name) ;
    }
}

啟動服務,訪問http://localhost:8002/consumerHelloWorld?name=rose,出現如下圖,說明我們第一個微服務調用成功:
技術分享圖片

4.結語

  • 涉及了三個工程,分別是:mirco-service-eureka、mirco-service-provider以及mirco-service-consumer。
  • 雖然我們這裏看到了一個簡單的服務調用,並模擬了一個類RPC似的調用,但是大家要知道實際在使用的過程中肯定不是一個提供服務,一個來進行調用這麽簡單,服務與服務之間都是穿插調用的。以後我會提供公司級的項目結構,並輔以實際例子來為大家講解。
  • mirco-service-consumer工程中,我們沒有看寫入被調用的服務地址,而是連上了eureka註冊中心,並實現調用,這樣就可以讓我們方便在服務集群的情況下做動態上、下線。
  • 限於篇幅,有興趣的朋友們可以參照我第一篇,一個工程配置多個服務節點的方法試一下,看能不能啟動多個服務提供調用。

    5.一點點重要的事情

  • 文章對應的源代碼地址:github- SpringCloud實戰之初級入門(二)— 服務註冊與服務調用
  • 文章對應的視頻地址:愛奇藝- SpringCloud實戰之初級入門(二)— 服務註冊與服務調用

SpringCloud實戰之初級入門(二)— 服務註冊與服務調用