B082-SpringCloud-Eureka

目录

      • 微服务架构与springcloud
        • 架构演变
        • 为什么使用微服务
        • 微服务的通讯方式
        • 架构的选择
        • 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

            导入相关依赖

             org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test org.springframework.cloud spring-cloud-starter-netflix-eureka-server

            新建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/ #单机配置
            

            新建启动类EurekaApp

            @SpringBootApplication
            @EnableEurekaServer
            public class EurekaApp { public static void main(String[] args) { SpringApplication.run(EurekaApp.class);
                }
            }
            

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

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

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

               org.springframework.cloud spring-cloud-starter-netflix-eureka-client 

            application.yml加入相关参数

            server:
              port: 4010
            spring:
              application:
                name: user-provider
            eureka:
              client:
                service-url:
                  defaultZone: http://localhost:1010/eureka
            

            启动类加入euraka客户端注解

            @SpringBootApplication
            @EnableEurekaClient //表示是eureka的客户端
            public class App { public static void main(String[] args) { SpringApplication.run(App.class,args);
                }
            }
            

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