项目所有的资源都在一个应用中,打包成一个war包,使用一个tomcat去运行,运行在一个进程中
注意:传统的多模块是单体应用吗?
也是单体应用,只要所有的东西打成一个war/jar包,用一个tomcat去部署,就是单体应用
项目小的时候
微服务就是把一个大的系统,拆分成多个小的服务,每个微服务只专注一个业务 ,每个服务有各自的进程,各自的容器(tomcat), 微服务之间使用网络通信协议进行数据交互(通常是基于HTTP的RESTful API)。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oPwRLEWU-1581599745211)(SpringCloud.assets/1568704011520.png)]
Spring cloud是一个基于Spring Boot实现的服务治理工具包,用于微服务架构中管理和协调服务的
dubbo在通信方面的性能高于SpringCloud
1.SpringCloud 全家桶,全方位解决方案 , 基于Http协议通信 ,
2.dubbo是一个rpc框架,需要整合其他的组件来开发维护 ,通信协议基于原生的tcp ,
3.从通信上来说 ,dubbo略胜 , 从简单读来说,SpringCloud略胜 ,
4.功能的完整度来说SpringCloud胜利
springcloud-parent 父工程
springcloud-eureka-server-3000 //注册中心EurekaServer
springcloud-pay-server-2000 //支付服务EurekaClient ,消费者
springcloud-user-server-1000 //用户服务EurekaClient ,提供者
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.0.5.RELEASEversion>
parent>
<properties>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
<maven.compiler.source>1.8maven.compiler.source>
<maven.compiler.target>1.8maven.compiler.target>
properties>
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.12version>
dependency>
dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-dependenciesartifactId>
<version>Finchley.SR1version>
<type>pomtype>
<scope>importscope>
dependency>
dependencies>
dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
dependencies>
@EnableEurekaServer //开启注册中心
@SpringBootApplication
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
server:
port: 3000
eureka: #Eureka的配置
instance:
hostname: localhost #主机
client: #对Eureka客户端配置
registerWithEureka: false #注册中心自己 , 不准向注册中心自己注册
fetchRegistry: false #注册中心不需要 获取服务的通信地址清单
serviceUrl: #注册中心 服务的注册地址
#defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
defaultZone: http://localhost:3000/eureka/
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
dependencies>
@SpringBootApplication
public class UserServerApplication1000
{
public static void main( String[] args )
{
SpringApplication.run(UserServerApplication1000.class);
}
}
server:
port: 1000
eureka:
client:
serviceUrl:
defaultZone: http://localhost:3000/eureka/ #注册中心服务端的注册地址
instance:
prefer-ip-address: true
instance-id: user-server:1000
spring:
application:
name: user-server
springcloud-consumer-pay-server-2000模块和springcloud-producer-server-1000模块除了配置文件中的端口号不一样,其他都一样
server:
port: 2000
eureka:
client:
serviceUrl:
defaultZone: http://localhost:3000/eureka/ #注册中心服务端的注册地址
instance:
prefer-ip-address: true
instance-id: pay-server:2000
spring:
application:
name: pay-server
配置完两个pay和user服务,访问localhost:3000
测试
出现以下页面表示成功
如果只有一个EurekaSever,如果EurekaSever挂了那么整个微服务都不可用
EurekaServer高可用集群
修改C:\Windows\System32\drivers\etc目录下,hosts文件,
末尾添加
#使用SpringBoot多环境配置的方式来配置 2个 注册中心
#主配置
spring:
profiles:
active: peer1 #默认使用的环境
---
#第1个EurekaServer配置
spring:dddddddddddddddddd
profiles: peer1
application:
name: eureka-server
eureka:
instance:
hostname: peer1
prefer-ip-address: true
instance-id: eureka-server:3001
client:
serviceUrl:
defaultZone: http://peer2:3000/eureka/
server:
port: 3001
---
#第2个EurekaServer配置
spring:
profiles: peer2
application:
name: eureka-server
eureka:
instance:
hostname: peer2
prefer-ip-address: true
instance-id: eureka-server:3000
client:
serviceUrl:
defaultZone: http://peer1:3001/eureka/
server:
port: 3000
测试的时候记得更改Eureka的tomcat配置
先开启EurekaServer服务器,这时候会报错,是正常的,
因为当前Eureka服务找不到另一个端口Eureka服务,因为另一个还没有启动。
之后修改EurekaServer配置文件默认使用环境
再次启动Eureka,这时候不会报错,访问localhost:3000
,出现以下效果表示成功