Docker Compose下模式Sidecar的使用教程,Docker Compose之Sidecar模式详解,因为这是一个很小的单体项目,那么如何使这个部署与调用相对简单就是我需要考虑的问题了,这时候我想到了Docker Compose 。目录
- 什么是Docker Compose
- 需求遇到不合适的语言
- 实现方案
什么是Docker Compose在微服务盛行的今天,我们通常是这么定义Compose的:对容器的统一启动和关闭的编排工具 。
但是我以前还是有个疑惑,谁会用Compose在一台服务器上部署多个服务呢?干脆直接用单体服务就行了!直到我遇到了以下的一个需求,让我明白了在一台服务器上不得不用多个服务的时候,Compose可以通过sidecar的模式,让服务很简单的通过127.0.0.1调用另一个服务
需求遇到不合适的语言一个用golang开发的某个项目,希望根据学生信息打印学籍,学籍表其中一部分如下
![Docker Compose下模式Sidecar的使用教程,Docker Compose之Sidecar模式详解](http://img.yunnanlong.com/220624/0446432N4-0.png)
go中并不是没有操作word的库,但是操作这样一个复杂的word,并且填好信息还是有很大难度 。所以我们想到了一个实现方案 。
实现方案1.通过excel定义一个一样的模板
![Docker Compose下模式Sidecar的使用教程,Docker Compose之Sidecar模式详解](http://img.yunnanlong.com/220624/0446432239-1.png)
2.golang往excel的指定cell里填值,这样相对往word里填值就简单很多,其中一部分代码
xlsx.SetCellValue("Sheet1", "C3", student.Major.Name)xlsx.SetCellValue("Sheet1", "F3", student.ClassInfo.Name)xlsx.SetCellValue("Sheet1", "J3", student.SchoolSystem) xlsx.SetCellValue("Sheet1", "B4", student.Name)xlsx.SetCellValue("Sheet1", "D4", student.BeforName)xlsx.SetCellValue("Sheet1", "F4", student.Gender)xlsx.SetCellValue("Sheet1", "H4", student.Nation) xlsx.SetCellValue("Sheet1", "B5", student.IdCardNo)xlsx.SetCellValue("Sheet1", "F5", student.HomePlace) xlsx.SetCellValue("Sheet1", "B6", student.Birthday.Format("20060102"))xlsx.SetCellValue("Sheet1", "D6", student.EntranceTime.Format("20060102"))xlsx.SetCellValue("Sheet1", "F6", student.JoinTeamTime) xlsx.SetCellValue("Sheet1", "B7", student.FamilyAddress)xlsx.SetCellValue("Sheet1", "F7", student.HealthStatus)3.最关键的一步,把excel转成pdf返给前端,供其展示或者打印
我在github了没找到golang把excel转成pdf的库(有推荐可以留言),于是想到了.net里的FreeSpire.Xls库可以很方便实现excel转pdf的功能,所以需要有个.net api把go生产并填好的excel转成pdf,于是我新建了一个.net webapi,项目名定义成pdfprocessor,其中定一个Controller
[Route("[controller]")]public class PDFController : ControllerBase{private readonly ILogger<PDFController> _logger;public PDFController(ILogger<PDFController> logger){_logger = logger;}[HttpPost]public async Task<IActionResult> HttpPostAsync(){try{Stream stream = Request.Body;byte[] buffer = new byte[Request.ContentLength.Value];stream.Position = 0L;stream.ReadAsync(buffer, 0, buffer.Length);Workbook wb = new Workbook();wb.LoadFromStream(stream);Worksheet ws = wb.Worksheets[0];var streamReturn = new MemoryStream();ws.SaveToPdfStream(streamReturn);return File(streamReturn, "application/octet-stream");}catch (Exception ex){_logger.LogError("", ex);return BadRequest(ex.Message);}}}4.部署go项目与.net项目,使go语言调用.net api实现excel转化pdf
因为这是一个很小的单体项目,那么如何使这个部署与调用相对简单就是我需要考虑的问题了,这时候我想到了Docker Compose 。
推荐阅读
- Docker容器导出和导入的教程方法,导出与导入Docker的容器实现示例
- linux服务管理之源码包的安装教程,linux下源码包安装的服务管理
- Docker初次使用命令大全,开发者必备Docker命令小结
- nginx服务下gzip的安装方法,nginx开启gzip压缩的完整步骤记录
- 设计思路 Docker容器定时备份数据库并发送到指定邮箱,定时备份数据库并自动发到邮箱的Docker部署
- 王者荣耀破解版在哪里下载
- 老版本的英雄杀去哪下载?
- 地下城堡2墓葬攻略 怎样知道地下墓葬
- 求助!!!!!!
- 系统更新时断了一下,就这样了