SAP多线程异步处理机制

SAP实现异步处理&多线程

   starting new task异步处理机制原理,就是开启新的异步处理进程,异步处理在本质上还是需要处理,只是处理的时间不再记到函数执行时间里

进行异步处理时,需考虑以下问题:

    1、该接口是否能做成异步处理方式?并非所有的function都能做成异步处理,原因是,该接口执行完成后,后续逻辑是否依赖于该接口的执行结果,如果相互之间有牵连,则不能做成异步处理

    2进行异步处理的时候,进程会在后台开启多少?

3、系统资源是否够用,是否能够承载异步处理方式(比如,内存是否够用,在系统压力很大的时候,系统资源分配均衡?)

-------------------------------------------------------------------------------

第一步:初始化 server group ,server group 可以用RZ12进行维护,参数支直复制即可,不要修改。
    CONSTANTS: serv_group LIKE rzllitab-classname VALUE 'JOBRUN'.

  CALL FUNCTION 'SPBT_INITIALIZE'
     EXPORTING
       group_name                           = serv_group
*
     IMPORTING
*
       MAX_PBT_WPS                          =
*
       FREE_PBT_WPS                         =
     EXCEPTIONS
       invalid_group_name                   = 1
       internal_error                       = 2
       pbt_env_already_initialized          = 3
       currently_no_resources_avail         = 4
       no_pbt_resources_found               = 5
       cant_init_different_pbt_groups       = 6
       OTHERS                               = 7.
第二步:分别写多个FM的调用,注意:如果多个FM都共用的参数, 数据写在主程序中,然后用参数传到FM里。
    CALL FUNCTION 'Z_ BAPI_FM1'
    STARTING NEW TASK 'FM1TASK'

   DESTINATION IN GROUP serv_group
    PERFORMING sub_fm1_back ON END OF TASK
 
   TABLES
      date_ra = date_ra.


    CALL FUNCTION 'Z_BAPI_FM2'
    STARTING NEW TASK 'FM2TASK'

   DESTINATION IN GROUP serv_group
    PERFORMING sub_FM2_back ON END OF TASK
    TABLES
      date_ra = date_ra.
第三步.FM执行完之后数据反回,数据返回的参数是全局的,在Z_BAPI_FM*中对全局参数进行赋值。
  FORM sub_fm1_back USING  name.
  RECEIVE RESULTS FROM FUNCTION 'Z_BAPI_FM1'
      TABLES
        ret_par  = gdt_ret_pars "返回的参数
        return    = gdt_gr_return.
  APPEND LINES OF gdt_gr_return TO gdt_return.
  gr_flag = 'X'. "这个很重要,根据这个参数判断FM是否执行完毕
  ENDFORM.                    "sub_fm1_back


   FORM sub_fm2_back USING  name.
  RECEIVE RESULTS FROM FUNCTION 'Z_BAPI_FM2'
      TABLES
        returnpo  = gdt_ret_pos
        return          = gdt_returnpo_return.
  APPEND LINES OF gdt_returnpo_return TO gdt_return.
  returnpo_flag = 'X'.
ENDFORM.
                    "sub_fm2_back

第四步:收尾工作,判断各个FM是否执行完毕
  WAIT UNTIL gr_flag = 'X' AND returnpo_flag = 'X' .
  ret_pars[]       = gdt_ret_pars. 返回的结果
  returnpo[] = gdt_ret_pos.        返回的结果
  APPEND LINES OF gdt_return TO return. 最终返回的return ,一般FM都有返回值,返回错误,警告等信息。

-------------------------------------------------------------------------------

Technical Settings

1.       Target system: 目标系统名称  TCODE   SM59 维护远程目标

2.       Message server 目标系统的消息服务器 T-CODE RZ03 Service 栏中带有”M”字符的 为消息服务器

3.       Group 服务器组 Tcode SMLG 可以查看

4.       Target host (目标系统的主机或IP地址) SM51 中的HOST name字段

5.       System number(目标系统的系统编号)

异步调用

      异步RFC也要求RFC服务器系统在调用时可用, 被调用的function module 将立即启动并运行,区别于同步调用, 调用程序不等待远程调用结果,而继续运行, 远程功能处理与调用程序的处理过程相分离,功能返回结果可以在后续过程中被接收.

语法

CALL FUNCTION rfm_name

       START NEW TASK taskname

       .

异步RFC调用时接收结果

CALL FUNCTION rfm_name

       START NEW TASK taskname

       PERFORMING return_form ON END OF TASK

子程序必须存在于程序中

FORM return_form USING taskname

       RECEIVE RESULTS FROM FUNCTION rfm_name

ENFORM

并行RFC方式的RFM调用

并行RFC实际上是异步RFC调用的应用之一

1.  首先异步RFC调用适用于多个SAP ABAP系统间的并行处理(不支持非SAP系统)

2.  可以在同一个系统内部使用异步RFC调用,并将部分处理负载转移到其它的应用服务器上.

3.  如果不现实指定异步RFC调用的目标,则在同一应用服务器内,也可以通过本地异步RFC调用实现多个工作过程的并行处理

分组并行处理的语法

CALL FUNCTION rfm_name

 STARTING NEW TASK taskname

       DESTINATION IN GROUP g1

       .

 EXCEPTION

       RESOURCE_FAILURE = ..

并行处理条件

