最近一直在看spring的一些框架, 前面發(fā)布了一些關(guān)于springboot的文章, 然而學(xué)習(xí)是不能止步的. 學(xué)習(xí)多了才發(fā)現(xiàn)學(xué)習(xí)還是蠻有意思的.后面一段時間會持續(xù)更新一些關(guān)于springcloud的文章;
下面是我github的一個demo僅供參考,后續(xù)我會將spring cloud的內(nèi)容繼續(xù)完善;
spring_cloud_demo
1.什么是Eureka
Eureka是Netflix開發(fā)的服務(wù)發(fā)現(xiàn)框架, 本身是一個基于REST的服務(wù);(這里我們在請求時候基本運用的是RESTful風(fēng)格的URL, 后面會說道)
Eureka包含兩個組件:Eureka Server和Eureka Client。
Eureka Server提供服務(wù)注冊服務(wù),各個節(jié)點啟動后,會在Eureka Server中進(jìn)行注冊,這樣EurekaServer中的服務(wù)注冊表中將會存儲所有可用服務(wù)節(jié)點的信息,服務(wù)節(jié)點的信息可以在界面中直觀的看到。
在應(yīng)用啟動后,將會向Eureka Server發(fā)送心跳,默認(rèn)周期為30秒,如果Eureka Server在多個心跳周期內(nèi)沒有接收到某個節(jié)點的心跳,Eureka Server將會從服務(wù)注冊表中把這個服務(wù)節(jié)點移除(默認(rèn)90秒)。
Eureka Server之間通過復(fù)制的方式完成數(shù)據(jù)的同步,Eureka還提供了客戶端緩存機制,即使所有的Eureka Server都掛掉,客戶端依然可以利用緩存中的信息消費其他服務(wù)的API。綜上,Eureka通過心跳檢查、客戶端緩存等機制,確保了系統(tǒng)的高可用性、靈活性和可伸縮性。

如圖有三個模塊,
1.服務(wù)發(fā)現(xiàn)組件: 這個就是Eureka service, 消費者和服務(wù)者都要在該服務(wù)器上注冊,只有在這個服務(wù)上注冊的才可以相互進(jìn)行數(shù)據(jù)交流
2:服務(wù)消費者: 調(diào)用方, 例如查看訂單下的所有商品, 現(xiàn)在訂單系統(tǒng)是一個服務(wù)器, 商品系統(tǒng)是一個服務(wù)器; 我只能拿到訂單號, 找到訂單下的商品的id, 為了得到商品信息, 只有拿著這些商品id去商品服務(wù)上去找商品.
3.服務(wù)提供者: 被調(diào)用方, 2中說道的商品服務(wù),為訂單系統(tǒng)調(diào)用提供數(shù)據(jù).
2.spring cloud
當(dāng)你學(xué)習(xí)過spring springMVC后你會發(fā)現(xiàn), spring后面出的框架都是在這些基礎(chǔ)上進(jìn)行疊加, 對其他框架進(jìn)行整合, 去其糟粕,取其精華;
spring cloud, 基于spring boot之上進(jìn)行開發(fā), cloud將許多優(yōu)秀的框架進(jìn)行對spring的兼容, 并二次封裝,讓使用者更加方面的調(diào)取服務(wù);spring boot是spring cloud的基礎(chǔ); 一會boot, 一會cloud 是不是很亂; 如果還不會使用spring boot的請左轉(zhuǎn) 手把手教你springboot快速整合mybatis;
3.創(chuàng)建一個Eureka服務(wù)端
廢話不多說了,下面進(jìn)入正題;
3.1添加依賴
pom.xml
<!-- 這里可以用IDEA進(jìn)行快速創(chuàng)建spring boot項目 -->
<parent>
<!--spring boot 基礎(chǔ)依賴-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.1.RELEASE</version>
<relativePath/>
</parent>
<!-- 使用dependencyManagement進(jìn)行版本管理
spring cloud里面整合了大量的框架, 使用這個對里面的依賴進(jìn)行統(tǒng)一管理
-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Camden.SR6</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 引入eureka server依賴 -->
<dependencies>
<!-- 引入eureka server依賴 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
</dependencies>
3.2添加注解
依賴我們加入后, 需要在spring boot的啟動類中添加一個注解
package cn.cooplan.eurekaservice;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@EnableEurekaServer //告訴spring boot啟動Eureka的服務(wù)端
@SpringBootApplication
public class EurekaServiceApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServiceApplication.class, args);
}
}
3.3編寫配置文件
eureka:
client:
register-with-eureka: false #false 不將本服務(wù)注冊到eureka;(該項目為Eureka的服務(wù)端,只提供容器環(huán)境, 不進(jìn)行調(diào)用)
fetch-registry: false #false 不從Eureka拉取資源
service-url:
defaultZone: http://192.168.0.101:8003/eureka/ #defaultZone在編寫yml時候沒有提示, 注意的是一定要駝峰命名,不然會找不到Eureka服務(wù)地址
instance:
prefer-ip-address: true #以IP地址注冊到服務(wù)中心,相互注冊使用IP地址
server:
port: 8003 #修改tomcat默認(rèn)端口號, 因為在一臺電腦進(jìn)行演示, 避免端口沖突
3.4啟動Eureka服務(wù)
啟動spring boot就可以了, 啟動spring boot的啟動類;
瀏覽器訪問:http://192.168.0.101:8003
當(dāng)看到下面的頁面, 說明你的Eureka服務(wù)啟動成功

到著我們已經(jīng)做了三分之一的工作,~ 下面是對消費者和生產(chǎn)者進(jìn)行配置;
4.配置生產(chǎn)者和消費者
這里我們以訂單系統(tǒng)為消費者, 商品系統(tǒng)為生產(chǎn)者;
創(chuàng)建order和goods兩個spring boot應(yīng)用, 添加spring cloud依賴, 添加依賴與3.創(chuàng)建一個Eureka服務(wù)端步驟一樣;
4.1添加啟動類注解, 編寫yml文件
Eureka的服務(wù)端與客戶端(生產(chǎn)者, 消費者)差異在啟動類加的注解不一樣, yml的配置參數(shù)不同;
下面舉例一個order為例, 兩者配置方法相同
4.2添加啟動類注解
package cn.cooplan.order;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@EnableEurekaClient //開啟Eureka客戶端服務(wù), 代表該服務(wù)是一個客戶端
@SpringBootApplication
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
}
4.3編寫yml文件
eureka:
client:
fetch-registry: true #true將服務(wù)添加到Eureka服務(wù)中
register-with-eureka: true #true允許從Eureka服務(wù)中獲取數(shù)據(jù), 進(jìn)行交互
service-url:
#注意: defaultZone 一定要駝峰命名
defaultZone: http://192.168.0.101:8003/eureka/ #指向你的Eureka服務(wù)
server:
port: 8002
4.4啟動Eureka客戶端
同Eureka service一樣啟動spring boot的啟動類; 注意的是, 先啟動Eureka service服務(wù), 不然客戶端會找不到service報錯
瀏覽器訪問:http://192.168.0.101:8003
當(dāng)看到下面的頁面, 說明你的客戶端已經(jīng)注冊到Eureka服務(wù)中

5.總結(jié)
這個時候我們的Eueka服務(wù)已經(jīng)完成,
我們在使用spring cloud的時候, 實際上就是在寫一個spring boot的項目; cloud只是將我們需要的分布式框架與spring整合, 并且更方便的調(diào)用;
以上內(nèi)容是我在學(xué)習(xí)中自己摸索的, 如果有問題, 請留言;