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
-
创建 SpringBoot 项目
<!-- redis 的起步依赖 在项目中使用 RedisTemplate:StringRedisTemplate 操作 redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!-- data-redis 使用 lettuce 客户端 -->
- 程序中使用 RedisTemplate 类的方法实际就是调用 lettuce 客户端中的方法
-
application.properties 中配置 redis 的信息
# 配置 redis # 配置redis 的ip、端口号、密码 spring.redis.host=localhost spring.redis.port=6379 #spring.redis.password=
StringRedisTemplate
- StringRedisTemplate
- 将 k、v 都作为 String 处理
- 只能处理字符串,局限性比较大
- 使用 String 的序列化,可读性好
- 将 k、v 都作为 String 处理
- RedisTemplate
- 将 k、v 序列化化到 redis
- k、v 是序列化的内容,不能直接识别
- 默认使用 jdk 的序列化机制
- 将 k、v 序列化化到 redis
序列化
序列化:把对象转化为可传输的字节序列
- 最终目的是为了对象可以跨平台存储,进行网络传输
- 序列化方式
- 常见的有 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 项目
- 只定义接口和 model 类
服务提供者
-
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 注解远程注入属性值
- 从提供者项目注入属性
- 属性上添加 @DubboReference 注解远程注入属性值
- 声明 提供者 service 对象
-
主启动类添加 @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(){
//执行业务逻辑
}
}
执行
- 启动 zookeeper
- 启动提供者
- 启动消费者执行方法访问