我的编程空间,编程开发者的网络收藏夹
学习永远不晚

SAP ABAP守护进程的实现方式是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

SAP ABAP守护进程的实现方式是什么

本篇文章给大家分享的是有关SAP ABAP守护进程的实现方式是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

Linux系统很多服务都通过守护进程实现,常见的守护进程有系统日志进程syslogd,web服务器httpd,邮件服务器sendmail和数据库服务器mysqld等。

那么在ABAP里能否实现具有守护进程特性的报表?这个需求翻译成ABAP的术语,即是否能够开发一个满足下列特征的ABAP程序?

终端(SAPGUI或ABAP Development Tool)关闭后仍然能够继续运行,且能继续接收用户输入,处理并推送结果给用户。

很多朋友一定很快就会想到ABAP后台作业。没错,开发一个ABAP报表,以后台作业的方式启动,的确可以实现脱离终端运行的效果。然而这种后台作业无法再以普通方式接受用户输入,一种比较笨重的解决方式是采取生产者-消费者的思路,定义一个数据库表,充当任务队列;用户将请求插入到该数据库表里,而后台作业程序周期性地去查询该数据库表,如果非空,则取出请求并处理。

另一种思路就是在事务码SICF里创建一个新的节点并在其handler class里书写处理逻辑,这样消费者可以发送HTTP请求到该ICF节点负责的url,并接收处理结果。

之前Jerry的文章一个13年ABAP老兵的建议:了解这些基础知识,对ABAP开发有百利而无一害介绍过,ABAP服务器同外界通过HTTP交互,会经过Internet Communication Manager(ICM)这个模块,通过这种方式实现的ABAP程序,表面上看也勉强模仿了守护进程的效果,但请求处理的性能和真正的守护进程相比相差甚远,并且本质上是借助Web服务器实现的。

一个好消息是,在2018年SAP发布的ABAP Platform 1809中,提到了一些激动人心的新特性,比如针对工业物联网(Industrial IoT)和Machine-to-Machine通信的增强,MQTT的引入,以及对ABAP Daemons的原生支持。

SAP ABAP守护进程的实现方式是什么

本文我们就用ABAP平台1809新引入的ABAP MQTT和ABAP Daemons来实现一个Hello World级别的ABAP守护进程。

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)是一种基于发布/订阅模式的轻量级通讯协议,构建于TCP/IP协议上,因其低开销和低带宽占用的优点,在物联网、小型设备、移动应用等方面应用特别广泛。

SAP ABAP守护进程的实现方式是什么

关于ABAP平台1809新特性的更多介绍,请参阅SAP社区博客:

https://1/abap-platform-for-sap-s4hana-1809/http://,可以使用下面这个用webSocket实现的MQTT客户端来操作该broker:

http://www.ket-client/

这个broker专门用于测试用途,收到MQTT消息后,会原封不动地将其回复给发送方。

SAP ABAP守护进程的实现方式是什么

在ABAP类的构造函数里连接MQTT broker,把返回的MQTT客户端实例存储在类的成员变量mo_mqtt_client里,接下来就能使用该实例的publish方法去发送消息,subscribe方法订阅消息,on_message方法接收消息。

SAP ABAP守护进程的实现方式是什么

打开MQTT客户端,订阅渠道:abaptopic/jerry/test

SAP ABAP守护进程的实现方式是什么

接着我首先在第66行,往该渠道发送一条Hello World的消息,broker收到后会将其原封不动地返回,但因为我的ABAP类并没有订阅这个渠道,因此不会收到这条hello world消息的回复。

第68行订阅该渠道后,第69行发送第二条消息给broker,这次就能收到其回复了。

SAP ABAP守护进程的实现方式是什么

回到broker客户端,看到从ABAP端发送过来的两条消息:

SAP ABAP守护进程的实现方式是什么

回到ABAP端,看到代码第69行发送的第二条消息的回复:

SAP ABAP守护进程的实现方式是什么

弄清楚ABAP MQTT的用法之后,我们就可以动手开发ABAP守护进程了。虽然ABAP守护进程并没有直接使用MQTT同使用者进行交互,但是掌握这种消息通知机制的用法,对我们了解ABAP守护进程的工作原理也有帮助。

新建一个ABAP类zcl_jerry_simple_daemon,将cl_abap_daemon_ext_base设置成其父类。

从基类继承的这些ON开头的方法,即ABAP守护进程生命周期事件发生时,开发人员能够实现自定义逻辑的位置,比如在系统SHUTDOWN时,开发人员实现的ON_SYSTEM_SHUTDOWN方法会触发,在此处完成守护进程的清理动作,实现优雅退出。

SAP ABAP守护进程的实现方式是什么

而最有用的方法,无疑就是ON_MESSAGE,这也是守护进程接收用户输入并响应的地方。

为简单起见,我的守护进程收到用户输入后,仅仅弹出一个弹出对话框,显示在SAPGUI里:

SAP ABAP守护进程的实现方式是什么

守护进程的启动则通过框架类cl_abap_daemon_client_manager的start方法实现,第75行start方法传入的参数lo_pcp作为守护进程启动参数一并传入,pcp代表Push Channel Protocol,一种用于消息传递的数据结构。

SAP ABAP守护进程的实现方式是什么

使用下列语句启动该守护进程,将其命名为jerry_daemon:

