• B082-SpringCloud-Eureka



    springcloud基于springboot

    微服务架构与springcloud

    架构演变

    1.一个单体项目
    缺点:大型项目文件太多体积太大,维护难,编译难,测试难,一个tomcat不够用
    在这里插入图片描述
    2.集群部署单体项目(多做几个,做的都是同样的事情)
    只能解决上述第4个问题,前三个问题更复杂,如改代码要同步改整个集群
    新出现问题:不是所有功能用的人都很多,不同的功能需要集群的数量不一致
    在这里插入图片描述
    3.根据功能把项目分开,把单独的模块拆成项目
    可以解决不同功能需要集群数量不一致的问题和剩下的前3个问题
    新出现问题:服务之间的通信,jar之间的相互依赖
    在这里插入图片描述
    4.最后用上springcloud管理微服务
    在这里插入图片描述

    为什么使用微服务

    一个项目/系统中各个模块的压力
    压力大的模块做集群分担压力
    在这里插入图片描述
    其他见文档2.1.1,2.1.2,2.2.1,2.2.2

    微服务的通讯方式

    见文档2.2.3

    架构的选择

    见文档2.3

    微服务是一种思想,是一种架构模式
    springcloud是微服务的一种落地方案

    见文档2.4

    springcloud主要用来解决微服务之间通信的一系列问题

    springcloud概述

    见文档3

    场景模拟之基础架构的搭建

    不同的项目不同的端口
    建立一个公共项目用来存放其他项目共同用到的类,然后给其他项目依赖,如user-common中的domain,query,user等
    在这里插入图片描述
    新建maven项目D082-springcloud-parent,tips:不要用下划线
    删除src

    新建maven模块user-common

    新建maven模块user-provider-4010

    新建maven模块user-consumer-5010

    user-common的pom中引入lombok,刷新依赖,建立User类

    生产者和消费者两个项目的pom中各自引入user-common,刷新依赖,新建UserController,使用依赖过来的User类

    模拟微服务之间的服务调用

    tips:隐藏不需要关心的.idea和.iml文件
    设置 - 编辑器 - 文件类型 - 忽略文件和文件夹中追加* .idea;* .iml;

    父级pom引入相关依赖

    生产者和消费者两个项目的pom中各自引入web和test依赖,新建application.yml,配置端口,新建启动类

    改造生产者的UserController,
    启动生产者项目,浏览器访问:http://localhost:4010/user/provider/1

    消费者中新建config.HttpUtils,把RestTemplate交给容器管理
    新建UserController,
    启动生产者和消费者两个项目,浏览器访问:http://localhost:5010/user/consumer/2

    目前远程调用的问题

    在这里插入图片描述
    如消费者URL中的ip目前是localhost,上线后会变化
    上线后如果提供者机器挂了重开一台机器,消费者记的还是以前的provider的地址
    消费者不知道提供者机器的状态,是否健康,是否挂了
    提供者只有一台机器,挂了就都没了
    这种模式进行提供者集群后,消费者难以实现负载均衡

    负责均衡:实时知道集群中有多少机器,哪些机器可用,哪些机器不可用,不给不可用机器发请求

    eureka

    注册中心的作用

    见文档5.1
    在这里插入图片描述

    注册中心的实现

    springcloud是基于springboot的,所以选择版本要对应

    新建工程eureka-server-1010

    导入相关依赖

    
    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-webartifactId>
    dependency>
    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-testartifactId>
    dependency>
    
    
    <dependency>
        <groupId>org.springframework.cloudgroupId>
        <artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    新建application.yml,配置参数

    server:
      port: 1010
    eureka:
      instance:
        hostname: localhost
      client:
        registerWithEureka: false #是否要注册到eureka
        fetchRegistry: false #表示是否从Eureka Server获取注册信息
        serviceUrl:
          defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #单机配置
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    新建启动类EurekaApp

    @SpringBootApplication
    @EnableEurekaServer
    public class EurekaApp {
    
        public static void main(String[] args) {
            SpringApplication.run(EurekaApp.class);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    启动项目,浏览器访问:http://localhost:1010

    服务提供者注册到注册中心

    生产者项目引入euraka-client依赖

     	
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
        dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    application.yml加入相关参数

    server:
      port: 4010
    spring:
      application:
        name: user-provider
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:1010/eureka
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    启动类加入euraka客户端注解

    @SpringBootApplication
    @EnableEurekaClient //表示是eureka的客户端
    public class App {
    
        public static void main(String[] args) {
            SpringApplication.run(App.class,args);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    浏览器访问:http://localhost:1010,可看到注册进来的 USER-PROVIDER

  • 相关阅读:
    ArcGIS pro 支持 发布三维服务
    11月25日:tp框架中的架构,配置,路由,控制器
    JSP技术基础(1)(标准语法)
    图像传统处理算法-边缘检测-分割-增强-降噪
    再看ResNet
    【b站-湖科大教书匠】1 计算机网络概述-计算机网络微课堂
    SpringBoot - @JsonFormat注解详解
    刷题笔记(十九)--二叉树:二叉搜索树的修改与构造
    TinyXML-2介绍
    二进制部署k8s
  • 原文地址:https://blog.csdn.net/ffhgjgj6576567/article/details/136417889