SpringCloud無廢話入門01:最簡SpringCloud應用

1.建立Parentjava

        Parent很簡單,建立一個空的maven項目,pom以下:web

<?xml version="1.0" encoding="UTF-8"?>spring

<project xmlns="http://maven.apache.org/POM/4.0.0"apache

         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"api

         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.zuikc</groupId>架構

    <artifactId>springcloud.parent</artifactId>app

    <packaging>pom</packaging>webapp

    <version>1.0-SNAPSHOT</version>

    <modules>

        <module>eureka01</module>

        <module>eureka02</module>

        <module>provider01</module>

        <module>provider02</module>

    </modules>

    <parent>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-parent</artifactId>

        <version>2.1.3.RELEASE</version>

    </parent>

</project>

        注意兩個地方:

        1:spring-boot-starter-parent要被指定爲整個解決方案的parent;

        2:4個Modul隨着下文項目的建立會被自動建立;

2.建立eureka01

        若是說dubbo的註冊中心zookeeper,那麼在spring cloud中的註冊中心就是:eureka,而且使用起來還要更容易上手一些。

        如今,就讓咱們來建立第一個eureka站點。

        首先先建立一個maven子模塊,並添加公用依賴。

        類型選擇以下:

        建立完畢,Pom修改成以下:

<?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/maven-v4_0_0.xsd">

    <parent>

        <artifactId>springcloud.parent</artifactId>

        <groupId>com.zuikc</groupId>

        <version>1.0-SNAPSHOT</version>

    </parent>

    <modelVersion>4.0.0</modelVersion>

    <packaging>war</packaging>

    <name>eureka01</name>

    <artifactId>eureka01</artifactId>

    <dependencyManagement>

        <dependencies>

            <dependency>

                <groupId>org.springframework.cloud</groupId>

                <artifactId>spring-cloud-dependencies</artifactId>

                <version>Greenwich.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>

            </plugin>

        </plugins>

    </build>

    <dependencies>

        <!--

            <dependency>

              <groupId>org.springframework.boot</groupId>

              <artifactId>spring-boot-starter-web</artifactId>

            </dependency>

        -->

        <dependency>

            <groupId>org.springframework.cloud</groupId>

            <artifactId>spring-cloud-starter-eureka-server</artifactId>

            <version>1.4.6.RELEASE</version>

        </dependency>

        <dependency>

            <groupId>javax.xml.bind</groupId>

            <artifactId>jaxb-api</artifactId>

            <version>2.3.1</version>

        </dependency>

        <dependency>

            <groupId>com.sun.xml.bind</groupId>

            <artifactId>jaxb-core</artifactId>

            <version>2.3.0</version>

        </dependency>

        <dependency>

            <groupId>com.sun.xml.bind</groupId>

            <artifactId>jaxb-impl</artifactId>

            <version>2.3.1</version>

        </dependency>

        <dependency>

            <groupId>javax.activation</groupId>

            <artifactId>activation</artifactId>

            <version>1.1.1</version>

        </dependency>

    </dependencies>

</project>

        代碼:

package com.zuikc;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

/**

 * @ClassName RegisterApplication

 * @Description 咱們提供諮詢和培訓服務,關於本文有任何困惑,請關注並聯系「碼農星球」

 * @Author 碼農星球

 **/

@EnableEurekaServer

@SpringBootApplication

public class RegisterApplication {

    public static void main(String[] args) {

        SpringApplication.run(RegisterApplication.class,args);

    }

}

application.yml

server:

  port: 9091

eureka:

  instance:                   #定義Eureka實例

    hostname: eureka-9091.com #Eureka實例所在的主機名

  client:

    register-with-eureka: false #表示是否將本身註冊到Eureka Server上,默認爲true

    fetch-registry: false       #表示是否從Eureka Server上獲取註冊信息,默認爲true

    service-url:

      defaultZone: http://localhost:9091/eureka/

        接着run RegisterApplication,若是沒有異常報錯,再從瀏覽器訪問http://localhost:9091/,看到以下界面,則說明成功。

3.建立服務提供者provider0一、provider02

        有了註冊中心了,如今,讓咱們寫兩個服務提供者站點。

        服務提供者,也叫Eureka客戶端,它把本身註冊到Eureka服務器中,並週期性的發送心跳來更新它的服務租約。

        爲何要兩個呢?爲了體現分佈式呀。咱們建立兩個子模塊,它們的類型都是webapp,以下,

        Pom爲:

