EJB项目如何升级SpringCloud

记录某金融机构老项目重构升级为微服务过程1

如何从EJB架构拆分微服务

这个非常有趣的过程,整个过程耗时大致接近半年时光,需要考虑到重构升级保留原来的业务线,而且还要考虑后续的维护成本,保留现有的数据库表结构,以减少数据后续的迁移工作,只从现有的ESB体系的老系统中剥离升级为微服务架构,本文大致从现有的ESB架构的体系中的EJB项目升级springcloud的完整过程,这个介绍体系后续持续更新。

EJB架构升级为SpringCloud

我们原来的EJB的金融系统的老项目已经使用很多年,对这个业务线以及设计的表结构,还有这个架构里面涉及到的方方面面的工具类,使用的模板套路都非常熟悉,如果在现有的老系统新增业务线也能支撑业务的扩展以及揽客的要求,但是随着公司提出的开源节流,对于开发从业者的成本控制,以及项目迭代的周期要求逐渐提高,原来的EJB架构的瀑布流模式的开发明显更高成本,现在分析EJB项目里面的各个组件的功能,梳理出来,接口层API,防腐层,业务层,分发层,以及页面使用vue3作为渲染数据的架构,实现前后台分离。

  1. 全新的界面设计 ,使用vue3的组件,界面明显清晰,得到快速响应的效果,而且基于事件驱动,调用后端接口实现局部数据的刷新渲染,提高用户体验,这里简单介绍VUE3的使用,具体还是后端的服务切分以及如何减少数据迁移成本展开叙述。
  2. EJB原来是使用sessionBean实现业务数据的流转,而且业务高度耦合,特别是通过EJB存根对象调用存储层的接口就明显的非常冗余,代码结构非常的混乱,而且新手上手成本非常高,能让开发先需要了解各个组件的使用套路才能更好的专注业务逻辑代码的编写;
  3. 增加了 抽象存储层 ,升级的老系统最重要是抽象出一个单独的公共的微服务,仓储层,这个服务主要是为了减少后续的数据迁移成本,继续保留现有的数据库表结构的一个设计,原老系统使用了大量的PROCEDURE,复杂的表关联逻辑,即使拆分了微服务,这部分的逻辑都不能马上可以拆分合理的业务逻辑,所以保留现有的procedure是非常明智的办法,保留这些核心的逻辑,都抽象到一个单独的微服务,其他的微服务就可以通过feign进行调用,但是这里要注意,这里的仓储层已经是链路的最后一个节点,不能调用其他的微服务,但是其他业务层可以互相调用而且最后调用的链路是这个仓储层,所以这里的设计需要并发的访问处理,并且需要设计缓存层对热点数据进行减少磁盘的冲击,仓储层只要设计API模块,负责提供远程微服务的调用入口,以及JDBCExcute的封装,实现调用procedure。这个微服务没有负责的代码层面的逻辑,核心的逻辑都是原来老系统的procedure进行封装好,保留继续使用即可。
  4. 全新的 service层的设计 从老系统剥离的MVC三层架构升级为多个微服务,而且链路要短,关联表要少,上手容易,维护容易,方便新业务线的新增改造等,围绕这些触发点,新增的微服务service层设计就非常重要,这里就通过剥离原来controller的分发后端的逻辑,原来通过EJB调用暴露的接口API,改为抽象的仓储层API接口调用,这里就简化了升级的设计难度从原MVC升级多个微服务之间的调用,简单容易理解,几个例子,原来jsp通过form表单提交后端的数据,使用的是formBean接收,这里的Bean肯定是无状态的Bean,只负责提交到后端的controller进行接收做业务处理,比如数据的类型转换,格式转换,外接口的调用返回当前业务线数据查procedure的参数等,无非就是数据的过滤转换,以及外接口的返回参数的处理,一并组装新的VO作为参数查核心的业务脚本;
  5. 举个简单的业务线作为本次记录的收尾,汇款功能,相信所有的金融机构都有这个功能,这个功能点,具体的表结构,核心的主表肯定有USER表,PRAM参数表,RATE汇率表,ACCOUT账户信息表,REMITTANCE汇款表等等这些核心表构成,这里的核心表账户表属于常用的逻辑,可以封装为accountUtil,提出抽象的VO 提供多个模块使用,包括一些常用的负责处理逻辑,关联逻辑,都可以体现在这个工具包下,另外页面的API接口的剥离设计,这里可以分2种常用的方案,进行API的分割,比如第一种,一个Form表单分多个tab没有tab都有单独的信息展示,而且这些都来自一个大表的其中一些核心数据,还有其他关联表的数据,这里就可以通过多个tab划分多个API进行调用,这样的好处就是前端的设计容易保留原来的业务功能,新系统上手难度低,用户保留熟悉感,能快速上手完成汇款交易,但是这里同样也有缺点就是加大了后端切分的业务量,原来的一个tab是一个大表关联其他表返回的完整的FormBean进行返回页面,现在是一个tab进行切割,导致这里的Bean需要重新设计,而且原来的service层的代码逻辑都需要改变,特别是组装VO查询procedure的逻辑,当剥离多个API接口后,查询核心逻辑分开,然后重新组新的response对象返回,其实相当于重构了原来MVC里面的controller的业务代码,对后端开发耗时非常大而且粒度非常大,不容易分离抽象通用的代码块,另外一种方式就是通过粒度更细的方式进行升级构造,比如,页面如果多个字段,而且有些字段需要通过ajx局部刷新请求后台的这类就非常适合抽象成API进行单独的设计,另外还有初始化页面的dropdown的数据,等都非常适合这类型的单独设计为新的API接口,这个设计思路也有弊端就是后端的接口压力非常大,需求额外新增缓存来进行防护,增加了维护成本,所以这两种各有利弊;

