背景
在以前的文章《漫谈微服务》我已经简单的介绍过微服务,微服务特性是轻量级跨平台和跨语言的服务,也列举了比较了集中微服务通讯的手段的利弊,本文将经过RPC通讯的方式实现一个增删查Redis的轻量级微服务示例,大部份内容翻译自文章《Microservice in golang, using Redis and gRPC》,中间加上本身的实践和理解。html
实验环境
Mac OSjava
go version go1.12.4 darwin/amd64git
Docker version 18.09.2, build 6247962github
代码仓库
微服务实践
gRPC代码生成
选用gRPC的缘由是由于gRPC自己是一款开源且高性能的RPC框架,支持跨平台,支持golang,java,c,C++ 等10多种编程语言。由于咱们要实现一个经过gRPC通讯的基于Redis 数据库的增删改微服务,因此咱们首先须要定义一个gRPC的通讯描述文件server.proto:redis
想要将上面的server.proto文件转换为golang代码须要安装protocol buffer的编译器:docker
数据库
2.解压拷贝里面的二进制protoc及google子目录到该示例工程目录下。编程
3.经过上面定义的server.proto 生成golang代码,能够看到proto目录下生成了service.pb.go文件。api
若是还不行能够参考protocol buffer官方安装详细步骤 https://github.com/protocolbuffers/protobuf
工程代码目录结构以下:
Redis服务
定义了一个Database的接口,里面含有增删查三种方法,只要实现了这三种方法的数据库均可以做为该微服务的数据库,因此提供一个工厂函数供用户后续扩展,目前只实现了Redis一种存储。Redis的实现直接引用了开源第三方Redis操做用github/go-redis/redis 而后封装了上面增删查三种方法。这里就不展开讲redis实现了。
主程序
而后就是咱们的golang主程序,程序逻辑为开启gRPC服务端,提供增删查三个接口及响应。代码以下:
启动服务
为了测试方便用docker-compose定义了咱们的微服务,对docker-compose不太熟悉的朋友能够简单的看下我以前写的《利用Docker Compose快速搭建本地测试环境》这篇文章。该服务的docker-compose.yaml内容以下:
能够看出咱们经过暴露4040端口提供咱们的服务,服务依赖于redis,因此redis服务会在咱们服务以前以容器的方式被拉起来。微服务的启动命令能够从Dockerfile中获取:
拉起服务:
经过docker ps看到启动了两个容器,一个是redis,一个是咱们的主程序:
测试
测试的客户端用的gRPC的图形化工具BloomRPC,安装方法比较简单:brew cask install bloomrpc
而后导入咱们的gRPC定义文件server.proto就能点击测试:
总结
本文从工程实践的角度带读者实现了一个经过gRPC通讯的增删查Redis的微服务,但愿对读者有所启发。