** ABAP Daemon SAP 守护进程 **
**SAP**
相信各位同事在项目上或多或少都遇见过一种叫可持续性监控并实时处理单据的需求,翻译一下:即某些标准事物码之后实时触发一些事件。
由于历史及其安全等方面原因考虑,这种需求通常在与业务友好协商下变更为定时跑后台job
的方式以满足客户需求。但是使用批处理作业(JOB)或基于会话的轮询技术来检测系统中的事件并不完全可靠,有时可能由于错误/短转储/中断而导致失败。那么在SAP
HANA 1709后我们有了新框架 ADF(ABAP Daemon Framework)即守护进程来应对这一需求,ABAP
Daemon对此提供更可靠的事件处理方式。
**_背景及历史_ **
SAP HANA 1709(AS ABAP 7.52) 初有涉及,2018年发布的ABAP Platform 1809中正式引入新特性,例如对于工业物联网
(Industrial IoT)和Machine-to-Machine通信的增强,MQTT的引入,及对ABAP Daemons的原生支持 。
**_什么是ABAP Daemon_ **
• ABAP Daemon是一个 ABAP 会话,以非常可靠的方式用于事件处理,并在两者之间保持状态。它是一个基于 Linux 守护程序或窗口服务的概念。
• ABAP Daemon可以称为持久的 ABAP 会话,因为一旦启动,与 RFC、HTTP、GUI 等其他会话类型相反,ABAP Daemon的生命周期没有限制。
• ABAP Daemon对错误具有高鲁棒性(不同环境下的维持功能和性能正常运行的特性),即每当运行时错误或类型为 E、A 或 X 的消息导致守护程序会话终止程序时,ABAP Daemon会话会立即自动重新启动。
• 当ABAP Daemon的应用程序服务器关闭时,可以通过创建一个包含与前一个守护程序相同的上下文信息的新ABAP Daemon来将该ABAP Daemon移动到另一个应用程序服务器。这使新ABAP Daemon能够执行相同的工作。
• ABAP Daemon是 ABAP 守护程序类的实例,该类保留在特殊的 ABAP 守护程序会话中。
**_ABAP Daemon的限制_ **
ABAP Daemon适用于非阻塞编程模式, 如 SUBMIT、CALL TRANSACTION、WAIT、CALL SCREEN
等会导致守护进程阻止执行到达的事件是不允许的,将导致ABAP_DAEMON_ILLEGAL_STATEMENT错误。但是同步远程函数调用 (sRFC)
和异步(CALL FUNCTION func STARTING NEW TASK task)属于例外,被ABAP Daemon 允许。
**_创建一个简单ABAP Daemon_ **
SAP 在系统里面已经自带一个测试案例,RS_ABAP_DAEMON_TEST
同时我们也可以根据社区资料,自行实现一个ABAP Daemon 以社区为例
创建 ABAP Daemon CLASS 继承CL_ABAP_DAEMON_EXT_BASE,具体步骤详见社区
Create a Simple ABAP Daemon | SAP Tutorials
IF_ABAP_DAEMON_EXTENSION~ON_MESSAGE 中会对我们的信息进行处理。本例中是
弹出消息框。
创建 ABAP Daemon 调用程序,进行测试。
T-Code : SMDAEMON 进行管理ABAP Daemon
此时可以看到List 中有存在一条刚刚注册的ABAP Daemon
另写一个测试程序,调用向刚刚创建ABAP Daemon CLASS 发送信息 。
可以看到 ABAP Daemon 对我们的信息做出对应反馈。
我们在做完ABAP Daemon 测试案例后记得使用SMDAEMON 或者调用STOP 方法 关掉 ABAP Daemon 避免不必要的系统开销。
**-END-**
作者:雷 震
审核:贾栋才
编辑:朱思聪