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); } }
若是有多個服務,就在父模塊下面搭建多個子模塊,作相同的配置進行服務註冊到註冊中心.