Spring Boot 整合 ...

对于 Redis 、 dubbo 本人还未正式开始学习,仅简单记录 Spring Boot 整合其的方式作为笔记

Redis

  • NoSql 数据库,常用作缓存使用(cache)
  • 常用数据类型:String、hash、set、zset、list
  • Redis 是一个中间件,独立的服务器
    • Java中常用客户端:Jedis、Iettuce、Redisson
  • Spring、SpringBoot 中有 RedisTemplate 类处理和 Redis 交互
    • StringRedisTemplate、RedisTemplate 两个类

windows 版本 Redis

  • 放到非中文路径
  • redis.server.exe:启动服务端
    • 不要关闭
  • redis-cli.exe:启动客户端
    • 访问 redis 中的数据

使用

SpringBoot 使用 Redis

  1. 创建 SpringBoot 项目

    <!-- 
    redis 的起步依赖
    在项目中使用 RedisTemplate:StringRedisTemplate 操作 redis
     -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    <!-- data-redis 使用 lettuce 客户端 -->
    
    • 程序中使用 RedisTemplate 类的方法实际就是调用 lettuce 客户端中的方法
  2. application.properties 中配置 redis 的信息

    # 配置 redis
    # 配置redis 的ip、端口号、密码
    spring.redis.host=localhost
    spring.redis.port=6379
    #spring.redis.password=
    
StringRedisTemplate
  • StringRedisTemplate
    • 将 k、v 都作为 String 处理
      • 只能处理字符串,局限性比较大
    • 使用 String 的序列化,可读性好
  • RedisTemplate
    • 将 k、v 序列化化到 redis
      • k、v 是序列化的内容,不能直接识别
    • 默认使用 jdk 的序列化机制
序列化

序列化:把对象转化为可传输的字节序列

  • 最终目的是为了对象可以跨平台存储,进行网络传输
  • 序列化方式
    • 常见的有 JDK、Kryo(不支持跨语言)
    • JSON、XML、Hession、Thrift、Protobuf
  • Java 的序列化将Java对象抓为二进制字节数组
    • 最方便但性能较差
  • JSON 序列化:将对象转为 json 格式或从 json 格式转为对象
设置 RedisTemplate 序列化
  • 可以单独设置 key 或 value 或 同时设置序列化机制
/**
 * 设置 RedisTemplate 的序列化机制
 */
@PostMapping("/read")
public String set(String k, String v){
    //设置 key 的序列化机制 为 String 类型
    redisTemplate.setKeySerializer(new StringRedisSerializer());
    //设置 value 的序列化机制 为 String 类型
    redisTemplate.setValueSerializer(new StringRedisSerializer());
    return "定义了序列化机制";
}

Dubbo

SpringBoot 集成 Dubbo,进行分布式开发

  • 分布式:当单节点无法满足日益增长的计算、存储任务
    • 且硬件的提升代价过高、应用程序不能进一步优化
    • 才考虑分布式系统
  • 分布式解决的问题和单机系统是一样的
    • 由于分布式系统多节点,通过网络的拓扑结构
    • 或引入很多单机系统没有的问题
    • 为解决这些问题又会引入更多的机制、协议
  • RPC:Remote Procedure Call
    • 指远程过程调用,一种进程间的通信方式
      • 是一种技术思想,而非规范
    • 允许程序调用另一个地址空间的过程或函数
      • 而非显式编码过程的细节
      • 通常是共享网络上的另一台机器上
    • 即:无论调用本地还是远程方法本质上编写的代码基本相同
    • 核心模块:通讯、序列化
  • Dubbo 就是解决这些过程

Dubbo

  • Provider:服务提供者
    • 暴露服务的服务提供方
    • 服务提供者在启动时向注册中心注册自己提供的服务
  • Consumer:调用远程服务的服务消费者
    • 服务消费者在启动时向注册中心订阅自己需要的服务
    • 服务消费者从提供者地址列表中基于软负载均衡算法
      • 选一台提供者进行调用,若调用失败再换一台调用
  • Monitor:服务消费者和提供者
    • 在内存中累计调用次数和调用时间
    • 定时每分钟发送一次统计数据到监控中心

Zookeeper

  • 顾名思义 zookeeper 就是动物园管理员
    • 用来管 hadoop(大象)、Hive(蜜蜂)、pig(小猪)的管理员
  • Apache Hbase 和 Apache Solr 的分布式集群都用到了 zookeeper
  • Zookeeper: 是一个分布式的、开源的程序协调服务
    • hadoop 项目下的一个子项目
    • 提供的主要功 能包括:配置管理、名字服务、分布式锁、集群管理。

api项目

  • 公共的接口项目:api项目
    • 只定义接口和 model 类
      • 数据类实现序列化接口
    • 普通的 maven 项目

服务提供者

  • SpringBoot 项目,不选择额外依赖

  • 添加 dubbo 启动依赖

    • 自动引入 dubbo 依赖
  • 添加 Dubbo 和 Zookeeper 的集成依赖

  • 实现 api 项目中的接口

    • 暴露服务提供者
      • 接口实现类上注解 dubbo 提供的注解 @DubboService
      • 属性 :interfaceClass:接口类型
        • version:指定版本号
        • timeout:超时
    • 实现接口中的业务方法
    • 自动将对象放到容器中
    //实现 api 项目接口
    //注解创建代理对象放到容器中,暴露
    @DubboService(interfaceClass="Service.class", version="1.0")
    public class ServiceImpl implements Service{
        //实现 接口的业务逻辑
    }
    
  • 配置

    # 快速化配置
    # 配置服务名称 等价 dubbo:applicaton name = "名称"
    spring.application.name=studentservice-provider
    # 配置扫描的包,扫描 @DubboService 注解
    dubbo.scan.base-package=包路径
    # 配置 dubbo 协议
    dubbo.protocol.name=dubbo
    # 配置端口号,自定义
    dubbo.protocol.potr=123
    # 注册中心
    dubbo.registry.address=zookeeper://localhost:2181
    
  • 在主启动类上注解 @EnableDubbo

    • 复合注解,表示启动 Dubbo 配置
    • 集成 @EnableDubboConfig、@DubboComponentScan 注解
  • 排除 Log4j 依赖

    • 在之前的依赖添加时多次导入了该依赖
    • 需要手动排除

消费者

  • SpringBoot 项目,选择 web 启动依赖

  • 添加 dubbo 启动依赖、添加 zookeeper 依赖

    • 跟提供者依赖项相同
  • 创建 controller 使用 @RestController 注解

    • 声明 提供者 service 对象
      • 属性上添加 @DubboReference 注解远程注入属性值
        • 从提供者项目注入属性
  • 主启动类添加 @EnableDubbo 启用 Dubbo

  • 配制 application.properties

    # 快速化配置
    # 配置服务名称 等价 dubbo:applicaton name = "名称"
    spring.application.name=consumer-application
    # 注册中心
    dubbo.registry.address=zookeeper://localhost:2181
    
//controller 类
@RestController
public calss DubboController{
    /*
    引用远程服务,将创建好的代理对象注入
    @DubboReference(interfaceClass = Service.class, version = "1.0")
    不指定interfaceClass默认使用引用类型的数据类型
    */
    @DubboReference(version="1.0") 据类型
    private Service service;
    
    @GetMapping("query")
    public String query(){
        //执行业务逻辑
    }
}

执行

  1. 启动 zookeeper
  2. 启动提供者
  3. 启动消费者执行方法访问
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值