zoukankan      html  css  js  c++  java
  • SpringCloud无废话入门01:最简SpringCloud应用

    1.创建Parent

            Parent很简单,创建一个空的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/xsd/maven-4.0.0.xsd">

        <modelVersion>4.0.0</modelVersion>

        <groupId>com.zuikc</groupId>

        <artifactId>springcloud.parent</artifactId>

        <packaging>pom</packaging>

        <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.创建服务提供者provider01、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个服务,

            感谢关注“码农星球”。本文版权属于“码农星球”。我们提供咨询和培训服务,关于本文有任何困惑,请关注并联系我们。

  • 相关阅读:
    python学习-(__new__方法和单例模式)
    jQuery弹性展开收缩菜单插件gooey.js
    轻量级Modal模态框插件cta.js
    基于jq流畅度非常好的图片左右切换焦点图
    基于jQuery实现的腾讯互动娱乐网站特效
    基于jQuery和CSS3炫酷图片3D旋转幻灯片特效
    可嵌入图片视频jQuery全屏滑块
    基于jQuery仿迅雷影音官网幻灯片特效
    基于jQuery自适应宽度跟高度可自定义焦点图
    基于jQuery实现汉字转换成拼音代码
  • 原文地址:https://www.cnblogs.com/luminji/p/10594312.html
Copyright © 2011-2022 走看看