SpringBoot集成gRPC微服务工程搭建实践的方法

时间:2021-05-20

前言

本文将使用Maven、gRPC、Protocol buffers、Docker、Envoy等工具构建一个简单微服务工程,笔者所使用的示例工程是以前写的一个Java后端工程,因为最近都在 学习微服务相关的知识,所以利用起来慢慢的把这个工程做成微服务化应用。在实践过程踩过很多坑,主要是经验不足对微服务还是停留在萌新阶段,通过本文 记录创建微服务工程碰到一些问题,此次实践主要是解决以下问题:

  • 如何解决、统一服务工程依赖管理
  • SpringBoot集成gRPC
  • 管理Protocol buffers文件
  • 使用Envoy代理访问gRPC
  • 部署到Docker

本文假设读者已经了解以下相关知识:

  • Maven
  • Envoy
  • gRPC
  • Protocol buffers
  • SpringBoot
  • Docker

由于是初步实现微服务,不会考虑过多的细节,现阶段只需要能够使用gRPC正常通信,后续计划会发布到k8s中,使用istio实现来服务网格。

使用Maven

现在比较流行的构建工具有Maven和Gradle,现阶段后端开发大多数都是用的Maven所以本工程也使用Maven来构建项目,当然使用Gradle也可以两者概念大都想通,不同的地方大多是实现和配置方式不一致。

使用项目继承

根据Maven的POM文件继承特性,将工程分不同的模块,所有的模块都继承父pom.xml的依赖、插件等内容,这样就可以实现统一管理,并方便以后管理、维护。先看一下大概的项目结构:

AppBubbleBackend (1)├── AppBubbleCommon├── AppBubbleSmsService (2)├── AppBubbleUserService├── docker-compose.yaml (3)├── pom.xml├── protos (4)│ ├── sms│ └── user└── scripts (5) ├── docker ├── envoy ├── gateway └── sql

以下是各个目录的用处简述,详细的用处文章后面都会提到,先在这里列出个大概:

  • 工程主目录
  • 单个服务工程目录(模块)
  • docker-compose发布文件
  • 存放.proto文件
  • 发布、编译时用到的脚本文件
  • 知道大概的项目工程结构后我们创建一个父pom.xml文件,放在AppBubbleBackend目录下面:

    <?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://pile-custom -P docker-build# Run servicejava -jar ${projectDir}/target/app.jar

    entrypoint.sh脚本中将服务工程编译成app.jar包再运行服务。还有envoy代理也要启动起来这样我们就可以使用curl或其他工具直接进行测试了。

    总结

    搭建这个工程大概摸索了一周的时间,主要的时间是花在了Protocol buffers文件的管理与使用Envoy作为代理调试gRPC服务上。文章中的示例工程已经传到了GitHub: AppBubbleBackend 后面会打算慢慢的完善这个应用,这是个简单的短视屏应用除了服务器还包含了Android和iOS端,等到将后端微服务化为开源出来供学习交流使用。

    参考引用

    gRPC官方文档
    Protocol buffers Maven 插件文档
    Protocol buffers官方文档
    gRPC 官方文档中文版
    gRPC-JSON transcoder

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

    声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

    相关文章