微服务学习笔记

第一天:微服务(20220321)

基于RestTemplate发起的http请求实现远程调用
http请求做远程调用是与语言无关的调用,只要知道对方的IP、端口、接口路径

01.微服务远程调用

1.注册RestTemplate,在order-servcie中的OrderApplication中注册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();
    }


}
2.服务远程调用RestTemplate,修改order-service中的OrderService的queryOrderById方法:
 @Resource
    private OrderMapper orderMapper;

    @Resource
    private RestTemplate restTemplate;

    public Order queryOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);
        String url = "http://localhost:8081/user/"+order.getUserId();
        //2.查询用户
        User user = restTemplate.getForObject(url, User.class);
        //3.封装user信息
        order.setUser(user);
        // 4.返回
        return order;
    }

02.服务调用关系

  • 服务提供者:暴露接口给其他微服务调用
  • 服务消费者:调用其他微服务提供的接口
  • 提供者与消费者的角色是相对
  • 一个服务可以同时是服务提供者服务消费者

03 Eureka注册中心

在Eureka架构中,微服务角色有两类:

  • EurekaServer:服务端,注册中心
    • 记录服务信息
    • 心跳监控
  • EurekaClient:客户端
    • Provider:服务提供者。例如案例中的user-service
      • 注册自己的信息到EurekaServer
      • 每间隔30s向Eureka发送心跳
    • consumer:服务消费者。例如案例中的order-service
      • 根据服务名称从EurekaServer中拉取服务列表
      • 基于服务列表做负载均衡,选中一个微服务后发起远程调用
搭建EurekaServer(20220322)
  • 引入eureka-server依赖
  • 添加@EnableEurekaServer注解
  • 在application.yml中配置Eureka地址
  • 服务注册
    • 引入eureka-client依赖
    • 在application.yml中配置Eureka地址
  • 服务发现
    • 引入eureka-client依赖
    • 在application.yml中配置Eureka地址
    • 给RestTemplate添加@loadBalanced注解
    • 用服务提供者的服务名称远程调用

04 Ribbon负载均衡

- 规则接口是IRule
- 默认实现是ZoneAvoidanceRule,根据zone选择服务列表,然后轮询
在这里插入图片描述

设置ribbon负载均衡的两种方式:
  • 代码方式:在order-service中的OrderApplication类中,定义一个新的Rule:
    (配置灵活,但修改时需要重新打包发布)
    @Bean
   public IRule randomRule(){
       return new RandomRule();
   }
  • 配置文件方式:在order-service中的application.yml中,添加新的配置:
    (直观、方便 - 无需重新打包发布,但是无法做全局配置)
userservice: # 给某个微服务配置负载均衡规则,这里是userservice服务
 ribbon:
   NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则 
Ribbon饥饿加载
ribbon:
  eager-load:
    enabled: true
    clients: userservice
      #- userservice  多个服务
      #- xxservice

05 Nacos注册中心

  • 服务搭建:
    • 下载安装包
    • 解压
    • 运行startup.cmd -m standalone(单机启动)
  • Nacos服务注册或发现
    • 引入nacos.discovery依赖
    • 配置nacos地址spring.cloud.nacos.server-addr:localhost:8848
Nacos服务分级模型
  • Nacos服务分级存储模型
    • 一级是服务,例如userservice
    • 二级是集群,例如杭州或上海
    • 三级是实例,例如杭州机房某台部署了userservice的服务器
  • 如何设置实例的集群属性
    • 修改application.yml文件,添加spring.cloud.nacos.discovery.cluster-name属性(配置集群)
      在这里插入图片描述
Nacos环境隔离
  • namespace用来做环境隔离
  • 每个namespace都有唯一ID
  • 不同namespace下的服务不可见
Nacos与eureka的共同点
  • 都支持服务注册和服务拉取
  • 都支持服务提供者心跳方式做健康检测
Nacos与Eureka的区别
  • Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式(压力大)
  • 临时实例心跳不正常会被剔除,非临时实例则不会被剔除(等待恢复 )
  • Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
  • Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值