一.什麼是微服務
就是把一整個後臺項目拆分成多個模塊, 每一個模塊稱作一個服務, 每個服務都可以獨立運行, 這樣做的好處是其中有一個服務掛掉後, 另外的服務不受影響, 這些服務使用接口相互通信, 減少了依賴和耦合.
-- 摘自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 在網站上訪問試試吧
到這裏服務之間的相互訪問也可以完成了 到這裏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服務器,這樣說明啓動成功了
總請求次數 % 服務器總數
取模後就調用相對應索引的服務 就可以實現本地均衡負載了 這就是ribbon的基本原理
此篇文章是快速搭建SpringCloud,如果大家需要看更詳細的,請看 https://www.jianshu.com/p/a0365a635975 此文章也是根據此大佬發表的文章進行學習的