项目中redis改brpop阻塞模式为订阅模式的实现(一)

原项目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基础知识

  ①grpc是什么:在gRPC 里客户端应用可以像调用本地对象一样直接调用另一台不同的机器上服务端应用的方法,使得您能够更容易地创建分布式应用和服务。与许多 RPC 系统类似,gRPC 也是基于以下理念:定义一个服务,指定其能够被远程调用的方法(包含参数和返回类型)。在服务端实现这个接口,并运行一个 gRPC 服务器来处理客户端调用。在客户端拥有一个存根能够像服务端一样的方法。

  ②使用protocol buffers:建议你在 gRPC 里使用 proto3,因为这样你可以使用 gRPC 支持全部范围的的语言,并且能避免 proto2 客户端与proto3 服务端交互时出现的兼容性问题。

  ③定义服务:一个 RPC 服务通过参数和返回类型来指定可以远程调用的方法。 gRPC 通过 protocol buffers编译器来实现。我们使用 protocol buffers 接口定义语言来定义服务方法,用 protocol buffer 来定义参数和返回类型。客户端和服务端均使用服务定义生成的接口代码。

  ④生成grpc代码:一旦定义好服务,我们可以使用 protocol buffer 编译器 protoc 来生成创建应用所需的特定客户端和服务端的代码 - 你可以生成任意 gRPC 支持的语言的代码,生成的代码同时包括客户端的存根和服务端要实现的抽象接口,均包含 Greeter 所定义的方法。

使用方法:①pom配置dependency  ②pom配置build  ③创建proto文件  ④idea->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),改写为订阅模式,见下篇。

posted @ 2019-01-16 11:49  -Inky  阅读(854)  评论(0编辑  收藏