zcl_jerry_simple_daemon=>start( iv_daemon_name = 'jerry_daemon' ).

在事务码SMDAEMON里可以看到所有正在运行的守护进程:

SAP ABAP守护进程的实现方式是什么

打开SAPGUI,使用如下的方法向jerry_daemon这个ABAP守护进程发送一条消息,会立即在SAPGUI里看到守护进程的on_message方法里弹出的对话框:

SAP ABAP守护进程的实现方式是什么

因此将来我们如果遇到需要开发长时间脱离终端运行且仍需响应用户输入的ABAP程序,除了ABAP后台作业和SICF服务外,又多了ABAP守护进程这种选择。

以上就是SAP ABAP守护进程的实现方式是什么,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

SAP ABAP守护进程的实现方式是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

SAP ABAP守护进程的实现方式是什么

本篇文章给大家分享的是有关SAP ABAP守护进程的实现方式是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Linux系统很多服务都通过守护进程实现,常见的守护进程有系统日
2023-06-03

java多线程守护线程的实现方法是什么

本篇内容介绍了“java多线程守护线程的实现方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!lass StopThread impl
2023-06-04

python使用fork实现守护进程的方法

os模块中的fork方法可以创建一个子进程。相当于克隆了父进程 os.fork() 子进程运行时,os.fork方法会返回0;而父进程运行时,os.fork方法会返回子进程的PID号。 所以可以使用PID来区分两个进程:#!/usr/bin
2022-06-04

Python如何实现守护进程的方法示例

场景设置: 你编写了一个python服务程序,并且在命令行下启动,而你的命令行会话又被终端所控制,python服务成了终端程序的一个子进程。因此如果你关闭了终端,这个命令行程序也会随之关闭。要使你的python服务不受终端影响而常驻系统,就
2022-06-04

用模板的方式创建守护进程代码实例

#include "wrap.h"#define MYDOMAIN_FLAG "/tmp/.mydomain_log" void domain_end(){ Unlink(MYDOMAIN_FLAG);} int domain_init()
2022-06-04

DaemonSet服务守护进程的使用场景是什么

这篇文章主要介绍“DaemonSet服务守护进程的使用场景是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“DaemonSet服务守护进程的使用场景是什么”文章能帮助大家解决问题。DaemonSe
2023-06-29

实现ABAP条件断点的三种方式分别是什么

这篇文章给大家介绍实现ABAP条件断点的三种方式分别是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。ABAP条件断点这个话题,Jerry的同事曾经问过我,虽然小但很实用。所谓条件断点,就是设置在某行语句上的断点,并
2023-06-04

SAP MM 采购申请审批的简单实现方式是什么

小编今天带大家了解SAP MM 采购申请审批的简单实现方式是什么,文中知识点介绍的非常详细。觉得有帮助的朋友可以跟着小编一起浏览文章的内容,希望能够帮助更多想解决这个问题的朋友找到问题的答案,下面跟着小编一起深入学习“SAP MM 采购申请
2023-06-05

java实现多线程的方式是什么

今天小编给大家分享一下java实现多线程的方式是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。实现多线程的方式:1、继承
2023-07-04

java虚拟线程的实现方式是什么

Java虚拟线程:高性能并发编程的变革Java19引入虚拟线程,提供轻量级并发编程模型。虚拟线程由虚拟机管理,消除了内核上下文切换,带来显著性能提升。它们基于绿线程、协程和执行上下文,并通过调度程序管理,在固定大小的线程池中执行。虚拟线程具有高性能、可扩展性、资源效率和可移植性,可用作ForkJoinPool和CompletableFutureAPI。需要注意的是,它们无法执行阻塞操作,需要并发保护,并且调试可能更复杂。
java虚拟线程的实现方式是什么
2024-04-12

java虚拟线程的实现方式是什么

Java虚拟机(JVM)使用操作系统线程来实现Java虚拟线程。JVM将Java线程映射到操作系统线程,并使用操作系统线程来执行Java线程的代码。这种实现方式被称为"一对一"(one-to-one)模型,即每个Java线程都需要一个对应的
2023-09-22

Python协程的四种实现方式是什么

本篇内容主要讲解“Python协程的四种实现方式是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python协程的四种实现方式是什么”吧!一、yield关键字实现方式以yield关键字方式实
2023-07-05

Linux进程间通信的方式是什么

本篇内容主要讲解“Linux进程间通信的方式是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux进程间通信的方式是什么”吧!·进程间通信:操作系统为系统提供的用于实现进程间通信的方式进
2023-06-29

Python进程间的通信方式是什么

这篇文章主要介绍“Python进程间的通信方式是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python进程间的通信方式是什么”文章能帮助大家解决问题。什么是进程的通信这里举一个例子接介绍通信
2023-06-29

Java多线程同步实现的方式是什么

这篇文章主要讲解了“Java多线程同步实现的方式是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java多线程同步实现的方式是什么”吧!给我一把锁,我能创造一个规矩很多人都知道,在Jav
2023-06-17

Go实现线程池的两种方式是什么

这篇“Go实现线程池的两种方式是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Go实现线程池的两种方式是什么”文章吧。w
2023-06-30

Java泛型的实现方式是什么

本篇内容主要讲解“Java泛型的实现方式是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java泛型的实现方式是什么”吧!Java 泛型实现方式Java 采用**类型擦除(Type eras
2023-06-16

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录