springcloud项目的基本搭建

SpringCloud是什么?

  springcloud是一系列框架的有序集合。它利用springboot的开发便利性巧妙地简化了分布式系统基础设施的开发

如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。
   Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,
   通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

SpringCloud的核心功能:

   服务注册与发现: Spring Cloud Eureka
   负载均衡:       Spring Cloud Ribbon
   断路器:         Spring Cloud Hystrix
   声明式服务调用: Spring Cloud Feign
   路由:           Spring Cloud Zuul
   分布式配置中心: Spring Cloud Config   

SpringCloud的版本说明
   springcloud项目是由多个独立项目集合而成的,每个项目都是独立的,各自进行自己的迭代和版本发布。
   所以springcloud不方便使用版本号来管理,而是使用版本名。以避免和子项目版本号的冲突。
   
   版本名的来源是伦敦的地铁站名,以字母排序。比如最早的Release版本为Angel,第二个Release版本为Brixton。。。

   当一个版本的update积累的比较多或者解决了一个严重bug时,会发布一个ServiceRelease版本,简称SR,
   后面带的数字就是该大版本下的第一次发布。

创建springcloud项目

项目名简述:

     springcloud01         主模块  quickstart项目 
     eureka-server       子模块  springboot项目
     eureka-provider     子模块  springboot项目
     eureka-consumer01   子模块  springboot项目
     eureka-consumer02   子模块  springboot项目

第一步:创建主模板Maven项目的  Maven-archetype-quickstart

File----New----Project

xx1

xx2

xx3

xx4

然后下一步,finish完成

第二步: 创建子模板  springboot项目

x1

 x2

x3

x4

最后finish完成。按照这个步骤创建好剩下的三个项目

到这里来项目就创建完了

在模块中下载SpringCloud架包,并且子模块继承父模块

第一步:到https://start.spring.io/网站中,生成一个项目

xxx3

xxx2

xxx1

把压缩文件中pom.xml里面的所有内容复制到eureka-server中的pom.xml中

然后改二处地方

第一处:将

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.11.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
  </parent>

改成

<parent>
    <groupId>springcloud01</groupId><!--这里是主模块的名字-->
    <artifactId>springcloud01</artifactId><!--这里是主模块的名字-->
    <version>1.0-SNAPSHOT</version><!--版本号-->
    <relativePath/> <!-- lookup parent from repository -->
</parent>

第二处:将<description>Demo project for Spring Boot</description>改为 <packaging>jar</packaging>

注:如果它org.springframework.boot架包报错,就把自己本地仓库的lastup文件后缀名的删除,然后把代码中下载的test的架包删除,到父模块中下载

附代码

子模块 

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>springcloud01</groupId>
        <artifactId>springcloud01</artifactId>
        <version>1.0-SNAPSHOT</version>
        <relativePath/> <!-- 改动第一处 -->
    </parent
    <groupId>com.ywy</groupId>
    <artifactId>eureka-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>eureka-server</name>
    <packaging>jar</packaging>

    <!--<properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.SR4</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>

</project>

父模块 springcloud01中

<?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.11.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>

  <groupId>springcloud01</groupId>
  <artifactId>springcloud01</artifactId>
  <version>1.0-SNAPSHOT</version>

  <name>springcloud01</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <!--配置字符编码-->
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
    <!--从压缩包中复制过来的-->
    <java.version>1.8</java.version>
    <spring-cloud.version>Greenwich.SR4</spring-cloud.version>
  </properties>

  <!--配置子模块-->
  <modules>
    <module>eureka-server</module>
  </modules>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

    <!--这里是下载的公共都会用到的架包-->
    <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>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-jar-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
        <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
        <plugin>
          <artifactId>maven-site-plugin</artifactId>
          <version>3.7.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-project-info-reports-plugin</artifactId>
          <version>3.0.0</version>
        </plugin>
            <!--子模块中复制的-->
          <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
          </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

还有最后三个操作

第一:在父(主)模块中的resources的文件夹中的application的配置(我用的是yml)

# 端口号
server:
  port: 7101
# 服务注册相关配置
eureka:
  # 服务实例主机名
  instance:
    hostname: localhost
  # 服务提供者配置
  client:
    # registerWithEureka=false表示当前服务注册中心不在其他服务注册中心进行注册(当服务注册中心是单点而非高可用时的配置方式)
    # fetchRegistry=false表示当前服务注册中心不获取其他服务注册中心的注册信息(当服务注册中心是单点而非高可用时的配置方式)
    # 这两个配置,只有在当服务注册中心是单点配置时必然为false。
    registerWithEureka: false
    fetchRegistry: false
    # 注册中心地址,即http://localhost:7101/eureka
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

第二:在子模块中的resources的文件夹中application的配置

# 端口号
server:
  port: 7201
# 服务名称
spring:
  application:
    name: eureka-provider
# 服务注册与发现相关配置
eureka:
  client:
    # 注册中心地址
    serviceUrl:
      defaultZone: http://localhost:7101/eureka/

第三步:

主模块中eureka-server中的启动类加@EnableEurekaServer

在子模块中启动类EurekaProviderApplication.java上添加@EnableEurekaClient注解,点击运行即可,

打开浏览器,输入:http://localhost:7101即可

如果有问题,可以问我,谢谢。

发布了62 篇原创文章 · 获赞 6 · 访问量 2569

猜你喜欢

转载自blog.csdn.net/qq_44424498/article/details/103494342
今日推荐