<?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/maven-v4_0_0.xsd">

    <parent>

        <artifactId>springcloud.parent</artifactId>

        <groupId>com.zuikc</groupId>

        <version>1.0-SNAPSHOT</version>

    </parent>

    <modelVersion>4.0.0</modelVersion>

    <packaging>war</packaging>

    <name>provider01</name>

    <artifactId>provider01</artifactId>

    <dependencyManagement>

        <dependencies>

            <dependency>

                <groupId>org.springframework.cloud</groupId>

                <artifactId>spring-cloud-dependencies</artifactId>

                <version>Greenwich.RELEASE</version>

                <type>pom</type>

                <scope>import</scope>

            </dependency>

        </dependencies>

    </dependencyManagement>

    <dependencies>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter</artifactId>

        </dependency>

        <dependency>

            <groupId>org.springframework.cloud</groupId>

            <artifactId>spring-cloud-starter-eureka</artifactId>

            <version>1.4.6.RELEASE</version>

        </dependency>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-test</artifactId>

            <scope>test</scope>

        </dependency>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-web</artifactId>

        </dependency>

    </dependencies>

</project>

        而後啓動類爲:

package com.zuikc;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

/**

 * @ClassName Provider1Application

 * @Description 咱們提供諮詢和培訓服務,關於本文有任何困惑,請關注並聯系「碼農星球」

 * @Author 碼農星球

 **/

@SpringBootApplication

@EnableDiscoveryClient

public class Provider1Application {

    public static void main(String[] args) {

        SpringApplication.run(Provider1Application.class, args);

    }

}

        而後controller爲:

package com.zuikc;

import org.springframework.context.annotation.Configuration;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.ResponseBody;

/**

 * @ClassName HelloController

 * @Description 咱們提供諮詢和培訓服務,關於本文有任何困惑,請關注並聯系「碼農星球」

 * @Author 碼農星球

 **/

@Configuration

@Controller

public class HelloController {

    @RequestMapping("hello")

    @ResponseBody

    public String hello() {

        return "hello zuikc.com!";

    }

}

        而後application.yml爲:

server:

  port: 9191

spring:

  application:

    name: hello-service

eureka:

  client:

    service-url:

      defaultZone: http://localhost:9091/eureka/

        注意,第二個服務項目,上面的配置中的port爲9192就是了,其它配置和控制器自己的代碼都如出一轍。

        而後,先啓動eureka,再分別啓動兩個服務提供者。結果以下:

4.Eureka的集羣

        如下這張圖是springcloud著名的架構圖,

        在這張圖中,咱們能夠看到,包括EurekaServer(即註冊中心)自己,也是不止一個的。這是由於,在實際的應用中,註冊中心理應是能夠被集羣的。這樣,當集羣中有分片發生故障的時候,Eureka會自動轉入自我保護模式。它容許在分片發生故障的時候繼續提供服務的發現和註冊,當故障分配恢復時,集羣中的其餘分片會把他們的狀態再次同步回來。

5.建立eureka02

        既然說到了註冊中心的集羣,那咱們就來繼續建立一個eureka服務器吧。

        在parent下創建子module。全部過程和建立eureka01同樣,而且pom和RegistApplication也同樣。

        惟一須要改變的就是配置文件。

        首先,然咱們回到eureka01中,修改application.yml以下:

server:

  port: 9091

eureka:

  instance:                   #定義Eureka實例

    hostname: eureka-9091.com #Eureka實例所在的主機名

  client:

    #register-with-eureka: false #表示是否將本身註冊到Eureka Server上,默認爲true

    #fetch-registry: false       #表示是否從Eureka Server上獲取註冊信息,默認爲true

    service-url:

      defaultZone: http://localhost:9092/eureka/

    server:

      enable-self-preservation: false

spring:

  application:

    name: eureka-service

        首先,咱們將client下兩個不容許本身註冊的屬性註釋掉。

        同時,將service-url的地址指向到了第二個註冊中心的地址。也就是說,兩個註冊中心要互相引用。

        其次,咱們加了enable-self-preservation: false,這屬性默認是開啓的,若是默認開啓,註冊中心的服務列表就算有些服務斷開了,也會繼續保存。

        最後,咱們加了spring這個屬性節點,將自己做爲服務命名爲eureka-service。

        Ok,而後再來修改第二個eureka服務器的配置文件,

server:

  port: 9092

eureka:

  instance:                   #定義Eureka實例

    hostname: eureka-9092.com #Eureka實例所在的主機名

  client:

    #register-with-eureka: false #表示是否將本身註冊到Eureka Server上,默認爲true

    #fetch-registry: false       #表示是否從Eureka Server上獲取註冊信息,默認爲true

    service-url:

      defaultZone: http://localhost:9091/eureka/

    server:

      enable-self-preservation: false

spring:

  application:

    name: eureka-service

        整個項目建立完畢,目錄結構大概是這樣的,

        接下來,讓咱們首先啓動eureka01。注意,啓動01的時候因爲02尚未啓動,因此會報鏈接不到02,可是沒有關係,忽略就行,由於02立刻就會啓動,它會自動續約。

        接着啓動eureka02,而後再啓動兩個provider吧。

        能夠看到,4個服務都已經啓動了,

        注意,這個時候去9092,也就是eureka02,也能看到這4個服務,

        感謝關注「碼農星球」。本文版權屬於「碼農星球」。咱們提供諮詢和培訓服務,關於本文有任何困惑,請關注並聯系咱們。

相關文章
相關標籤/搜索