Spring Cloud系列-- 服務(wù)治理簡單搭建

為什么要使用服務(wù)治理?

? 設(shè)想一下,我們正在寫代碼使用了提供REST API或者Thrift API的服務(wù),為了完成一次服務(wù)請(qǐng)求,代碼需要知道服務(wù)實(shí)例的網(wǎng)絡(luò)位置(IP地址和端口)。傳統(tǒng)應(yīng)用都運(yùn)行在物理硬件上,服務(wù)實(shí)例的網(wǎng)絡(luò)位置都是相對(duì)固定的。并且隨著系統(tǒng)功能越來越復(fù)雜,相應(yīng)的硬件配置也會(huì)越來越多比如集群配置,服務(wù)配置等。這些配置都需要手工去維護(hù),這種維護(hù)工作不僅復(fù)雜而且工作量非常大。

因此在微服務(wù)中,服務(wù)治理就應(yīng)運(yùn)而生了。服務(wù)治理框架有很多,但是核心的功能就是兩點(diǎn),服務(wù)注冊服務(wù)發(fā)現(xiàn)。

  • 服務(wù)注冊:在服務(wù)治理框架中,通常都會(huì)構(gòu)建一個(gè)注冊中心,每個(gè)服務(wù)單元向注冊中心登記自己提供的服務(wù),包括服務(wù)的主機(jī)與端口號(hào)、服務(wù)版本號(hào)、通訊協(xié)議等一些附加信息。注冊中心按照服務(wù)名分類組織服務(wù)清單,同時(shí)還需要以心跳檢測的方式去監(jiān)測清單中的服務(wù)是否可用,若不可用需要從服務(wù)清單中剔除,以達(dá)到排除故障服務(wù)的效果。
  • 服務(wù)發(fā)現(xiàn):在服務(wù)治理框架下,服務(wù)間的調(diào)用不再通過指定具體的實(shí)例地址來實(shí)現(xiàn),而是通過服務(wù)名發(fā)起請(qǐng)求調(diào)用實(shí)現(xiàn)。服務(wù)調(diào)用方通過服務(wù)名從服務(wù)注冊中心的服務(wù)清單中獲取服務(wù)實(shí)例的列表清單,通過指定的負(fù)載均衡策略取出一個(gè)服務(wù)實(shí)例位置來進(jìn)行服務(wù)調(diào)用。

Netflix Eureka搭建高可用注冊中心

我們這里為了方便整合版本,我們直接使用IDEA來創(chuàng)建服務(wù)端。

創(chuàng)建Eureka Server

1.點(diǎn)擊File 選擇NEW -> Project

step1.png

2.點(diǎn)擊下一步進(jìn)入到創(chuàng)建頁面

step2.png

3.點(diǎn)擊下一步,選擇Cloud Dicovery -- Eureka Server

step3.png

4.點(diǎn)擊下一步直至創(chuàng)建完成。

5.查看pom.xml以及maven依賴

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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.cloud</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.SR1</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
        </repository>
    </repositories>

</project>
step4.png

6.在啟動(dòng)引導(dǎo)類中加入注解 @EnableEurekaServer

@EnableEurekaServer
@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

7.在resources文件夾下創(chuàng)建兩個(gè)properties。

step5.png

application-peer1.properties

#服務(wù)ID
spring.application.name=eureka-server
#端口
server.port=1111
#實(shí)例主機(jī)名
eureka.instance.hostname=peer1
#是否注冊自己
eureka.client.register-with-eureka=true
#是否需要檢索服務(wù)
eureka.client.fetch-registry=true
#是否開啟自我保護(hù)
eureka.server.enable-self-preservation=false
#默認(rèn)URL
eureka.client.service-url.defaultZone=http://peer2:1112/eureka/
#是否啟動(dòng)健康診斷
eureka.client.healthcheck.enabled=true

application-peer2.properties

spring.application.name=eureka-server
server.port=1112

eureka.instance.hostname=peer2
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true
eureka.server.enable-self-preservation=false
eureka.client.service-url.defaultZone=http://peer1:1111/eureka/
eureka.client.healthcheck.enabled=true

注意由于是高可用注冊中心,他們既是服務(wù)提供方也是服務(wù)消費(fèi)方,所以對(duì)應(yīng)的客戶端URL(eureka.client.service-url.defaultZone)是指向?qū)Ψ降摹?/p>

啟動(dòng)Eureka Server

1.前期工作已經(jīng)做完了。我們現(xiàn)在需要將高可用注冊中心啟動(dòng)起來,首先我們需要改變一下本地訪問路徑。

step6.png

2.打開對(duì)應(yīng)的文件。修改其內(nèi)容。

step7.png

3.IDEA的啟動(dòng)配置修改

step8.png

4.添加springboot啟動(dòng)配置

step9.png

5.進(jìn)行簡單的配置,包括server的名稱,啟動(dòng)類的選擇,還有加載配置。

step10.png
step11.png

我們可以看到 兩個(gè)除了啟動(dòng)參數(shù)不同之外,其他的都是一樣的。

6.接下來讓我們啟動(dòng)一下看看效果。

step12.png

我們可以看到節(jié)點(diǎn)分片(DS Replicas)中已經(jīng)有了 peer2,同樣,如果我們訪問http://localhost:1112/,他的分片就是peer1。多節(jié)點(diǎn)的配置已經(jīng)完成。

我們從圖中 Instances currently registered with Eureka 下看到了這兩個(gè)服務(wù)的注冊信息,所以我們說高可用注冊中心的服務(wù)提供者也是服務(wù)的消費(fèi)者。

總結(jié)

我們發(fā)現(xiàn)其實(shí)搭建 Eureka Server 其實(shí)不難,但是我們要做到知其然并知其所以然。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容