【微服務】之二:從零開始,輕鬆搞定SpringCloud微服務系列--註冊中心(一)
微服務體系,有效解決專案龐大、互相依賴的問題。目前SpringCloud體系有強大的一整套針對微服務的解決方案。本文中,重點對微服務體系中的服務發現註冊中心進行詳細說明。本篇中的註冊中心,採用Netflix 公司的Eureka。
註冊中心簡介
Netflix Eureka:雲端負載均衡,一個基於 REST 的服務,用於定位服務,以實現雲端的負載均衡和中間層伺服器的故障轉移。他包含很多功能,本文重點講解它的服務註冊中心。
官方解釋:
Eureka is a REST (Representational State Transfer) based service that is primarily used in the AWS cloud for locating services for the purpose of load balancing and failover of middle-tier servers. We call this service, the Eureka Server. Eureka also comes with a Java-based client component,the Eureka Client, which makes interactions with the service much easier. The client also has a built-in load balancer that does basic round-robin load balancing.
Eureka支援服務動態擴容、縮容、失效剔除。
Eureka提供了完整的Service Registry和Service Discovery實現,與現有Spring Cloud完美融合。
註冊中心服務原理
由上圖可以看出,藍色部分為註冊中心,黃色部分為一個生產者、消費者。所有應用都被同一個註冊中心納入管理。通常有Register(服務註冊)、Renew(服務續約)、Cancel(服務下線)等操作。
環境清單
JDK: 1.8
Maven:3.x+
IDE:idea
開始起飛
為了後續博文的開展,我們約定所有子系統都放置在一個父類專案下,採用Idea的模組開發機制,對所有子系統進行統一倉庫管理,方便交流學習。
建立父類專案
使用idea建立一個maven專案(建立之前設定好maven、jdk版本)。
然後在pom.xml檔案中加入以下超級父類依賴。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
建立子模組
通過上面箭頭提示的Module建立模組專案,流程與新建專案類似。
建立完成以後在子專案pom檔案中加入以下依賴。
配置pom檔案
<!--依賴管理-->
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<!--資源庫管理-->
<repositories>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/libs-snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<!--依賴管理中心-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Edgware.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!--構建中心-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!-- defined in spring-cloud-starter-parent pom (as documentation hint),
but needs to be repeated here -->
<configuration>
<requiresUnpack>
<dependency>
<groupId>com.netflix.eureka</groupId>
<artifactId>eureka-core</artifactId>
</dependency>
<dependency>
<groupId>com.netflix.eureka</groupId>
<artifactId>eureka-client</artifactId>
</dependency>
</requiresUnpack>
</configuration>
</plugin>
</plugins>
</build>
設定完成以後,開始主體設定,建立包>>建立主方法>>配置yml檔案
專案目錄結構:
新建Application.java檔案
/**
* @Description : Eureka 服務發現server 啟動類
* @Author hanyahong
* @Date 2017/12/4- 16:14
*/
@SpringBootApplication
@EnableEurekaServer
public class Application {
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
}
說明:
@EnableEurekaServer :服務發現服務端註解,設定以後將作為服務註冊中心。
@SpringBootApplication:springboot啟動主程式註解。
配置application.yml檔案
在位於resources的資料夾下面建立該檔案,該檔案作為服務的配置檔案,可以配置相關子專案引數。
#server 埠號設定
server:
port: 8081
#註冊中心設定,server本身不被發現
eureka:
client:
registerWithEureka: false
fetchRegistry: false
server:
waitTimeInMsWhenSyncEmpty: 0
至此,一個完整的服務註冊中心基本搭建完畢。可以進行啟動測試。
驗證是否成功
我們可以在Terminal看到以下資訊,說明啟動成功。
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v1.5.9.RELEASE)
...
2017-12-04 18:04:30.780 INFO 32476 --- [ Thread-11] e.s.EurekaServerInitializerConfiguration : Started Eureka Server
2017-12-04 18:04:30.823 INFO 32476 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8081 (http)
2017-12-04 18:04:30.825 INFO 32476 --- [ main] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 8081
2017-12-04 18:04:30.830 INFO 32476 --- [ main] com.hyh.Application : Started Application in 14.784 seconds (JVM running for 15.647)
2017-12-04 18:05:30.759 INFO 32476 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms
通過瀏覽器訪問 http://localhost:8081/ 可以看到已經啟動正常。
使用Maven 外掛進行打包
提醒:在打包之前需要本地已經安裝好Git/Maven並配置好環境變數。博主因為不喜歡使用Idea自帶的JDK/MAVEN/GIT,都是單獨安裝的。這個看個人喜好吧。
另外,博主喜歡使用命令進行驅動打包,因此對Idea的Terminal進行了重新配置,將Win下面CMD替換成了Git.bash,如果有同學感興趣可以自行體驗。
IDEA 預設Terminal 修改
開啟 File>>Settings,找到修改配置選項
然後將預設的Shell地址改成Git.
設定完成以後進行儲存。回到我們介面可以通過Alt + F12 快速開啟shell視窗。
正式開始打包
首先使用pwd
檢視所在的目錄,應該是父類專案的根目錄,ls
命令或者dir
檢視,該目錄下面的檔案與資料夾,我們需要跳轉到子目錄下面,進行子專案(服務註冊中心)打包。所以使用 cd
命令跳轉子目錄
使用命令mvn clean package
就可以實現maven打包。可能會先下載一些依賴,完了就會開始打包操作。
Maven打包
mvn clean package
執行命令後出發maven構建,如下。
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building cloud-hyh-discovery-eureka V1.0.0
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.6.1:clean (default-clean) @ cloud-hyh-discovery-eureka ---
[INFO] Deleting E:\workplace\spring-cloud-microservice\cloud-hyh-discovery-eureka\target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ cloud-hyh-discovery-eureka ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ cloud-hyh-discovery-eureka ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to E:\workplace\spring-cloud-microservice\cloud-hyh-discovery-eureka\target\classes
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ cloud-hyh-discovery-eureka ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory E:\workplace\spring-cloud-microservice\cloud-hyh-discovery-eureka\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ cloud-hyh-discovery-eureka ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.18.1:test (default-test) @ cloud-hyh-discovery-eureka ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:2.6:jar (default-jar) @ cloud-hyh-discovery-eureka ---
[INFO] Building jar: E:\workplace\spring-cloud-microservice\cloud-hyh-discovery-eureka\target\cloud-hyh-discovery-eureka-V1.0.0.jar
[INFO]
[INFO] --- spring-boot-maven-plugin:1.5.9.RELEASE:repackage (default) @ cloud-hyh-discovery-eureka ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.984 s
[INFO] Finished at: 2017-12-04T19:24:35+08:00
[INFO] Final Memory: 37M/326M
[INFO] ------------------------------------------------------------------------
至此,一個完整的服務註冊中心,我們就開發並打包完畢。可以通過target 資料夾找到剛剛生成的jar檔案。進行獨立啟動了。
使用命令可以啟動獨立的jar保程式。
java -jar XXX.jar
Linux環境下,後臺啟動命令
nohup java -jar xxx.jar &
備註: Linux檢視埠對於的啟動程式命令,XXXX代表埠號
netstat -anp|grep XXXX
通過以上命令查到程式對於的資訊(包括PID)。如果想停止,可以通過PID(程序ID)殺死相關程序。
kill -9 PID
部落格原始碼地址
相關推薦
【微服務】之二:從零開始,輕鬆搞定SpringCloud微服務系列--註冊中心(一)
微服務體系,有效解決專案龐大、互相依賴的問題。目前SpringCloud體系有強大的一整套針對微服務的解決方案。本文中,重點對微服務體系中的服務發現註冊中心進行詳細說明。本篇中的註冊中心,採用Netflix 公司的Eureka。 註冊中心簡介 Netflix Eureka:雲端負載均衡,一個基於 RES
【微服務】之三:從零開始,輕鬆搞定SpringCloud微服務-配置中心
官方解釋 Spring Cloud provides tools for developers to quickly build some of the common patterns in distributed systems (e.g. configuration
【微框架】之一:從零開始,輕鬆搞定SpringCloud微服務系列--開山篇(spring boot 小demo)
Spring頂級框架有眾多,那麼接下的篇幅,我將重點講解SpringCloud微框架的實現 Spring 頂級專案,包含眾多,我們重點學習一下,SpringCloud專案以及SpringBoot專案 ————————————————————main———————————————————— 一
【微框架】之一:從零開始,輕鬆搞定SpringCloud微框架系列--開山篇
一、SpringCloud專案簡介 Spring Cloud: 微服務工具包,為開發者提供了在分散式系統的配置管理、服務發現、斷路器、智慧路由、微代理、控制匯流排等開發工具包。 Spring Boot: 旨在簡化建立產品級的 Spring
【微服務】之四:輕鬆搞定SpringCloud微服務-負載均衡Ribbon
對於任何一個高可用高負載的系統來說,負載均衡是一個必不可少的名稱。在大型分散式計算體系中,某個服務在單例的情況下,很難應對各種突發情況。因此,負載均衡是為了讓系統在效能出現瓶頸或者其中一些出現狀態下可以進行分發業務量的解決方案。在SpringCloud 體系當中,加入了Netflix公司的很多優秀產品,其中
【微服務】之六:輕鬆搞定SpringCloud微服務-API閘道器zuul
通過前面幾篇文章的介紹,我們可以輕鬆搭建起來微服務體系中比較重要的幾個基礎構建服務。那麼,在本篇博文中,我們重點講解一下,如何將所有微服務的API同意對外暴露,這個就設計API閘道器的概念。 本系列教程 閘道器名稱解釋 閘道器(Gateway)又稱網間聯結器、協議轉換器。閘道器在網路層以上實現網路互連,
【微服務】之五:輕鬆搞定SpringCloud微服務-呼叫遠端元件Feign
上一篇文章講到了負載均衡在Spring Cloud體系中的體現,其實Spring Cloud是提供了多種客戶端呼叫的元件,各個微服務都是以HTTP介面的形式暴露自身服務的,因此在呼叫遠端服務時就必須使用HTTP客戶端。我們可以使用JDK原生的URLConnection、Apache的Http Client、
【微服務】之七:輕鬆搞定SpringCloud微服務-API許可權控制
許可權控制,是一個系統當中必須的重要功能。張三隻能訪問輸入張三的特定功能,李四不能訪問屬於趙六的特定選單。這就要求對整個體系做一個完善的許可權控制體系。該體系應該具備針區分使用者、許可權、角色等各種必須的功能。 本系列教程 本系列為連載文章,閱讀本文之前強烈建議您先閱讀前面幾篇。 上一節我們講到AP
[原創]unity3D學習【功能實現】之二:圖片的旋轉/2d物體的旋轉
目標:滑鼠點選後,圖片朝向滑鼠點選的地方 涉及到:Mathf.Atan2(反正是計算角度的),rotation,Quaternion.Slerp 思路:下面的圖片是x軸對稱的,所以這個旋轉也是以圖片箭頭開始旋轉的。(為什麼?可能跟Atan2有關),根據滑鼠點選的位置與圖片的位置計算旋轉角度,在Quaterni
【HADOOP】| 環境搭建:從零開始搭建hadoop大數據平臺(單機/偽分布式)-下
虛擬機克隆 成功 之前 藍色 ref pin highlight .gz xml文件 因篇幅過長,故分為兩節,上節主要說明hadoop運行環境和必須的基礎軟件,包括VMware虛擬機軟件的說明安裝、Xmanager5管理軟件以及CentOS操作系統的安裝和基本網絡配置。具體
SpringBoot2.0.0高版本搭建SpringCloud微服務框架搭建採坑筆記之註冊中心(一)
自學springCloud框架,因為什麼都不懂 就自己摸索慢慢來 但是其中出現了很多問題 寫個部落格記錄一下 也提醒一下其他同仁別犯我一樣的錯誤之前我一直認為springboot的高版本對低版本有良好的相容性 其實並沒有 到了高版本會出現很多新的內容 甚至是以前的內容都
Python爬蟲系列(一):從零開始,安裝環境
tar 公司 pip nal 網頁 解析 目標 http caption 在上一個系列,我們學會使用rabbitmq。本來接著是把公司的celery分享出來,但是定睛一看,celery4.0已經不再支持Windows。公司也逐步放棄了服役多年的celery項目。恰好,公司找
技術乾貨:從零開始,教你設計一個百萬級的訊息推送系統
1、點評 本文主要分享的是如何從零設計開發一箇中大型推送系統,因限於篇幅,文中有些鍵技術只能一筆帶過,建議有這方面興趣的讀者可以深入研究相關知識點,從而形成橫向知識體系。 本文適合有一定開發、架構經驗的後端程式設計師閱讀,文內個別技術點可能並非最佳實踐,但至少都是生動的實踐分享,至少能起到拋磚引玉的作用
現代前端開發路線圖:從零開始,一步步成為前端工程師
編者按:很多人都想學程式設計。但是苦於沒有具體的步驟和指導。比如想找份前端開發的工作,卻不知道應該先學習什麼再學習什麼,也不知道該選擇什麼樣的工具。因為經常被人問到類似的問題,全棧開發者Kamran Ahmed索性在github上制訂了一份現代前端開發的路線圖,並且用一篇文章
GPU 挖礦:從零開始,擁有自己的比特幣
以比特幣為代表的數字貨幣作為區塊鏈技術的重要應用,正在慢慢進入人們的視野,擁有自己的數字資產也是一件很酷的事情,如果你不想買,那麼最好的獲取方法就是挖礦。挖礦之前,我需要作幾個簡單的說明,以澄清潛在的誤區:首先,是不是數字貨幣只有比特幣呢?答案顯然是否定的。數字貨幣行情分析網站非小號目前共收錄了 1700+
從0開始,部署.NetCore並構建非阻塞高併發伺服器(2)
工具篇看我這篇部落格想搭建伺服器的朋友多半是想在Linux上使用,正所謂工欲善其事必先利其器,一個好用的SSH對我們的工作效率影響也很大,簡單的說下我在Win下常用的SSH軟體和使用教程,老手自動忽略即可推薦工具1--WinSCPWinSCP可以說是我最常用的遠端連線Linu
Spring Cloud 系列之 Alibaba Nacos 註冊中心(一)
前言 從本章節開始,我們學習 Spring Cloud Alibaba 相關微服務元件。 Spring Cloud Alibaba 介紹 Spring Cloud Alibaba 致力於提供微服務開發的一站式解決方案。此專案包含開發分散式應用微服務的必需元件,方便開發者通過 Spring Cloud
【微服務】之七:輕松搞定SpringCloud微服務-API權限控制
cat https lte urn 錯誤碼 netflix req ons 體系 權限控制,是一個系統當中必須的重要功能。張三只能訪問輸入張三的特定功能,李四不能訪問屬於趙六的特定菜單。這就要求對整個體系做一個完善的權限控制體系。該體系應該具備針區分用戶、權限、角色等各種
【微服務】之六:輕松搞定SpringCloud微服務-API網關zuul
公司 create lan ice 子項目 專題 系統 如果 rose 通過前面幾篇文章的介紹,我們可以輕松搭建起來微服務體系中比較重要的幾個基礎構建服務。那麽,在本篇博文中,我們重點講解一下,如何將所有微服務的API同意對外暴露,這個就設計API網關的概念。 本系列教
【深入Java虛擬機】之二:Class類文件結構
本質 拒絕 處理 implement align 默認值 改變 占用 至少 平臺無關性 Java是與平臺無關的語言,這得益於Java源代碼編譯後生成的存儲字節碼的文件,即Class文件,以及Java虛擬機的實現。不僅使用Java編譯器可以把Java代碼編譯成存儲字節