原项目 brpop 阻塞方式可参考: https://yq.aliyun.com/articles/679654
来 DS 公司已经一个多月了, 昨天算是马马虎虎完成了师兄安排的实习计划第一阶段的任务, 想来也是极具兴奋的. 我的第一阶段的任务, 就是把我目前切入项目的关于 Redis 操作的不完美的地方更改掉. 简言之, 就是我们项目通过 agent 采集客户端主机信息, 通过 grpc 通信连接服务端, 中间实现了三个通信方法, 上线确认 registerSidecar, 请求控制 readyForControl, 报告事件 reportEvent. 但是请求控制中涉及到服务端需要从服务端 Redis 中取出 shell 脚本下发到连接过来的客户端. readyForControl 中一开始是采用阻塞监听方式, 达到 hold 住流的作用, 但是却不得不设计成一个大的死循环, 按照师兄的思路, 我的任务就是把该代码块, 及依赖的代码块, 从 Redis 的 brpop 阻塞方式, 更改为订阅阻塞方式, 关于好处, 文后总结.
第一阶段围绕这个问题展开, 首先是前置知识准备:
1. 学习关于 Redis 缓存数据库
虽然面试之前, 了解了缓存数据库, 但是准备的还是不充分, 实习第一阶段就是加深理解 Redis 数据库的学习, Redis 缓存数据库现在在各种场景下使用的还是比较多的. 我是先在菜鸟教程上面大概的学习一遍, 包括 Redis 的安装使用, Redis 基本命令的使用, Redis 常用数据类型, 结合项目熟悉项目中用到了几种数据类型的操作. 因为个人需要的原因, 加强学习了 String,list 两种数据类型, 深入查阅学习了订阅模式结合 jedis 的使用, 下载相应 jar, 自己写了一个关于 jedis 连接池操作 Redis 的订阅模式实现, 后来优化为线程实现.
2.docker 知识准备
不得不说菜鸟教程真是良心网站 (无意植入广告, 见谅 ^_^), 让你花很少的时间快速入门一门技术, 虽然不是很深入, 但是应对一般场景是足够了的. 当我学完 docker, 我感叹这怎么会这么好用, 一顿舒服, 哈哈, 万物皆可 docker 真的成为可能. 没了解 docker 之前, 我搭建一套 web 环境估计得半天时间, 学完 docker 发现腰也不疼了, 腿也不酸了......sorry 扯远了. 发现搭建一套 Web 环境熟悉的话半小时就可以成功部署使用. 我在自己的服务器上用 docker 尝试安装了 MySQL,Redis,nginx 等, 并且尝试搭建了 Redis 集群, 主存复制.
3. 学习 grpc 基础知识
1grpc 是什么: 在 gRPC 里客户端应用可以像调用本地对象一样直接调用另一台不同的机器上服务端应用的方法, 使得您能够更容易地创建分布式应用和服务. 与许多 RPC 系统类似, gRPC 也是基于以下理念: 定义一个服务, 指定其能够被远程调用的方法 (包含参数和返回类型). 在服务端实现这个接口, 并运行一个 gRPC 服务器来处理客户端调用. 在客户端拥有一个存根能够像服务端一样的方法.
2使用 protocol buffers: 建议你在 gRPC 里使用 proto3, 因为这样你可以使用 gRPC 支持全部范围的的语言, 并且能避免 proto2 客户端与 proto3 服务端交互时出现的兼容性问题.
3定义服务: 一个 RPC 服务通过参数和返回类型来指定可以远程调用的方法. gRPC 通过 protocol buffers 编译器来实现. 我们使用 protocol buffers 接口定义语言来定义服务方法, 用 protocol buffer 来定义参数和返回类型. 客户端和服务端均使用服务定义生成的接口代码.
4生成 grpc 代码: 一旦定义好服务, 我们可以使用 protocol buffer 编译器 protoc 来生成创建应用所需的特定客户端和服务端的代码 - 你可以生成任意 gRPC 支持的语言的代码, 生成的代码同时包括客户端的存根和服务端要实现的抽象接口, 均包含 Greeter 所定义的方法.
使用方法:1pom 配置 dependency 2pom 配置 build 3创建 proto 文件 4idea->plugius->protobuf 插件安装
参考: https://yq.aliyun.com/articles/679610?spm=a2c4e.11155435.0.0.56d6276b2ZZC1T
4. 学习代码调试
API 调试工具 servistate/postman 的使用 (可二选一, 推荐 servistate), 我是在 Chrome 里面装的 servistate 插件, 科学上网可装此插件. 在 servistate 里面对项目 restful API 进行调试, 熟悉工具的使用. 观看项目 API 接口文档, 熟悉测试环境.
因为其他一些知识比如 Mybatis,Spring,SpringMVC,SpringBoot 等自己之前都接触过并且自己抽时间也加深学习了, 也算是前置知识, 就不在此列出了.
最终任务是结合上面知识储备, 更改项目中 readyForControl 阻塞的方式. 从实时推送 (brpop), 改写为订阅模式, 见下篇.
registerSidecar
来源: https://www.cnblogs.com/darope/p/10276213.html