1. 程式人生 > >【微服務】之二:從零開始,輕鬆搞定SpringCloud微服務系列--註冊中心(一)

【微服務】之二:從零開始,輕鬆搞定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完美融合。

註冊中心服務原理

enter image description here

由上圖可以看出,藍色部分為註冊中心,黃色部分為一個生產者、消費者。所有應用都被同一個註冊中心納入管理。通常有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/ 可以看到已經啟動正常。
image.png

使用Maven 外掛進行打包

提醒:在打包之前需要本地已經安裝好Git/Maven並配置好環境變數。博主因為不喜歡使用Idea自帶的JDK/MAVEN/GIT,都是單獨安裝的。這個看個人喜好吧。
另外,博主喜歡使用命令進行驅動打包,因此對Idea的Terminal進行了重新配置,將Win下面CMD替換成了Git.bash,如果有同學感興趣可以自行體驗。

IDEA 預設Terminal 修改

開啟 File>>Settings,找到修改配置選項
Settings
然後將預設的Shell地址改成Git.
配置預設Shell

設定完成以後進行儲存。回到我們介面可以通過Alt + F12 快速開啟shell視窗。
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檔案。進行獨立啟動了。
image.png

使用命令可以啟動獨立的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代碼編譯成存儲字節