图片: Alt

带尺寸的图片: Alt

居中的图片: Alt

居中并且带尺寸的图片: Alt
公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n1)!nN 是通过欧拉积分

Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=0tz1etdt.

2014-01-07 2014-01-09 2014-01-11 2014-01-13 2014-01-15 2014-01-17 2014-01-19 2014-01-21 已完成 进行中 计划一 计划二 现有任务 Adding GANTT diagram functionality to mermaid

后续有新的体会再续作,反正微服务升级改造也比较简单,但是需要对老系统的原来业务非常清晰,组件的使用非常清楚才能更好的把我新的微服务的功能设计

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/58490.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot的在线医疗问答平台

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…

如何使用 Python 操作数据库

😀前言 在现代编程中,Python 的数据库操作已广泛应用于各类项目中,例如数据分析、Web 开发和数据持久化存储等。本文将介绍 Python 操作数据库的核心步骤,涉及数据库连接对象、游标对象的使用,以及常见的 SQL 数据操作…

夸克浏览器的用户反馈如何提交

夸克浏览器凭借其简洁的界面、强大的功能以及不断优化的用户体验,赢得了众多用户的青睐。然而,任何产品都不可能完美无缺,用户的反馈对于产品的持续改进至关重要。本文将详细介绍如何在夸克浏览器中高效提交用户反馈,帮助开发者更…

【移动应用开发】使用多媒体--通知/播放音频/视频

目录 一、具体步骤 二、运行截图 1. 开启通知权限 2. 播放音乐 3. 播放视频 三、源代码 1. activity_main.xml 2. activity_video_player.xml 3. activity_notification.xml 4. 一些配置 5. MainActivity 6. VideoPlayerActivity 7. NotificationActivity 8. And…

VulnHub-Brainpan1 靶机笔记

Brainpan1 靶机笔记 概述 靶机地址:https://vulnhub.com/entry/brainpan-1,51/#download 这台靶机是很好的缓冲区溢出漏洞利用的练习靶机,涉及到逆向和缓冲区溢出漏洞挖掘的一些知识。 一、nmap 扫描 1)端口扫描 nmap -sT --min-rate 1…

echarts实现 水库高程模拟图表

需求背景解决思路解决效果index.vue 需求背景 需要做一个水库高程模拟的图表&#xff0c;x轴是水平距离&#xff0c;y轴是高程&#xff0c;需要模拟改水库的形状 echarts 图表集链接 解决思路 配合ui切图&#xff0c;模拟水库形状 解决效果 index.vue <!--/*** author:…

【Linux探索学习】第九弹——Linux工具篇(四):项目自动化构建工具—make/Makefile

Linux笔记&#xff1a;https://blog.csdn.net/2301_80220607/category_12805278.html?spm1001.2014.3001.5482 前言&#xff1a; 在前面我们学习了如何用编译并执行&#xff0c;在现代软件开发中&#xff0c;构建一个项目涉及多个步骤&#xff0c;从编译源代码到链接库文件&a…

基于SpringBoot+Vue+MySQL的房屋租赁系统

系统展示 系统背景 随着城市化进程的加速和人口流动性的增加&#xff0c;房屋租赁市场逐渐成为城市生活的重要组成部分。然而&#xff0c;传统的房屋租赁方式存在诸多问题&#xff0c;如信息不对称、交易成本高、租赁关系不稳定等&#xff0c;这些问题严重影响了租赁市场的健康…

View三大机制(一):触摸机制(事件分发)

传递过程遵循如下顺序&#xff1a;Activity->Window->PhoneWindow->DecorView->RootView->ViewGroup->View View事件方法执行顺序:onTouchListener > onTouchEvent > onLongClickListener > onClickListener 主要由三个重要的方法共同完成的,只有Vi…

