• 微服务01-基本介绍+注册中心EureKa


    基本介绍

    服务集群:一个请求由多个服务完成,服务接口暴露,以便于相互调用;

    注册中心:每个服务的状态,需要进行维护,我们可以在注册中心进行监控维护服务;

    配置中心:这些服务的配置我们都放在配置中心中配置,方便拉取配置信息,减少代码冗余;

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    微服务优点

    耦合度高,所有代码量放在一个里面,打包编译时间会很长,动一个模块中的代码,其他的可能会受影响;

    在这里插入图片描述
    分布式架构:

    对功能进行拆分,每个业务作为独立的项目作为独立项目开发,称为一个服务;方便升级,修改;

    在这里插入图片描述

    在这里插入图片描述
    认识微服务
    每个功能对应一种服务,避免业务重复开发,耦合度低,每个服务可以做一个对应的数据库,防止数据污染;
    在这里插入图片描述
    总结:
    在这里插入图片描述

    SpringCloudAlibaba兼容前面两种:

    在这里插入图片描述
    企业微服务遇到场景:

    在这里插入图片描述
    SpringCloud=SpringBoot+新的组件,因为基于springboot可以将这些组件自动装配;

    在这里插入图片描述

    服务拆分及远程调用

    在这里插入图片描述

    例子:
    让订单模块调用用户模块(暴露接口),从而得到用户信息(数据库每个模块有自己专属的)

    在这里插入图片描述
    远程调用分析:订单模块只需要能够请求到用户模块即可

    在这里插入图片描述
    使用RestTemplate来完成远程调用获取用户信息;

    1.现在主启动类注入一个RestTemplate组件

    package cn.itcast.order;
     
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.context.annotation.Bean;
    import org.springframework.web.client.RestTemplate;
     
    @MapperScan("cn.itcast.order.mapper")
    @SpringBootApplication
    public class OrderApplication {
     
        public static void main(String[] args) {
            SpringApplication.run(OrderApplication.class, args);
        }
     
        /**
         * 创建RestTemplate并且注入Spring容器
         * @return
         */
        @Bean
        public RestTemplate restTemplate(){
            return new RestTemplate();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    然后再订单的业务功能中调用RestTemplate中的方法对远程接口进行调用以获取数据:

    getForObject(请求路径,数据类型)

    package cn.itcast.order.service;
     
    import cn.itcast.order.mapper.OrderMapper;
    import cn.itcast.order.pojo.Order;
    import cn.itcast.order.pojo.User;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import org.springframework.web.client.RestTemplate;
     
    @Service
    public class OrderService {
     
        @Autowired
        private OrderMapper orderMapper;
        @Autowired
        private RestTemplate restTemplate;
     
        public Order queryOrderById(Long orderId) {
            // 1.查询订单
            Order order = orderMapper.findById(orderId);
     
            //2.利用RestTemplate发送http请求,查询用户
            String url="http://localhost:8081/user/"+order.getUserId();
     
            //2.1对url进行请求得到json数据,并且转化为User类型
            User user = restTemplate.getForObject(url, User.class);
            order.setUser(user);
     
            // 4.返回
            return order;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    在这里插入图片描述

    消费者和提供者

    服务与服务之间的关系需要相对来看,一个服务即可以是消费者也可以是提供者;

    服务提供者:将接口暴露给其他服务;

    服务消费者:调用暴露的接口;

    EureKa注册中心

    针对消费者如何获取提供者的地址信息;

    对于消费者如何在多个提供者中进行选择;

    消费者如何知道提供者健康状态;
    在这里插入图片描述
    这里,EureKa全部帮你解决了

    所有的服务,只要在EureKa的客户端,都会被注册到EureKa的注册中心(就跟暗网一样),每个人都能又当商家又当卖家,比如这里的消费者->会对其他服务进行请求;

    直接根据具体的请求向EureKa拉取提供者信息;

    而多个提供者的筛选——>消费者会利用负载均衡算法选择一个微服务进行远程调用;

    而其他服务的请求状态(是否宕机等等),每30s会对注册中心反馈一次心跳;

    在这里插入图片描述

    EureKa实战:搭建EureKaServer
    在这里插入图片描述

    1.先专门建一个 EureKa服务端,然后引入EureKa-server依赖
    在这里插入图片描述

       <!--eureka服务端-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.对EureKa启动类中+@EnableEureKaServer注解,声明是一个EureKa服务启动

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

    3.在yaml中配置EureKa服务端地址->(另外要把自己也注册到EureKa客户端中,因为如果有多个EureKa,也就是集群,会出现相互调用的情况)

    server:
      port: 10086 # 服务端口
    spring:
      application:
        name: eurekaserver # eureka的服务名称
    eureka:
      client:
        service-url: # eureka的地址信息,因为eureka也要注册自己,比如eureka集群之间需要通信
          defaultZone: http://127.0.0.1:10086/eureka
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    服务名字+信息地址 (服务注册地址)
    在这里插入图片描述

    服务注册:(对一个服务设置多个端口进行处理)

    好处

    有利于分担请求压力

    对服务进行引入EureKa的依赖+yaml中配置EureKa的地址——>代表服务注册

    在这里插入图片描述
    .对服务引入EureKa-client依赖,并且在yaml中设置EureKa地址以及服务名称

     
            <dependency>
                <groupId>org.springframework.cloudgroupId>
                <artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
            dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    server:
      port: 8080
    spring:
      datasource:
        url: jdbc:mysql://localhost:3306/cloud_order?useSSL=false
        username: Wuyuhang
        password: 2002514wyh11
        driver-class-name: com.mysql.jdbc.Driver
     
      application:
        name: orderservice # user的服务名称
    eureka:
      client:
        service-url: # user的地址信息
          defaultZone: http://127.0.0.1:10086/eureka
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    我们还可以对一个服务多端口的方式注册到EureKa中:

    在这里插入图片描述
    在其中配置端口信息即可:Dserver:8082

    在这里插入图片描述

    效果:

    在这里插入图片描述

    负载均衡

    在orderservice中完成服务拉取:基于服务名称来获取服务列表,然后根据服务列表进行负载均衡 ——>默认是轮流机制;

    在这里插入图片描述

    总结

    在这里插入图片描述

  • 相关阅读:
    C++primer 第二章 变量和基本类型
    LintCode 978: Basic Calculator 栈好题
    形式化定义软件动态更新
    react中hook的useState
    机器学习笔记(二)
    PHP项目学习笔记-萤火商城-增加一个模块(表涉及到的操作和文件)
    基于SSM的彩妆小样售卖商城
    Maven - 国内 Maven 镜像仓库(加速包,冲冲冲~)
    我的 2023 年,35岁、父亲肺癌,失业,失恋、上岸
    视频号视频下载教程,为视频博主提供的PC电脑版下载方法
  • 原文地址:https://blog.csdn.net/weixin_67201964/article/details/132678960