SpringCloud详细解析(1)

SpringCloud API:
https://springcloud.cc/spring-cloud-dalston.html#spring-cloud-ribbon

SpringCloud中文网:
https://springcloud.cc/

SpringCloud组件中文文档:
https://springcloud.cc/spring-cloud-netflix.html

什么是微服务架构?

1

通常而言,微服务架构师一种架构模式或者说是一种架构风格,他提倡将单一的程序划分成一组小的服务,每个服务运行在独立的自己的进程中,服务之间互相协调,互相配合,为用户提供最终价值。服务之间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API)。每个服务都围绕着具体的业务进行构建,并且能够独立的部署到生产环境,类生产环境等。另外,应尽量避免统一的,集中式的服务管理机制。对具体的服务而言,应根据上下文,选择合适的语言,工具对其构建,可以有一个非常轻量级的集中式来管理协调这些服务,可以使用不同的语言编写服务,也可以使用不同的数据存储。

2

从技术的角度来说,微服务的核心就是将统一的一站式应用,根据具体的业务拆分成一个个的服务,彻底的去耦合,每个微服务提供单一的业务功能的服务,一个服务做一件事,其实就是一种小二独立的处理过程,类似进程概念,能够独立的自行启动和销毁,拥有自己的独立数据库。

微服务

微服务 eclipse工具里面用maven开发的一个个独立的小module ,它具体使用SpringBoot开发的一个小 的模块,专业的事情交给专业的模块来做,一个模块就做一件事情,强调的是一个个的个体,每个个头完成的是一个具体的功能或者任务。

>

总的而言微服务是微服务架构的一个子集

微服务的优缺点

优点:每个服务足够狗内聚,足够小,代码容易容易理解这样的能够聚焦一个指定的业务功能和业务需求,开发简单,开发效率高,一个服务可以专心的只做一件事情,微服务 能够被小团队单独开发,2-5人的小团队微服务是松耦合的,有功能意义 的服务,无论开发阶段还是部署阶段都是独立的,微服务使用不同的语言来开发。
容易和第三方集成,微服务允许容易且灵活的方式集成自动部署,通过持续集成工具,如jenkins,Hudson,bamboo,微服务容易被一个开发人员理解,开发,修改和维护,这样小团队能够更加关注自己的劳动成果,无需通过合作才能体现价值。
微服务允许利用融合最新的技术,
微服务只是业务逻辑的的代码,不会和HTML ,CSS或者其他的界面工具组合。
每个微服务都有自己的存储能力,可以自己独立的数据库也可以有同一的数据库,

扫描二维码关注公众号,回复: 187298 查看本文章

>

缺点:
开发人员需要处理分布式系统的复杂性,
多服务运维难度,随着服务的增加而增加,
系统部署依赖,
数据一致性,
系统集成测试
性能监控

微服务技术栈

含义:多种技术的集合体

这里写图片描述

这里写图片描述

SpringCloud是什么?

SpringCloud:基于SpringBoot提供的一套微服务解决方案,包括服务注册与发现,配置中心,全链路监控,服务网关,负载均衡,熔断器组件,除了基于NetFlix的开源组件做高度抽象封装之外,还有一些选型中立的开源组件。
SpringCloud是利用SpringBoot开发的便捷性巧妙的简化分布式系统基础设施的开发,SpringCloud为开发人员提供快速构建分布式系统 的一些工具,包括配置管理,服务发现,断路器,路由,微代理,事件总线,全局锁,决策竞争,分布式会话等等,它门可以用SpringBoot的开发风格做到一键启动和部署。

SpringBoot和SpringCloud的关系

SpringBoot专注于快速方便的开发单个个体服务

>

SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体服务整合并且管理起来,为各个微服务之间提供,配置管理服务发现,断路器,路由器,微代理,事件总线,全局锁,决策竞争,分布式会话等集成服务。

>

Springboot可以离开SpringCloud单独的开发项目,而SpringCloud却离不开SpringBoot

>

SpringBoot专注于快速,方便的开发单体的服务,SpringCloud关注于全局的服务治理框架。

