SpringCloud-day1

文章目录

  • 一.单体应用和微服务
    • 一.单体应用
      • 1.什么的单体应用
      • 2.单体应用的问题
        • 缺点:
        • 优点:
    • 二.微服务架构
      • 1.什么是微服务架构
      • 2.微服务的优缺点
        • 优点:
        • 缺点
  • 二.SpringCloud简介
    • SpringCloud和Dubbo的区别
  • 三.SpringCloud入门
    • 一.SpringCloud组件:
    • 二.注册中心原理
    • 三.搭建注册中心
      • 1.创建多模块工程
      • 2.springcloud-parent模块
        • ①springcloud-parent导入依赖
      • 3.springcloud-eureka-server-3000模块
        • ①springcloud-eureka-server-3000导入依赖
        • ②springcloud-eureka-server-3000主配置类
        • ③springcloud-eureka-server-3000配置文件
        • ④测试
      • 4.springcloud-producer-user-server-1000模块
        • ①springcloud-producer-user-server-1000导入依赖
        • ②springcloud-producer-user-server-1000主配置类
        • ③springcloud-producer-user-server-1000配置文件
      • 5.springcloud-consumer-pay-server-2000模块
        • ①springcloud-consumer-pay-server-2000配置文件
      • 6.测试效果
      • 7.EurekaServer配置集群
        • 一.单节点故障
          • 1.什么是EurekaServer单节点故障
          • 2.解决方案
        • 二.搭建EurekaServer集群
          • ①为本机127.0.0.1配置别名
          • ②修改EurekaServer的配置文件
        • 三.测试效果

一.单体应用和微服务

一.单体应用

1.什么的单体应用

项目所有的资源都在一个应用中,打包成一个war包,使用一个tomcat去运行,运行在一个进程

注意:传统的多模块是单体应用吗?
也是单体应用,只要所有的东西打成一个war/jar包,用一个tomcat去部署,就是单体应用
SpringCloud-day1_第1张图片

2.单体应用的问题

缺点:
  • 扩展能力受限,不方便局部扩展
  • 复杂性高,项目大,代码臃肿
  • 不方便开发,不方便维护和升级
  • 模块和业务耦合性高
  • 一旦一个模块挂掉,整个项目挂掉,一个模块升级,整个项目升级
  • 技术选型单一
优点:

项目小的时候

  • 部署相对分布式来说较简单
  • 前期开发,项目搭建比较快
  • 项目小的时候,单体项目性能比较高

二.微服务架构

1.什么是微服务架构

微服务就是把一个大的系统,拆分成多个小的服务,每个微服务只专注一个业务 ,每个服务有各自的进程各自的容器(tomcat), 微服务之间使用网络通信协议进行数据交互(通常是基于HTTP的RESTful API)。
SpringCloud-day1_第2张图片

2.微服务的优缺点

优点:
  • 方便做局部拓展
  • 数据库选型多样化(分库)
  • 单个微服务复杂性低
  • 技术选型多样化
  • 服务和服务之间相对松耦合
  • 项目规模大,微服务整体性能好
  • 每个微服务,开发/维护/升级更方便
缺点
  • 技术和开发成本高
  • 微服务之间数据交互受网络影响
  • 项目总体来看比较复杂
  • 部署麻烦

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oPwRLEWU-1581599745211)(SpringCloud.assets/1568704011520.png)]

二.SpringCloud简介

Spring cloud是一个基于Spring Boot实现的服务治理工具包,用于微服务架构中管理和协调服务的

SpringCloud和Dubbo的区别

  • dubbo是rpc框架
  • SpringCloud是一系列微服务解决方案
  • dubbo基于tcp
  • SpringCloud基于http

dubbo在通信方面的性能高于SpringCloud
1.SpringCloud 全家桶,全方位解决方案 , 基于Http协议通信 ,
2.dubbo是一个rpc框架,需要整合其他的组件来开发维护 ,通信协议基于原生的tcp ,
3.从通信上来说 ,dubbo略胜 , 从简单读来说,SpringCloud略胜 ,
4.功能的完整度来说SpringCloud胜利

三.SpringCloud入门

一.SpringCloud组件:

  • 服务注册发现——Netflix Eureka ,管理服务的通信地址
  • 客服端负载均衡——Netflix Ribbon\Feign:请求分发,服务之间的调用
  • 断路器——Netflix Hystrix,解决微服务故障,降级,熔断,返回托底数据等
  • 服务网关——Netflix Zuul,微服务群的请求入口,保护微服务群的安全
  • 分布式配置——Spring Cloud Config,统一管理微服务的配置

二.注册中心原理

  • 注册中心的作用是管理微服务的通信地址,注册中心相当于服务端,每个微服务相当于客户端,所有微服务会在启动的时候都会向注册中心提交通信地址,实现注册。注册中心会形成一个服务通信地址清单。
  • 注册中心可以实现服务的自动上下线,通过心跳机制(每个n秒向注册中心发送请求,证明自己还活着),如果某个服务挂了,会被标志下线,服务不能再通过心跳机制发送请求,清单会移除掉该服务的信息,其他微服务也会同步清单。
    SpringCloud-day1_第3张图片

三.搭建注册中心

1.创建多模块工程

springcloud-parent 父工程
  springcloud-eureka-server-3000 //注册中心EurekaServer 
  springcloud-pay-server-2000  //支付服务EurekaClient ,消费者
  springcloud-user-server-1000   //用户服务EurekaClient ,提供者

创建项目后,效果如图:
SpringCloud-day1_第4张图片

2.springcloud-parent模块

①springcloud-parent导入依赖

    <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>

3.springcloud-eureka-server-3000模块

①springcloud-eureka-server-3000导入依赖
<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>
②springcloud-eureka-server-3000主配置类
@EnableEurekaServer //开启注册中心
@SpringBootApplication
public class EurekaServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }

}
③springcloud-eureka-server-3000配置文件
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/
④测试

访问localhost:3000,出现以下页面就成功了
SpringCloud-day1_第5张图片

4.springcloud-producer-user-server-1000模块

①springcloud-producer-user-server-1000导入依赖
<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>
②springcloud-producer-user-server-1000主配置类
@SpringBootApplication
public class UserServerApplication1000
{
    public static void main( String[] args )
    {
        SpringApplication.run(UserServerApplication1000.class);
    }
}
③springcloud-producer-user-server-1000配置文件
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

5.springcloud-consumer-pay-server-2000模块

springcloud-consumer-pay-server-2000模块和springcloud-producer-server-1000模块除了配置文件中的端口号不一样,其他都一样

①springcloud-consumer-pay-server-2000配置文件
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

6.测试效果

配置完两个pay和user服务,访问localhost:3000测试
出现以下页面表示成功
SpringCloud-day1_第6张图片

7.EurekaServer配置集群

一.单节点故障
1.什么是EurekaServer单节点故障

如果只有一个EurekaSever,如果EurekaSever挂了那么整个微服务都不可用

2.解决方案

EurekaServer高可用集群

二.搭建EurekaServer集群
①为本机127.0.0.1配置别名

修改C:\Windows\System32\drivers\etc目录下,hosts文件,
末尾添加
SpringCloud-day1_第7张图片

②修改EurekaServer的配置文件
#使用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配置文件默认使用环境
SpringCloud-day1_第8张图片
再次启动Eureka,这时候不会报错,访问localhost:3000,出现以下效果表示成功
在这里插入图片描述

你可能感兴趣的:(java)