1.单体应用:全部资源都在一个应用,打包成一个war包,一个Tomcat运行,运行在一个进程.java
a) 解决方案:能够作集群,可是不方便局部扩展(对某一个模块单独集群),维护,开发,升级麻烦,技术选型单一,数据库选型单一web
2.微服务:一个系统多个微小服务,每一个服务专一一个业务.每一个服务都有各自的进程,微服务之间经过网络通讯协议进行数据交互(一般是使用HTTP的restFul风格传递)spring
a) 优点:技术选型多元化,数据库选型多元化,维护方便,方便作局部拓展,每一个服务都有单独的进程数据库
b) Dubbo和SpringCloudapache
i. Dubbo的通讯协议RPC(基于TCP通讯)springboot
ii. SpringCloud的通讯协议HTTP对TCP进行了一次封装,性能相对于Dubbo而言较低服务器
3.SpringCloud网络
a) 微服务入门app
b) Maven多模块环境搭建.maven
i.搭建父项目模块
<?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>cn.itsource</groupId> <artifactId>springboot-parent</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <modules>
//父项目的各个子模块项目 <module>springboot-eureka</module> <module>springboot-userclient</module> <module>springboot-deptprovider</module> </modules> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <spring-cloud.version>Finchley.SR1</spring-cloud.version> <springboot.version>2.0.5.RELEASE</springboot.version> </properties> <!--版本依赖管理工具--> <dependencyManagement> <dependencies> <!--springboot版本控制--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!--springCloud版本控制--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${springboot.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> </project>
ii. 注册中心服务端环境搭建
<dependencies> <!--springboot支持--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--Eureka服务端支持--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> // spring-cloud-starter-netflix-eureka-server包含了spring-cloud-starter-netflix-eureka-client包 </dependency> </dependencies>
spring: application: name: spring-cloud-eureka server: port: 7001 eureka: instance: hostname: localhost client: #不向Eureka注册本身 register-with-eureka: false #不检查其余的EurekaServer节点 fetch-registry: false service-url: #设置eureka服务器所在的地址,查询服务和注册服务程序都注册到这个地址(服务暴露的地址) defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
@SpringBootApplication @EnableEurekaServer public class SpringBootApplicationConfig_7001 { public static void main(String[] args) { SpringApplication.run(SpringBootApplicationConfig_7001.class,args); } }
iii. 消费者和提供者客户端环境搭建
<dependencies> <!--springboot支持--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--Eureka服务端支持--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> </dependencies>
2.Application.yml配置文件配置
spring: application: name: SPRING-CLOUD-USER server: port: 8001 eureka: instance: hostname: localhost client: service-url: #设置eureka服务器所在的地址,查询服务和注册服务程序都注册到这个地址(服务暴露的地址) #defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ defaultZone: http://localhost:7001/eureka
3.注册到注册中心:客户端服务启动类
@SpringBootApplication @EnableEurekaClient public class SpringbootApplication_8001 { public static void main(String[] args) { SpringApplication.run(SpringbootApplication_8001.class,args); } }
若是有多个服务,就在父模块下面搭建多个子模块,作相同的配置进行服务注册到注册中心.