微服务:案例1
构建四个项目

 microserverecloud  整体父工程  有自公共子模块所需的jar包等提取出来其他的自工程不用再导入jar包
 microserverecloud-api 公共子模块  提供其他的子模块都要使用的entity或者都要使用的方法
 microserverecloud-provider-dept  服务提供者
 microservercloud-consumer-dept  服务消费者

microserverecloud 整体父工程:
提供jar包:注意pom.xml文件

 注意点:
 1 <packaging>pom</packaging> 聚合项目

 子模块
 2 <modules>
    <module>../microserverecloudapi</module>
    <module>../microserverecloudproviderdept</module>
    <module>../microservercloudconsumerdept</module>
   </modules>
<?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>yiche.com</groupId>
  <artifactId>microserverecloud</artifactId>
  <version>1.0-SNAPSHOT</version>
  <!--注意:父工程师pom工程-->
  <packaging>pom</packaging>

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

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>


  <parent>

    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.6.RELEASE</version>
  </parent>



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

    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>



  </dependencies>


  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>Dalston.SR1</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <modules>
    <module>../microserverecloudapi</module>
    <module>../microserverecloudproviderdept</module>
    <module>../microservercloudconsumerdept</module>
   </modules>

  <build>
    <finalName>microserverecloud</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.0.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.7.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.20.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.0</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>
      </plugins>
    </pluginManagement>
  </build>
</project>

microserverecloud-api 公共子模块:

存在实体类以供调用

public class Employee implements Serializable{

 private Integer id;
 private String name;
 private Double salary;
 private Integer age;
 private String dbName; //子工程使用的数据库,因为每个微服务可以使用自己的数据库

}

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">
    <parent>
        <artifactId>microserverecloud</artifactId>
        <groupId>yiche.com</groupId>
        <version>1.0-SNAPSHOT</version>
        <relativePath>../microserverecloud/pom.xml</relativePath>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <groupId>yiche.com.cc</groupId>
    <artifactId>microserverecloud-api</artifactId>
    <version>1.0-SNAPSHOT</version>

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


    <dependencies>



    </dependencies>

    <build>
        <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
            <plugins>
                <plugin>
                    <artifactId>maven-clean-plugin</artifactId>
                    <version>3.0.0</version>
                </plugin>
                <!-- see http://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.7.0</version>
                </plugin>
                <plugin>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.20.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>
            </plugins>
        </pluginManagement>
    </build>
</project>

microserverecloud-provider-dept 服务提供者
pom文件:

注意点: 这样的方法去调用公共的实体类或者方法



yiche.com.cc

microserverecloud-api
${project.version}

<?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">
    <parent>
        <artifactId>microserverecloud</artifactId>
        <groupId>yiche.com</groupId>
        <version>1.0-SNAPSHOT</version>
        <relativePath>../microserverecloud/pom.xml</relativePath>
    </parent>
    <modelVersion>4.0.0</modelVersion>

     <groupId>yiche.com</groupId>
    <artifactId>microserverecloud-provider-dept</artifactId>
    <version>1.0-SNAPSHOT</version>

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


    <dependencies>
        <!--在这里要引用公共自工程的资源 比如说employee实体类  或者非法-->
        <dependency>
             <!--公共子模块的groupId-->
            <groupId>yiche.com.cc</groupId>
            <!--公共子模块的artifactId-->
            <artifactId>microserverecloud-api</artifactId>
            <version>${project.version}</version>
        </dependency>

    </dependencies>

    <build>
        <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
            <plugins>
                <plugin>
                    <artifactId>maven-clean-plugin</artifactId>
                    <version>3.0.0</version>
                </plugin>
                <!-- see http://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.7.0</version>
                </plugin>
                <plugin>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.20.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>
            </plugins>
        </pluginManagement>
    </build>
</project>

microservercloud-consumer-dept 服务消费者和服务提供者一致
注意点:

 <!--在这里要引用公共自工程的资源 比如说employee实体类  或者非法-->
        <dependency>
             <!--公共子模块的groupId-->
            <groupId>yiche.com.cc</groupId>
            <!--公共子模块的artifactId-->
            <artifactId>microserverecloud-api</artifactId>
            <version>${project.version}</version>
        </dependency>

猜你喜欢

转载自blog.csdn.net/didi7696/article/details/80190899