歡迎來到菜鳥SpringCloud入門實戰系列(SpringCloudForNoob),該系列經過層層遞進的實戰視角,來一步步學習和理解SpringCloud。html
本系列適合有必定Java以及SpringBoot基礎的同窗閱讀。java
每篇文章末尾都附有本文對應的Github源代碼,方便同窗調試。git
Github倉庫地址:程序員
https://github.com/qqxx6661/springcloud_for_noobgithub
你還能夠經過如下兩種途徑查看菜鳥SpringCloud入門實戰系列:web
因爲SpringCloud中有許多組件,每一個組件都須要單獨進行開發和維護,爲了便於統一的版本維護和管理,咱們常常會用到Maven的多模塊模式。面試
結構以下:
在這裏插入圖片描述算法
首先建立一個Maven項目做爲主工程,類型無所謂,這裏建議使用maven-archetype-quickstart骨架,建立過程以下:spring
File-->New-->Project
-->Maven-->Create from archetype-->maven-archetype-quickstart-Next
-->GroupId={你的GroupId}-->AritifactId={你的ArtifactId}
-->Next-->Next-->Finish-->New Whindowapache
在new-module裏新建模塊:
在這裏插入圖片描述
一路下一步便可:
在這裏插入圖片描述
在這裏咱們新建子模塊名爲eureka,用來放以後要用的eureka模塊,新建好後,子模塊的目錄以下:
在這裏插入圖片描述
因爲並不須要在主工程進行任何代碼開發,因此刪除其src目錄。
能夠看到如今咱們的目錄結構:
主工程的pom.xml裏作的事:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.pricemonitor</groupId> <artifactId>springcloud</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <name>springcloud</name> <!--子模塊--> <modules> <module>eureka</module> </modules> <!--父級:Spring Boot--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.3.RELEASE</version> </parent> <!--參數--> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <!--Spring Cloud 版本序列配置--> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Finchley.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <!--Spring Boot 執行器組件--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!--Spring Cloud 基礎--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter</artifactId> </dependency> <!--Spring Cloud 服務註冊組件--> <dependency> <groupId>org.springframework.cloud</groupId> <!--此處的依賴是SpringBoot2.0之後專用的,若是您使用的SpringBoot版本低於2.0請使用spring-cloud-starter-eureka-server--> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <!--Spring Boot Web組件--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--Spring Boot 測試組件--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
服務中心又稱註冊中心,管理各類服務功能包括服務的註冊、發現、熔斷、負載、降級等,好比dubbo admin後臺的各類功能。 Spring Cloud 封裝了 Netflix 公司開發的 Eureka 模塊來實現服務註冊和發現。Eureka 採用了 C-S 的設計架構。Eureka Server 做爲服務註冊功能的服務器,它是服務註冊中心。而系統中的其餘微服務,使用 Eureka 的客戶端鏈接到 Eureka Server,並維持心跳鏈接。這樣系統的維護人員就能夠經過 Eureka Server 來監控系統中各個微服務是否正常運行。Spring Cloud 的一些其餘模塊(好比Zuul)就能夠經過 Eureka Server 來發現系統中的其餘微服務,並執行相關的邏輯。 Eureka由兩個組件組成:Eureka服務器和Eureka客戶端。Eureka服務器用做服務註冊服務器。Eureka客戶端是一個java客戶端,用來簡化與服務器的交互、做爲輪詢負載均衡器,並提供服務的故障切換支持。Netflix在其生產環境中使用的是另外的客戶端,它提供基於流量、資源利用率以及出錯狀態的加權負載均衡。
在這裏插入圖片描述
上圖簡要描述了Eureka的基本架構,由3個角色組成:
一、Eureka Server
提供服務註冊和發現
二、Service Provider
將自身服務註冊到Eureka,從而使服務消費方可以找到
三、Service Consumer
接下來咱們在子模塊Eureka中建立一個SpringCloud的註冊中心Eureka
代碼重點:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <artifactId>eureka</artifactId> <version>0.0.1-SNAPSHOT</version> <name>eureka</name> <packaging>jar</packaging> <description>Demo project for Spring Boot</description> <!--父工程的依賴--> <parent> <groupId>com.pricemonitor</groupId> <artifactId>springcloud</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <dependencies> </dependencies> </project>
請問一下爲何我本地啓動了3個,仍是No instances available,DS Replicas裏面有值
啓動服務時候,若是存在application.properties,裏面還設置了
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false,仍是會去讀取,致使服務沒能註冊.
EurekaApplication.java
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @SpringBootApplication @EnableEurekaServer public class EurekaApplication { public static void main(String[] args) { SpringApplication.run(EurekaApplication.class, args); } }
若是你發現@EnableEurekaServer沒法引入,請檢查你的SpringCloud版本與SpringBoot版本是否兼容:
springboot沒法引入@enableeurekaserver以及Spring Cloud與Spring Boot版本匹配關係:
https://blog.csdn.net/zhang53141/article/details/83091032
默認生成的配置文件是application.properties,也能夠寫成application.yml格式,配置以下:
# 端口號 server: port: 8761 # 服務註冊相關配置 eureka: # 服務實例主機名 instance: hostname: localhost # 服務提供者配置 client: # 不進行註冊(當服務註冊中心是單點而非高可用時的配置方式) registerWithEureka: false # 不獲取註冊信息(當服務註冊中心是單點而非高可用時的配置方式) fetchRegistry: false # 服務註冊中心地址 serviceUrl: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
注意:
在這裏插入圖片描述
能夠看到下面的頁面,其中尚未發現任何服務,這只是一個孤零零的eureka-server。
在下一個教程中,咱們將建立服務提供者並在Eureka進行註冊。
https://github.com/qqxx6661/springcloud_for_noob/tree/master/01-eureka
全複習手冊文章導航:經過如下兩種途徑查看
菜鳥SpringCloud實戰專欄
Spring-Cloud筆記01:IDEA中同一個項目啓動多個實例:
https://blog.csdn.net/hanchao5272/article/details/80558190
Spring-Cloud筆記02:IDEA中構建多模塊的Maven項目:
https://blog.csdn.net/hanchao5272/article/details/80558780
springcloud(二):註冊中心Eureka:
http://www.ityouknow.com/springcloud/2017/05/10/springcloud-eureka.html
我是蠻三刀把刀,後端開發。
主要關注後端開發,數據安全,爬蟲等方向。
來微信和我聊聊:yangzd1102
Github我的主頁:https://github.com/qqxx6661
同步更新公衆號及如下博客
擁有專欄:
https://www.zhihu.com/people/yang-zhen-dong-1/
擁有專欄:
https://juejin.im/user/5b48015ce51d45191462ba55
https://www.jianshu.com/u/b5f225ca2376
我的公衆號:Rude3Knife
若是文章對你有幫助,不妨收藏起來並轉發給您的朋友們~