前言
SpringCloud並不是一個第三方框架的名稱, 而是一整套微服務框架的統稱, 使用這套框架可以快速搭建出高可用的微服務環境, 因爲功能衆多,所以又被稱SpringCloud全家桶, 由於篇幅較長所以文章採用了目錄引導, 第二章是微服務的基礎, 第三章是功能模塊擴展, 如網關, 服務保護, 分佈式配置中心, nginx, 下面就跟着我們的文章, 一起來看吧.
一.什麼是微服務
就是把一整個後臺項目拆分成多個模塊, 每一個模塊稱作一個服務, 每個服務都可以獨立運行, 這樣做的好處是其中有一個服務掛掉後, 另外的服務不受影響, 這些服務使用接口相互通信, 減少了依賴和耦合.
二.快速開始
創建一個空的spring boot項目,做父工程,整個項目是由maven
進行管理的, 依賴包就是我們開發時需要用到的第三方jar包, 也就是框架, 這裏爲什麼什麼也不選? 我說一下, 因爲我們要做的是微服務, 所以框架結構爲一個基座
+多個子模塊
, 我們上面建立的就是基座
, 你可以把它當成一個工作空間
用途是管理子模塊。
1.Eureka註冊中心
首先要新建我們SpringCloud項目的核心eureka註冊中心
, 爲什麼說它是項目的核心呢, 我在簡介中說過了, 微服務就是把一整個後臺應用拆分成小的功能模塊, 那麼這些模塊之間如何進行通信呢?
沒錯就是註冊中心, 那麼我們接下來就開始搭建一個註冊中心吧!
首先在父工程中新建一個Module
子項目, 也就是一個微服務模塊.
到這裏我們註冊中心模塊就建立好了, 之後我們來簡單配置一下.
在啓動類上加上@EnableEurekaServer註解
首先開啓eureka
服務
之後找到配置文件
配置一下application.yml
, 如果你的是application.properties
, 請修改後綴爲yml
, 這兩個配置文件都可以配置工程, 相比之下yml
更直觀一些, 所以本教程使用yml
進行配置.
之後我們進行配置
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
注意縮進, 因爲yml
使用縮進來區分不同字段的.
然後我們來運行項目吧!
運行啓動類
然後我們來訪問一下注冊中心吧.
網頁可以正常運行後 我們的註冊中心就配置完畢了
2.創建微服務
光有註冊中心是沒有用的, 服務都沒有, 根本寫不了接口, 所以接下來我們就繼續在父工程中創建兩個服務.
同理配置service-b
, 新建完成之後是這個樣子
之後我們配置服務的入口文件,在啓動類上加上註解@EnableEurekaClient
然後配置一下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}
之後我們來運行一下剛配置好服務吧運行service-a和service-b的啓動類
@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();
}
重啓service-b服務
應用名可以在eureka中找到
http://localhost:8081
之後我們來寫接口 在服務service-b中添加個控制器
@RestController
public class TestController {
@Autowired
private ServerAFeignClient serverAFeignClient;
@RequestMapping("/call")
public String call() {
String result = serverAFeignClient.hello();
return "b to a 訪問結果 ----- " + result;
}
}
之後我們發現報錯了 不要慌張設置一下即可
最後在應用入口加上註解@EnableFeignClients,就能實現服務之間的調用了.
重新運行服務b 在網站上訪問試試吧
http://localhost:8083/call
到這裏服務之間的相互訪問也可以完成了 到這裏springcloud最基本的環境搭建就完成了 快寫幾個微服務玩玩吧