您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關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的原生支持。
本文我們就用ABAP平臺1809新引入的ABAP MQTT和ABAP Daemons來實現一個Hello World級別的ABAP守護進程。
MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸協議)是一種基于發布/訂閱模式的輕量級通訊協議,構建于TCP/IP協議上,因其低開銷和低帶寬占用的優點,在物聯網、小型設備、移動應用等方面應用特別廣泛。
關于ABAP平臺1809新特性的更多介紹,請參閱SAP社區博客:
https://1/abap-platform-for-sap-s4hana-1809/http://,可以使用下面這個用webSocket實現的MQTT客戶端來操作該broker:
http://www.ket-client/
這個broker專門用于測試用途,收到MQTT消息后,會原封不動地將其回復給發送方。
在ABAP類的構造函數里連接MQTT broker,把返回的MQTT客戶端實例存儲在類的成員變量mo_mqtt_client里,接下來就能使用該實例的publish方法去發送消息,subscribe方法訂閱消息,on_message方法接收消息。
打開MQTT客戶端,訂閱渠道:abaptopic/jerry/test
接著我首先在第66行,往該渠道發送一條Hello World的消息,broker收到后會將其原封不動地返回,但因為我的ABAP類并沒有訂閱這個渠道,因此不會收到這條hello world消息的回復。
第68行訂閱該渠道后,第69行發送第二條消息給broker,這次就能收到其回復了。
回到broker客戶端,看到從ABAP端發送過來的兩條消息:
回到ABAP端,看到代碼第69行發送的第二條消息的回復:
弄清楚ABAP MQTT的用法之后,我們就可以動手開發ABAP守護進程了。雖然ABAP守護進程并沒有直接使用MQTT同使用者進行交互,但是掌握這種消息通知機制的用法,對我們了解ABAP守護進程的工作原理也有幫助。
新建一個ABAP類zcl_jerry_simple_daemon,將cl_abap_daemon_ext_base設置成其父類。
從基類繼承的這些ON開頭的方法,即ABAP守護進程生命周期事件發生時,開發人員能夠實現自定義邏輯的位置,比如在系統SHUTDOWN時,開發人員實現的ON_SYSTEM_SHUTDOWN方法會觸發,在此處完成守護進程的清理動作,實現優雅退出。
而最有用的方法,無疑就是ON_MESSAGE,這也是守護進程接收用戶輸入并響應的地方。
為簡單起見,我的守護進程收到用戶輸入后,僅僅彈出一個彈出對話框,顯示在SAPGUI里:
守護進程的啟動則通過框架類cl_abap_daemon_client_manager的start方法實現,第75行start方法傳入的參數lo_pcp作為守護進程啟動參數一并傳入,pcp代表Push Channel Protocol,一種用于消息傳遞的數據結構。
使用下列語句啟動該守護進程,將其命名為jerry_daemon:
zcl_jerry_simple_daemon=>start( iv_daemon_name = 'jerry_daemon' ).
在事務碼SMDAEMON里可以看到所有正在運行的守護進程:
打開SAPGUI,使用如下的方法向jerry_daemon這個ABAP守護進程發送一條消息,會立即在SAPGUI里看到守護進程的on_message方法里彈出的對話框:
因此將來我們如果遇到需要開發長時間脫離終端運行且仍需響應用戶輸入的ABAP程序,除了ABAP后臺作業和SICF服務外,又多了ABAP守護進程這種選擇。
以上就是SAP ABAP守護進程的實現方式是什么,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。