逻辑独立的工作单元(logically-independent units of work):并行处理并不适合需要顺序进行的数据处理.各个数据处理过程不能具有依赖关系

ABAP要求

被调用的功能模块程序中不能包含使用目标back的远程功能调用

调用程序不能在异步调用之后生成新的内部会话

不能通过 call function starting new task destination in group 语句启动外部程序

系统资源要求

为了处理并行作业, sap系统中至少要有三个对话工作过程. 调度队列(dispatcher queue)必须低于10%满载,而且至少要有一个空闲对话工作过程用于处理并行作业中的任务,并保留两个空闲的工作过程处理系统登陆及管理任务.

事务性RFC

通过事务RFC调用,可以将多个逻辑上相关的远程调用绑定到一个LUW上.在该LUW内,所有调用按其调用顺序,在目标系统的相同程序上下文中以单个事务的方式执行,要么执行所有,要么完全回滚.

语法

CALL FUNCTION rfm_name

 IN BACKGROUND TASK

….

或者

CALL FUNCTION rfm_name

 IN BACKGROUND UNIT oref

….

事务RFC 调用不能直接接收或通过 receive results from fucntion 来接收rfm的返回结果.

模块中不应该指定任何 export类型参数.

队列RFC 方式

要确保事务性RFC中的LUW都按照其创建磁学执行,需要使用队列RFC创建LUW序列

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: SAP异步提交是一种常用的技术,用于在SAP系统中执行长时间运行的任务,例如批量数据处理。以下是SAP异步提交的最佳实践: 1. 尽可能减少内存使用:由于异步提交可能需要处理大量数据,因此在编写代码时应注意内存使用情况。请确保您的程序只加载必要的数据,并在处理完后立即释放内存。 2. 确保代码是可靠的:异步提交的过程中,你的代码将在后台运行,因此需要确保你的代码是可靠的。请测试你的代码并处理异常情况。 3. 使用合适的提交方法:SAP提供了多种提交方法,包括提交到后台任务队列、提交到数据库等。根据你的需求选择合适的提交方法,以确保异步提交的效率和可靠性。 4. 监控异步任务:异步任务可能需要较长时间才能完成,因此需要定期监控任务的状态,以确保任务正常运行并及时处理异常情况。 5. 优化任务性能:如果异步任务需要处理大量数据,可以考虑优化任务性能,例如使用并行处理、缓存等技术。 总之,SAP异步提交是一种非常有用的技术,可以提高SAP系统的效率和可靠性。通过遵循最佳实践,可以确保异步提交的效果最佳。 ### 回答2: SAP异步提交是一种在SAP系统中处理事务的方法,它允许将事务的提交过程延迟到后续处理的某个点,以提高系统性能和效率。以下是关于SAP异步提交最佳实践的一些建议: 1. 选择适当的异步提交点:在设计业务流程时,需要选择合适的异步提交点,以最大限度地减少事务提交的次数和频率。通常,将大量的操作集中在一个事务中,并在操作执行完毕后,选择一个适当的点进行异步提交。 2. 合理利用并发处理:SAP系统支持并发处理,可以同时处理多个事务。在设计异步提交过程时,应合理利用并发处理的特性,确保异步提交的效率和效果。可以通过将事务拆分为多个子任务并并行处理,以提高系统的性能和响应速度。 3. 设置适当的异步提交参数:在SAP系统中,有一些异步提交的相关参数可以进行配置,如提交延迟时间、事务队列大小等。根据具体业务需求和系统性能,合理地设置这些参数,以达到最佳的异步提交效果。 4. 定期监控和优化:在使用SAP异步提交过程中,需要定期监控和优化系统性能。通过监控事务队列的长度、处理时间等指标,可以及时发现问题,并进行相应的优化措施,以确保系统的稳定性和高效性。 总之,SAP异步提交是提高SAP系统性能和效率的重要方法之一。通过合理设计业务流程、合理设置参数,以及定期监控和优化,可以最大限度地发挥异步提交的优势,提高系统的性能和效率。 ### 回答3: SAP异步提交是一种在SAP系统中进行数据提交的方法,它可以提高系统的性能和响应速度。下面是一些SAP异步提交的最佳实践: 1. 合理设置异步提交的频率:根据实际情况,合理设置异步提交的频率,不要过于频繁或过于稀疏。过于频繁的异步提交可能会导致系统负担过重,而过于稀疏则可能导致数据延迟提交。 2. 注意异步提交的时机:根据不同的业务需求,选择适当的时机进行异步提交。例如,在批量处理时,可以选择在某个阶段或者某个事件触发后进行异步提交,以提高处理效率。 3. 控并发处理:在异步提交过程中,要注意控并发处理的数量,避免同时进行过多的异步提交操作。过多的并发处理可能会导致系统资源竞争,影响整体性能。 4. 监控异步提交的状态:对于进行异步提交的任务或事务,要及时监控其提交状态,确保任务能够正常进行和完成。可以通过SAP系统提供的监控工具来跟踪异步提交的进度和结果。 5. 处理异常情况:针对异步提交过程中可能出现的异常情况,需要有相应的处理机。例如,当发生提交失败时,要有相应的错误处理和重试机,保证数据的完整性和准确性。 总之,SAP异步提交的最佳实践包括合理设置提交频率、选择适当的时机、控并发处理、监控提交状态和处理异常情况。通过合理应用这些实践,可以更好地提高SAP系统的性能和效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值