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,一经查实,立即删除!

相关文章

Redis 哨兵 问题

前言 相关系列 《Redis & 目录》《Redis & 哨兵 & 源码》《Redis & 哨兵 & 总结》《Redis & 哨兵 & 问题》 参考文献 《Redis的主从复制和哨兵机制详解》《Redis中的哨兵(Sentinel)》《【Redis实现系列】Sentinel自动故…

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

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

如何使用 Python 操作数据库

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

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

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

极狐GitLab 签约新大陆自动识别,以质量和安全让智能识别更精准

关于新大陆自动识别 福建新大陆自动识别技术有限公司(以下简称为新大陆自动识别)是新大陆科技集团的成员企业,是新大陆数字技术股份有限公司(股票代码: 000997)的全资子公司。成立自1999年,当前已成为一家全球化的感知识别和机器…

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

目录 一、具体步骤 二、运行截图 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:…

安全见闻-web安全

web安全 一、web程序简介 1. Web程序的基本构成 2. 工作流程 3. 安全性 二、JavaScript代码库 1. 代码库的概念和用途 2. 常见的代码库 三、框架 1. 常见的前端框架 2. 常见的后端框架 四、数据库 1. 数据库的分类 2. 数据库的潜在漏洞 3. 学习数据库的重要性 五、…

Vue.js(2) 基础:指令与功能概览

正确的开始&#xff0c;微笑的进步&#xff0c;然后持续 文章目录 class和Style绑定v-bind绑定classv-bind绑定style 指令v-model指令v-clock指令v-once指令自定义指令 功能过滤器操作dom计算属性 class和Style绑定 v-bind绑定class 绑定数据对象<div id"app"&g…

【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…

【面试】rabbitmq的主要组件有哪些?

目录 1. Producer&#xff08;生产者&#xff09;2. Broker&#xff08;消息代理&#xff09;3. Exchange&#xff08;交换机&#xff09;4. Queue&#xff08;队列&#xff09;5. Consumer&#xff08;消费者&#xff09;6. Binding&#xff08;绑定&#xff09;7. Channel&am…

namespace 隔离实战

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

Java AQS CountDownLatch 源码

前言 相关系列 《Java & AQS & 目录》《Java & AQS & CountDownLatch & 源码》《Java & AQS & CountDownLatch & 总结》《Java & AQS & CountDownLatch & 问题》 涉及内容 《Java & AQS & 总结》《Java & AQS &am…

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 圆…

使用 web (vue 和DRF))实现 模拟一个IDE 功能思路

采用文件系统和数据库相结合的方案&#xff0c;不仅可以实现基本的文件管理&#xff0c;还可以为未来的扩展提供灵活性。结合我们讨论的内容&#xff0c;以下是更完善的策略&#xff1a; 方案概述&#xff1a;文件系统与数据库结合 文件系统负责实际的文件存储和执行操作&…

javascript中的展开运算符是什么

展开运算符&#xff08;Spread Operator&#xff09;是 JavaScript 中一个非常有用的语法特性&#xff0c;它通过三个点 ...来展开可迭代对象&#xff08;如数组或对象&#xff09;&#xff0c;使其可以更方便地进行操作。 1. 数组中的使用 1.1 合并数组 展开运算符可以轻松地…

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

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