博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DelphiWebMVC框架下BPL热部署实现
阅读量:5735 次
发布时间:2019-06-18

本文共 1065 字,大约阅读时间需要 3 分钟。

hot3.png

系统在正常运行情况下,当我们进行业务变更时,我们不希望系统停下来,这会对我们的用户造成不好的影响,php,python 可以直接更换文件来实现,也可以用多层来实现,但多层无形中也会增加工作量,

dephi这里的解决方法是使用bpl技术,把具体的业务封装在bpl中,当进行业务更换时,通过升级类版本,修改配置文件来实现动态更新业务,从而达到热部署。

下面说下DelphiWebMVC如何实现:

项目结构:

99e212a2b630c2a62897f518cad083acfc8.jpg

这里4个项目DelphiMVC,UserPackage,LoginPackage,Share

DelphiMVC 主工程用来进行bpl包的调用及框架结构

UserPackage 用户业务包

LoginPackage 登录业务包

share 共享包,其他包开发是需要引用

af33fe9a449b7cdc1d799d51e56a9738e52.jpg

上图指出了启用bpl包模式的设置,打开包开发模式,设置包检测时间与旧包卸载时间,

这里默认5秒进一次配置文件检测当版本升级后加载新包,包类名称需要修改可以加上版本号,否则加载时会提示 包类重复,无法加载成功,当检测到新包是,旧包这里默认10秒后卸载,这里为了防止并发时旧业务还在进行操作,进行延时卸载。

下面说配置文件package.json

eabb9e795cb7fcfe48d3e435ac9d968d853.jpg

userpackage 包名升级是不可以修改

pakcage:bpl文件存放位置,升级时指向新位置,因为旧包还在使用无法替换,也不能替换。

ver:版本

TUserPackage 类的别名,在程序内部调用

getdata 类方法别名,内部调用使用。

下面看下具体调用:

4a7e623a42ec9c24764ad90703413b0ae18.jpg

这是 userService 类 用户服务类,在此类来调用 包中具体的业务,

通过调用父类的 exec 方法 设置 包名,类别名,类方法别名,和参数,来调用配置文件中指定的方法

我们看下包内方法怎么编写

9dd4b61b7cbec946937d3f39e4190ebacf8.jpg

打开 userpakage 包内的类 userpackage 类 这里类我升级到V1版本,如果再升级可以到V2 版本,批量替换即可。

方法参数必须是  map 参数以json结构传入,继承 TBasePackage类

initialization

  RegisterClass(TUserPackageV1);

finalization

  UnRegisterClass(TUserPackageV1);

这块是必须的否则包无法加载。

注意:方法必须放在published 下否则方法无法被调用。

这样即可实现在服务不停止下进行业务的更新切换。

 

转载于:https://my.oschina.net/delphimvc/blog/3002106

你可能感兴趣的文章
Java not support java EE1.3
查看>>
iptables规则备份及恢复、firewalld九个zone,service的操作
查看>>
www.conf配置文件的参数详解
查看>>
如何实现邀请好友帮抢票功能?
查看>>
深圳联通特邀湖北籍企业参观公司总部大楼举行
查看>>
告警系统主脚本、告警系统配置文件、告警系统监控项目
查看>>
Python 和 PyCharm 在 windows10 环境的安装和设置
查看>>
C语言入门基础之数组——数学和编程的完美结合(图)
查看>>
《远见》的读后感作文1000字范文
查看>>
重置密码、单用户模式、救援模式
查看>>
LAMP环境搭建1-mysql5.5
查看>>
第三课 Linux目录及文件管理、用户组管理及bash重定向
查看>>
shell 脚本攻略--小试牛刀
查看>>
spring boot view override
查看>>
bzoj 2282: [Sdoi2011]消防
查看>>
我的友情链接
查看>>
centos5.9使用RPM包搭建lamp平台
查看>>
关于C#面向对象2
查看>>
Javascript String类的属性及方法
查看>>
vim编辑器如何添加或删除多行注释
查看>>