業(yè)務(wù)場(chǎng)景實(shí)戰(zhàn)(五)PDF生成

思維導(dǎo)圖

思維導(dǎo)圖.png

系列總目錄


背景

  • 隨著公司的快速發(fā)展,業(yè)務(wù)需要沉淀出根據(jù)模板生成PDF的通用能力
  • 根據(jù)Word/PDF模板,填充對(duì)應(yīng)信息,生成PDF

技術(shù)選型

  • PDF相關(guān)的各個(gè)框架
  1. text: 基于AGPL協(xié)議,商業(yè)版需要開源項(xiàng)目代碼或者收費(fèi)
  2. spire.doc: 商業(yè)版收費(fèi),免費(fèi)版有水印
  3. PDFbox: 提供pdf操作,創(chuàng)建PDF,合并PDF功能,但是對(duì)中文支持不是很好
  4. OpenPDF: demo較少,功能較少
  5. poi: Apache下的完全開源,GitHub start 1.1k,社區(qū)活躍性高,提供根據(jù)Word模板填充Word數(shù)據(jù), word的轉(zhuǎn)pdf對(duì)表格圖像處理不好
  6. docx4j: GitHub start 1.6k提供Word轉(zhuǎn)PDF, 完全開源
  • PDF服務(wù)采用poi替換Word模板生成Word, 再使用docx4j 將Word生成PDF

高可用高性能保證

高可用

  1. 部署, 單點(diǎn)故障
  2. PDF采用異步處理,mq通知的形式,如果處理過(guò)程中斷網(wǎng)導(dǎo)致沒有發(fā)mq消息,### 高性能
  3. 異步處理
  4. 采用內(nèi)部BlockingQueue形式,多線程拉取需要處理的任務(wù)
  5. 集群無(wú)狀態(tài)可擴(kuò)展提升處理能力

服務(wù)設(shè)計(jì)

  • 總覽


    總覽.png
  • 假設(shè)業(yè)務(wù)方是通過(guò)grpc調(diào)用,那業(yè)務(wù)方調(diào)用PDF服務(wù)的流程圖


    業(yè)務(wù)方調(diào)用PDF服務(wù).png
  • PDF服務(wù)異步處理


    PDF服務(wù)異步處理.png
  • 撿漏線程: 為保證可用性,在斷網(wǎng)等異常情況下依然能發(fā)mq消息


    撿漏線程.png
  • 業(yè)務(wù)方監(jiān)聽MQ


    業(yè)務(wù)方監(jiān)聽MQ.png
  • PDF任務(wù)詳細(xì)處理流程


    PDF任務(wù)詳細(xì)處理流程.png
  • 存儲(chǔ)過(guò)程清理數(shù)據(jù): 理任務(wù)表中已完成的任務(wù)
  • 高度定制化: 后續(xù)考慮使用數(shù)據(jù)庫(kù)映射能力代替代碼中不同模板映射,以達(dá)到后續(xù)新增模板不需要改代碼

jvm啟動(dòng)參數(shù)

  1. dev環(huán)境最多只給1G多一點(diǎn)的內(nèi)存,dev環(huán)境啟動(dòng)參數(shù)默認(rèn)設(shè)置的很簡(jiǎn)單,完全使用默認(rèn)年輕代比較大,會(huì)造成年輕代來(lái)不及回收,內(nèi)存就oom了,建議設(shè)置jvm參數(shù):
 -Xms800m -Xmx800m -Xmn120M -XX:MaxPermSize=256m -XX:InitialTenuringThreshold=15 -XX:CMSInitiatingOccupancyFraction=50 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGC

參考文章

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容