微服务环境搭建SpringCloud
1.什么是单体应用:
单体应用项目中的资源都在一个应用中,打包成一个war包,用一个tomcat启动的服务就是单体应用
单体应用的好处:
(1)小的项目性能比微服务的性能高
(2)集成快,适合数据量小的项目,比如内部自己用的项目
单体应用的坏处:
(1)一个模块挂了,整个项目都受影响
(2)单个tomcat更能处理的并发有限,可以做集群,但是不方便局部(某一个模块)扩展
(3)维护/开发/升级比较麻烦
(4)代码臃肿,编译,打包都比较慢
(5)技术选型单一
(6)数据库选型单一
2.什么是微服务:
微服务就是把一个大的系统拆分成多个小的服务,每个服务只专注自己的一个业务,每个服务有各自的进程
微服务之间使用的网络通信协议进行数据交换的(通常是基于HTTP的RESTful API)
3.微服务的远程调用方式:
1.RPC
(1).Remote Produce Call远程过程调用,类似的还有RMI。自定义数据格式,基于原生TCP通信,速度快,效率高。早期的webservice,现在热门的dubbo,都是RPC的典型
2.Http
(1).Http:http其实是一种网络传输协议,基于TCP,规定了数据传输的格式。现在客户端浏览器与服务端通信基本都是采用Http协议。也可以用来进行远程服务调用。缺点是消息封装臃肿。
现在热门的Rest风格,就可以通过http协议来实现
4.认识RPC
RPC,即 Remote Procedure Call(远程过程调用),是一个计算机通信协议。 该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程。说得通俗一点就是:A计算机提供一个服务,B计算机可以像调用本地服务那样调用A计算机的服务。
5.RPC调用流程图
6.认识Http
Http协议:超文本传输协议,是一种应用层协议。规定了网络传输的请求格式、响应格式、资源定位和操作的方式等。但是底层采用什么网络传输协议,并没有规定,不过现在都是采用TCP协议作为底层传输协议。说到这里,大家可能觉得,Http与RPC的远程调用非常像,都是按照某种规定好的数据格式进行网络通信,有请求,有响应。没错,在这点来看,两者非常相似,但是还是有一些细微差别。
- RPC并没有规定数据传输格式,这个格式可以任意指定,不同的RPC协议,数据格式不一定相同。
- Http中还定义了资源定位的路径,RPC中并不需要
7.单体应用和微服务的比较图
8.微服务的特点
技术选型多样化
每个微服务专注一个业务
每个维护有自己的进程
微服务之间通过网络协议进行通信
方便做局部拓展
开发/维护/升级更方便
9.微服务的缺点
技术要求比较高
部署麻烦
10Springcloud入门环境的搭建
1.搭建注册中心
//创建多模块maven工程 springcloud-parent springcloud-eureka-server-1000 //注册中心EurekaServer springcloud-order-server-3000 //订单服务EurekaClient ,消费者 springcloud-user-server-2000 //用户服务EurekaClient ,提供者
2.父工程导入依赖
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.5.RELEASE</version> </parent> <groupId>cn.itsource</groupId> <artifactId>dpringcloudday1</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <modules> <module>springcloud-eureka-server-1000</module> <module>springcloud-user-server-2000</module> <module>springcloud-order-server-3000</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> </properties> <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>
3.创建子工程
4.这个子公共就是注册中心创建Springboot配置类
package cn.itsource; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @EnableEurekaServer//开启注册中心 @SpringBootApplication public class EurekaServerApplication1000 { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication1000.class,args); } }
5.yml类的配置
server: port: 1000 eureka: instance: hostname: localhost client: registerWithEureka: false //registerWithEureka是关闭注册服务默认为true因为这个 fetchRegistry: false serviceUrl: defaultZone: http://localhost:1000/eureka/
6.User用户模块加入
package cn.itsource; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; //配置类 @SpringBootApplication public class UserServerApplication2000 { public static void main(String[] args) { SpringApplication.run(UserServerApplication2000.class); } }
yml配置:
eureka: client: serviceUrl: defaultZone: http://localhost:1000/eureka/ #注册中心地址 server: port: 2000
7.先启动注册模块 端口名为1000然后访问过后再启动其他的子模块
这里表示你有在这个注册页面有多少个实例模块
原文:https://www.cnblogs.com/1999wang/p/11537694.html