namespace 隔离实战

Docker简介 什么是虚拟化、容器化为什么要虚拟化、容器化?虚拟化实现 什么是虚拟化、容器化 物理机: 实际的服务器或者计算机。相对于虚拟机而言的对实体计算机的称呼。物理机提供给虚拟机以硬件环境&#xff0c;有时也称为“寄主”或“宿主”。 虚拟化: 是指通过虚拟化技术将…

Canvas 画布

文章目录 1. 初识1.1 认识画布1.2 兼容性1.3 上下文属性 2. 绘制2.1 绘制基本图形2.1.1 绘制矩形2.1.2 绘制圆形2.1.3 绘制直线2.1.4 绘制圆弧2.1.5 绘制贝塞尔二次曲线2.1.6 绘制贝塞尔三次曲线2.1.7 封装路径 2.2 颜色控制2.2.1 颜色设置2.2.2 线性渐变2.2.3 径向渐变2.2.4 圆…

XML解析小坑记录[正则表达式解析]

一、问题描述 在做 SSO 单点登录时( 认证中为CAS服务对接 )。在完成对用户ticket票根校验后&#xff0c;返回了用户信息有关 XML 数据片段&#xff0c;例如下&#xff1a; <cas:serviceResponse xmlns:cas"http://www.xxx.xx/xx/cas"><cas:authentication…

ffmpeg视频滤镜:网格-drawgrid

滤镜介绍 drawgrid 官网链接 》 FFmpeg Filters Documentation drawgrid会在视频上画一个网格。 滤镜使用 参数 x <string> ..FV.....T. set horizontal offset (default "0")y <string> ..FV.....T. set…

(50)MATLAB最优延迟迫零均衡器仿真测试与评估

文章目录 前言一、最优延迟迫零均衡器评估模型二、最优延迟迫零均衡器仿真代码1.代码如下&#xff1a;2.迫零均衡器函数zf_equalizer()的MATLAB源码 三、仿真结果画图1.不同权系数长度和延迟的迫零均衡器性能2. 不同权系数长度的迫零均衡器的最佳延迟 前言 对于预设均衡器延时…

用AI绘画工具提升创作效率,这款神器你一定不能错过!

在如今的创作领域&#xff0c;无论是插画师、设计师&#xff0c;还是内容创作者&#xff0c;都在寻找能够提升效率的工具&#xff0c;而AI绘画工具的诞生无疑是一场创意革命。通过AI技术的支持&#xff0c;我们不再需要耗费大量时间在绘制基础草图或反复调整细节上&#xff0c;…

为什么要使用Golang以及如何入门

什么是golang&#xff1f; Go是一种开放源代码的编程语言&#xff0c;于2009年首次发布&#xff0c;由Google的Rob Pike&#xff0c;Robert Griesemer和Ken Thompson开发。基于C的语法&#xff0c;它进行了一些更改和改进&#xff0c;以安全地管理内存使用&#xff0c;管理对象…

Oracle故障诊断(一线DBA必备技能)之ADRCI(四)

1. 题记&#xff1a; 本篇博文继续详细介绍一线DBA必备技能—Oracle DB故障诊断工具ADRCI。 2. 使用 ADRCI 进行故障诊断的步骤 1. 查看警报日志 警报日志是故障诊断的重要信息源&#xff0c;它记录了数据库启动、关闭、错误消息等关键事件。 首先启动 ADRCI。在操作系统命…

基于SpringBoot的项目工时统计成本核算管理源码带教程

该系统是基于若依前后端分离的架构&#xff0c;前端使用vue2&#xff0c;后端使用SpringBoot2。 技术框架&#xff1a;SpringBoot2.0.0 Mybatis1.3.2 Shiro swagger-ui jpa lombok Vue2 Mysql5.7 运行环境&#xff1a;jdk8 IntelliJ IDEA maven 宝塔面板 系统与功…

嵌入式学习-网络-Day04

嵌入式学习-网络-Day04 1.IO多路复用 1.1poll poll同时检测键盘和鼠标事件 1.2epoll 2.服务器模型 2.1循环服务器模型 2.2并发服务器模型 多进程模型 多线程模型 IO多路复用模型 网络聊天室 项目要求 问题思考 程序流程图 1.IO多路复用 1.1poll int poll(struct pollfd *fds, n…

Java 面向对象基础

目录 1. 面向对象2. 类与对象3. 面向对象在内存中的执行原理4. 类和对象注意事项5. this 关键字6. 构造器6.1 什么是构造器?6.2 构造器作用6.3 构造器应用场景 7. 封装性7.1 什么是封装&#xff1f;7.2 封装的设计规范7.3 封装的书写 8. 实体JavaBean 正文开始 1. 面向对象 …