当前位置: 首页 > news >正文

SpringCloud01

SpringCloud01

微服务入门案例

实现步骤

    1. 导入数据
    1. 实现远程调用
    @MapperScan("cn.itcast.order.mapper")
    @SpringBootApplication
    public class OrderApplication {public static void main(String[] args) {SpringApplication.run(OrderApplication.class, args);}/*** 将redisTemplate加入spring容器当中* @return*/@Beanpublic RestTemplate restTemplate(){return new RestTemplate();}
    }
    
    @Service
    public class OrderService {@Autowiredprivate OrderMapper orderMapper;@Autowiredprivate RestTemplate restTemplate;public Order queryOrderById(Long orderId) {// 1.查询订单Order order = orderMapper.findById(orderId);//2. 查询用户信息//2.1 url路径String url = "http://localhost:8081/user/"+order.getUserId();//2.2 发送http请求,实现远程调用User user = restTemplate.getForObject(url, User.class);//3.封装order数据order.setUser(user);// 4.返回return order;}
    }
    
    @Slf4j
    @RestController
    @RequestMapping("/user")
    public class UserController{@Autowiredprivate UserService userService;/*** 路径: /user/110** @param id 用户id* @return 用户*/@GetMapping("/{id}")public User queryById(@PathVariable("id") Long id) {return userService.queryById(id);}
    }
    

Eureka注册中心

结构

请添加图片描述

入门案例

  • 实现步骤

      1. 创建eureka服务,引入依赖
      <dependency>
      <groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
      </dependency>
      
    1. 编写启动类

      @SpringBootApplication
      @EnableEurekaServer
      public class EurekaApplication {public static void main(String[] args) {SpringApplication.run(EurekaApplication.class, args);}
      }
      
      1. 编写配置文件
      server:port: 10086 # 服务端口# 以下配置为注册服务
      spring:application: # 微服务名称name: eureka-servereureka:client:register-with-eureka: true # 是否注册自己fetch-registry: true #是否拉取服务,获取Eureka中的注册表信息,也就是我们注册到注册中心的服务service-url: # eureka的地址信息,eureka本身也是一个微服务,会将自身注册到eureka上defaultZone: http://127.0.0.1:10086/eureka
      
      1. 服务注册
        1. 引入依赖
        <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        
        1. 编写配置
        spring:application:name: userservice
        eureka:client:service-url:defaultZone: http://127.0.0.1:10086/eureka
        
      1. 服务发现
        1. 引入依赖
        <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        
        1. 编写配置
        spring:application:name: orderservice
        eureka:client:service-url:defaultZone: http://127.0.0.1:10086/eureka
        
        1. 服务拉取与负载均衡

        添加@LoadBalanced注解

        @MapperScan("cn.itcast.order.mapper")
        @SpringBootApplication
        public class OrderApplication {public static void main(String[] args) {SpringApplication.run(OrderApplication.class, args);}/*** 将redisTemplate加入spring容器当中* @return*/@Bean@LoadBalanced//实现自动获取实例列表,并完成负载均衡public RestTemplate restTemplate(){return new RestTemplate();}
        }
        
        @Service
        public class OrderService {@Autowiredprivate OrderMapper orderMapper;@Autowiredprivate RestTemplate restTemplate;public Order queryOrderById(Long orderId) {// 1.查询订单Order order = orderMapper.findById(orderId);//2. 查询用户信息//2.1 url路径//String url = "http://localhost:8081/user/"+order.getUserId();//使用服务名代替ip和端口String url = "http://userservice/user/"+order.getUserId();//2.2 发送http请求,实现远程调用User user = restTemplate.getForObject(url, User.class);//3.封装order数据order.setUser(user);// 4.返回return order;}
        }
        

Ribbon负载均衡

原理

请添加图片描述

流程

  • 拦截我们的RestTemplate请求http://userservice/user/1
  • RibbonLoadBalancerClient会从请求url中获取服务名称,也就是user-service
  • DynamicServerListLoadBalancer根据user-service到eureka拉取服务列表
  • eureka返回列表,localhost:8081、localhost:8082
  • IRule利用内置负载均衡规则,从列表中选择一个,例如localhost:8081
  • RibbonLoadBalancerClient修改请求地址,用localhost:8081替代userservice,得到http://localhost:8081/user/1,发起真实请求

饥饿加载

  • Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长。

而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载:

# 开启饥饿加载,降低第一次访问时间
# 默认使用的时懒加载,即第一次访问时才创建loadBalanceClient
# clients为集合,若存在多个服务,需要使用如下方式配置
ribbon:eager-load:clients:- userservice # 指定饥饿加载的服务名称
#        - xxxxserviceenabled: true # 开启饥饿加载

Nacos注册中心

服务注册到nacos

  • 实现步骤

      1. 引入依赖

      父工程引入SpringCloudAlibaba的依赖

      <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.2.6.RELEASE</version><type>pom</type><scope>import</scope>
      </dependency>
      

      服务模块引入nacos依赖

      <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
      </dependency>
      
      1. 配置nacos地址
      spring:cloud:nacos:server-addr: localhost:8848
      

nacos服务分级存储模型

  • 介绍
    请添加图片描述

  • 集群配置

修改order-service的application.yml文件,添加集群配置:

spring:cloud:nacos:server-addr: localhost:8848discovery:cluster-name: HZ # 集群名称
  • 同集群优先配置

修改order-service的application.yml文件,修改负载均衡规则:

userservice:ribbon:NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则 
  • 权重配置

请添加图片描述

  • 环境隔离

    • 实现步骤

        1. 创建namespace

请添加图片描述

- 2. 编写配置文件```ymlspring:cloud:nacos:server-addr: localhost:8848discovery:cluster-name: HZnamespace: 492a7d5d-237b-46a1-a99a-fa8e98e4b0f9 # 命名空间,填ID```

eureka与nacos的区别

nacos服务实例分类

  • 临时实例

如果实例宕机超过一定时间,会从服务列表剔除,默认的类型。

  • 非临时实例

如果实例宕机,不会从服务列表剔除,也可以叫永久实例。

配置一个服务实例为永久实例:

spring:cloud:nacos:discovery:ephemeral: false # 设置为非临时实例

共同点

  • 都支持服务注册和服务拉取
  • 都支持服务提供者心跳方式做健康检测

区别

请添加图片描述

  • Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
  • 临时实例心跳不正常会被剔除,非临时实例则不会被剔除
  • Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
  • Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式
http://www.lryc.cn/news/64045.html

相关文章:

  • SpringBoot整合Redis实现点赞、收藏功能
  • 【Java入门合集】第一章Java概述
  • Android无线调试操作说明
  • 什么是 Python ?聊一聊Python程序员找工作的六大技巧
  • RabbitMQ 01 概述
  • 面经|曹操出行供需策略运营
  • 【Python】selenium工具
  • 实验六~Web事件处理与过滤器
  • 刷题4.28
  • 做了一年csgo搬砖项目,还清所有债务:会赚钱的人都在做这件事 !
  • 线性回归模型(7大模型)
  • VP记录:Codeforces Round 868 (Div. 2) A~D
  • 【VQ-VAE-2论文精读】Generating Diverse High-Fidelity Images with VQ-VAE-2
  • 并发编程基石:管程
  • 电路中噪声来源
  • JAVASE的全面总结
  • 关于repeater录制的流量子调用的identity中带有~S的情况
  • Java面试题队列
  • 大型Saas系统的权限体系设计(二)
  • HTML(四) -- 多媒体设计
  • 设置苹果电脑vsode在新窗口中打开文件
  • 第二章创建模式—单例设计模式
  • 数据结构学习记录——堆的插入(堆的结构类型定义、最大堆的创建、堆的插入:堆的插入的三种情况、哨兵元素)
  • netperf测试
  • ORACLE常用语句
  • [论文笔记]C^3F,MCNN:图片人群计数模型
  • HCIP-7.2VLAN间通信单臂、多臂、三层交换方式学习
  • PHP快速入门17-用spl_autoload_register实现类的自动加载
  • 【黑马程序员 C++教程从0到1入门编程】【笔记8】 泛型编程——模板
  • 分享10个精美可视化模板,解决95%的大屏需求!