DelphiWebMVC框架下BPL热部署实现

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

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

下面说下DelphiWebMVC如何实现:

项目结构:

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

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

UserPackage 用户业务包

LoginPackage 登录业务包

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

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

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

下面说配置文件package.json

userpackage 包名升级是不可以修改

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

ver:版本

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

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

下面看下具体调用:

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

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

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

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

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

initialization
  RegisterClass(TUserPackageV1);

finalization
  UnRegisterClass(TUserPackageV1);

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

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

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

官网http://www.delphiwebmvc.com/

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

joman5

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值