微服時代來了,快速搭建SpringCloud

一.什麼是微服務

就是把一整個後臺項目拆分成多個模塊, 每一個模塊稱作一個服務, 每個服務都可以獨立運行, 這樣做的好處是其中有一個服務掛掉後, 另外的服務不受影響, 這些服務使用接口相互通信, 減少了依賴和耦合.
-- 摘自Object

二.快速開始

首先創建一個maven項目

Next  ——>

Next   ————>

這裏什麼都不用選,直接Next

直接Finish,接下來等創建好項目

1.Eureka註冊中心

首先新建一個Module子項目, 也就是一個微服務模塊.

這樣就創建好了子模塊了,接下來簡單配置一下

首先開啓eurerka服務

之後找到配置文件

server:
  # 配置服務端口
  port: 8081
eureka:
  client:
    service-url:
      # 配置eureka服務器地址
      defaultZone: http://127.0.0.1:8081/eureka
    #是否需要將自己註冊到註冊中心(註冊中心集羣需要設置爲true)
    register-with-eureka: false
    #是否需要搜索服務信息 因爲自己是註冊中心所以爲false
    fetch-registry: false

 

接下來啓動一下看下

看到輸出日誌是已經啓動成功了,我們訪問一下: http://localhost:8081/   看下結果

網頁可以正常運行後 我們的註冊中心就配置完畢了

2.創建微服務

我們需要找一個地方來寫接口, 接下來我們就創建兩個服務.

service-b和service-a的創建是一樣的,重複再創建一個service-b

這樣大致創建ok了

接下來配置 application.yml

首先是service-a:

server:
  # 服務端口號
  port: 8082
spring:
  application:
    # 服務名稱 - 服務之間使用名稱進行通訊
    name: service-objcat-a
eureka:
  client:
    service-url:
      # 填寫註冊中心服務器地址
      defaultZone: http://localhost:8081/eureka
    # 是否需要將自己註冊到註冊中心
    register-with-eureka: true
    # 是否需要搜索服務信息
    fetch-registry: true
  instance:
    # 使用ip地址註冊到註冊中心
    prefer-ip-address: true
    # 註冊中心列表中顯示的狀態參數
    instance-id: ${spring.cloud.client.ip-address}:${server.port}

然後是service-b:

server:
  # 服務端口號
  port: 8083
spring:
  application:
    # 服務名稱 - 服務之間使用名稱進行通訊
    name: service-objcat-b
eureka:
  client:
    service-url:
      # 填寫註冊中心服務器地址
      defaultZone: http://localhost:8081/eureka
    # 是否需要將自己註冊到註冊中心
    register-with-eureka: true
    # 是否需要搜索服務信息
    fetch-registry: true
  instance:
    # 使用ip地址註冊到註冊中心
    prefer-ip-address: true
    # 註冊中心列表中顯示的狀態參數
    instance-id: ${spring.cloud.client.ip-address}:${server.port}

接下來將三個服務都啓動成功,說明沒問題了,然後我們寫一個接口

@RestController
public class TestController {

    @RequestMapping("/hello")
    public String hello(){
        return "Hello World!";
    }
}

重啓服務service-a

然後訪問 http://localhost:8082/hello 

瀏覽器出現 Hello World! ,說明沒問題了

我們現在有一個需求 使用服務b調用服務a的接口
這時我們就需要用到eurka(註冊中心)feign客戶端了
首先我們在service-b中創建interface

@FeignClient("SERVICE-OBJCAT-A")
public interface ServiceAFeignClient {

    @RequestMapping("/hello")
    public String hello();
}

可以看到 eureka 有了

之後我們發現報錯了 設置一下即可

最後在應用入口加上註解,就能實現服務之間的調用了.

    

重新運行服務b 在網站上訪問試試吧

http://localhost:8083/call

到這裏服務之間的相互訪問也可以完成了 到這裏springcloud最基本的環境搭建就完成了

內容擴展

我們來看一個神奇的現象 我把service-a接口中寫一個延時函數 我們看一下效果

重啓一下service-a,然後運行一下看看

報錯 讀取超時了 ,原因是 feign的默認請求超時時間是1秒 ,我們設置的1.5秒

ribbon:
  #建立連接超時時間
  ConnectTimeout: 5000
  #讀取資源超時間
  ReadTimeout: 5000

加上這個即可

現在看一下負載均衡:

我們現在就在本地開啓兩個service-a

首先修改一下代碼 讓服務打印出當前端口號

對服務a做了上圖中的修改
1.獲取服務器端口號
2.拼接端口號返回給客戶端
3.註釋掉了延時函數提高效率

因爲我們要啓動兩個a服務器,所以我們在idea要這樣設置

我們先把這個8082端口的服務器a重啓一下

然後再把application.yml的端口號改成8092,然後再啓動一個a服務器

然後我們訪問一下 http://localhost:8083/call

這時我們看到有一個8082和8092端口的a服務器,這樣說明啓動成功了

訪問的同一個地址 但是端口會在8082和8092之間來回切換 這就是所謂的本地負載均衡 那麼這個機制是怎麼實現的呢 其實很簡單 就是輪詢機制 計算公式就是 總請求次數 % 服務器總數 取模後就調用相對應索引的服務 就可以實現本地均衡負載了 這就是ribbon的基本原理

 

此篇文章是快速搭建SpringCloud,如果大家需要看更詳細的,請看 https://www.jianshu.com/p/a0365a635975   此文章也是根據此大佬發表的文章進行學習的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章