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或者其他的界面工具组合。
每个微服务都有自己的存储能力,可以自己独立的数据库也可以有同一的数据库,
>
缺点:
开发人员需要处理分布式系统的复杂性,
多服务运维难度,随着服务的增加而增加,
系统部署依赖,
数据一致性,
系统集成测试
性能监控
微服务技术栈
含义:多种技术的集合体
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>