SAP RFC介绍:关于sRFC,aRFC,tRFC,qRFC和bgRFC

大约八月份之当儿召开过一个有关两只SAP系统内部资产平摊传输的类型,使用及了RFC(Remote
Function
Call)技术。因为事先有医疗-CRM相关接口开发之涉,以为自己对RFC很熟稔了,做起来会特别顺利,不思量还是遇到了若干问题。打算整治一下关于她的始末,进一步学习。

正文内容的最主要来源是SAP的英文文档。会于重视基本概念上的东西,偶尔涉及实际的代码、配置。后续可能会见因本人之莫过于行使状态更新更详细的牵线。

 

正文链接:http://www.cnblogs.com/hhelibeb/p/8066753.html

总述

对于SAP与SAP系统以及SAP与非SAP系统之间的连续而言,远程函数调用(Remote
Function
Call,以下简称RFC)是均等栽标准的通信方式,它可以兑现对长途系统面临函数的调用。

有RFC类型都通过CPI-C或TCP/IP协议进行传输。
它们做了同样栽Gateway通信。

正文是针对性富有RFC变体的叙述,它们拥有不同之特色和可的使状况。

同步RFC:sRFC

及步RFC(Synchronous
RFC,sRFC)是最中心的RFC形式。在sRFC调用中,调用者会等待远程被调用者的处理过程。

它的语法形式是:

CALL FUNCTION func DESTINATION dest. 

独立的施用状况包括:

  • 销售:为歧体系创造市订单(central sales)。
  • 销售:对于有查询,在供应商系统里行一个对此指定物料的可用性检查。
  • 品管理:在旁一个体系里对某物料订单执行来源判断。
  • CRM/SRM:对SAP后端平系统倡导某个物料的可用性检查。
  • CRM/SRM:在SRM组件中开创市订单时,在先生集中核算中为你的老本中心开展预算检查。
  • 先生:向会计集中核算体系要一个成本中心清单。
  • BW:调用BW组件(商业信息仓库)来呼吁一个专门之evaluation。

异步RFC:aRFC

异步RFC(Asynchronous
RFC,aRFC)类似与tRFC,用户以继承调用会话之前,不待拭目以待她的得。不过,aRFC和tRFC之间也是几乎沾不同的地方:

  • 当调用者开始一个aRFC的时光,被调用的服务器必须得吸纳请求。aRFC的参数不会见记录在数据库被,而是径直发送给对方服务器。
  • aRFC允许用户和远程系统开展交互式对话。
  • 调用程序可以由aRFC接收结果。

汝可以在当您用树立与一个远端系统的连年、但是要以调用RFC后未欲等结果而是要持续处理常采取aRFC。aRFC也可发送给同样的体系。在这种状态下,系统打开一个新的对话(窗口)。你可以于调用对话与给调用会话间切换。使用下的口舌开启一个aRFC:

CALL FUNCTION Remotefunction STARTING NEW TASK Taskname

DESTINATION ...

EXPORTING...

TABLES ...

EXCEPTIONS...

 RECEIVE RESULTS FROM FUNCTION Remotefunction 用于一个子顺序外接受aRFC的调用结果。可以采用以下收取参数:

  • IMPORTING

  • TABLES

  • EXCEPTIONS

附加项KEEPING
TASK
阻止连接于接受处理结果后关闭。相关的长距离上下文(滚动区域)保持得用的状态,直至调用者终止连接。

双重多关于aRFC的音方可于以下地方获得:

  • aRFC的调用属性

  • 自aRFC接收结果

  • 保远程上下文

  • aRFC的并行处理

有关aRFC变体的叙述:

  • CALL FUNCTION – STARTING NEW
    TASK

  • RECEIVE

  • WAIT
    UNTIL

  • RFC示例

事务RFC:tRFC

于动事务RFC( transactional
RFC,tRFC)的上,被调用的函数模块于受调用系统中恰恰运行一糟糕(Exactly Once)。

远端系统非需以RFC客户端程序运行tRFC的当儿可用。tRFC组件将给调用的RFC函数和有关数据存储在SAP系统的数据库里,包含一个唯一的业务标识符(transaction
identifier,TID)。

若调用发送了,接收系统却是宕机状态,调用会保留在本土队列中一段时间。调用对话程序可以当匪等待远程调用成功/失败的情状下连续运行。如果接到系统在一段时间后还是不可用,调用将被计划吧后台作业运行。

tRFC使用后缀IN BACKGROUND TASK.

虽和一道调用一样,参数
DESTINATION在长距离系统定义了程序上下文。结果是,如果您对一个destination重复地调用一个函数(或者一次性调用多个函数),则可以在同等之前后文中访问于调用函数的全局数据。。

系会于表ARFCSSTATE和表ARFCSDATA中著录远程连接要和其的满贯参数值。你得用事务SM58来查。当调用程序到达COMMIT
WORK
言语时,远程调用会受转正到被对方系统。

在两个COMMIT
WORK
里面,所有的有所和一个destination的tRFC属于同一个逻辑单元(LUW)。

tRFC处理流图示:

亚洲必赢bwin696.com 1

汝得以某些情况下行使使用tRFC,比如,对于急需以作业之不等等级更新相关数据库表的复杂性的处理过程。

tRFC会确保所有的计划更新在先后到达COMMIT WORK语词时受执行。

(注意:tRFC的定义着莫克来任何EXPORT参数,因为调用程序中只要来IMPORT参数,就会见招语法错误。此外,你也未得以本着施行回调的次开展异步调用)

网可用性:

设若远程系统未可用,SAP系统会将报表RSARFCSE计划呢后台作业,并拿有关的事体ID作为变式,再开展处理。这个表程序会又地为调用,直到其成功地接连对方系统了。

当给计划吗后台作业时,RSARFCSE自动地因为一个光阴间隔运行(默认是每15分钟运行一不行,最多品尝30不善)。你可通过增强程序SABP0000和SABP0003来自定义该日距离。

透过SM59部署destination,选择一个destination并且选择
编辑->TRFC选项,在此间定义连接尝试次数上限和再次连接尝试的流年间隔。

亚洲必赢bwin696.com 2

倘若在品味指定的次数后依旧不足抵达相应的网,系统会停止调用RSARFCSE,并形容副状态CPICERR至表ARFCSDATA中。在旁一个点名的工夫晚(默认是8天),在表ARFCSSTATE内的条文也会叫删除。当然为可以定制者时刻,或者手动在SM59起动相应的政工条目。

tRFC的缺点:

  • tRFC独立地拍卖所有LUW。根据激活的tRFC数量,程序来或会见显地落调用系统跟叫调用系统的习性。
  • 另外,在动被定义之LUW的调用顺序是无能够得到保持的。因此无法确保事务会按照用期望的依次运行。tRFC唯一能确保的只有:所有LUW都见面或早或晚地让传。

可以此翻tRFC语句的叙述:

CALL FUNCTION IN BACKGROUND
TASK

队列RFC:qRFC

排RFC(queued Remote Function
Call,qRFC)是tRFC的一个扩张。它同意你以多单tRFC调用序列化为一个队。

qRFC调用会首先为函数模块TRFC_SET_QUEUE_NAME进行序列化处理,然后这些调用被一个tRFC进行实际的dispatch。

qRFC可以作为他于行(由调用系统序列化)处理,或者是外为行(由为调用系统序列化)。

* *

以下是三种工作数据传的气象(为什么图片被的字是德文?):

亚洲必赢bwin696.com 3

场景1:tRFC

拖欠场景适用于数据交互间单独发送的景。系统1负在一个调用应用(client)使用tRFC连接系统2着之受调用应用(r
server)。在该场景中,数据由tRFC传输,意味着发送至目标体系的函数模块调用会让保单独运行一赖。你无可以定义函数模块运行的一一和时。如果传输过程中出了不当,系统会计划一个后台作业,在15分钟后再发送函数模块调用。

场景2:带有外为行的qRFC

于该场景中,发送系统应用一个生动活泼队列来序列化被发送的数量。这代表发送系统的活跃队列包含在是依靠关系的函数模块调用。当数码发送时,会保持确定的一一,并且调用会以正好同一赖还有序的方法(exactly once in order)发送给目标体系。

只顾:目标体系处理时未欲转移qRFC的相继,但是,它要开tRFC功能。

情景3:带有内往行的qRFC(以及活跃队列)

当斯景下,不仅发送系统(client)有他往行,目标体系为来外为行。如果qRFC存在有内于行,这也代表她于发送系统上自然有外为行。内于行在一段时间里只能处理系统资源允许处理的函数模块调用数量。它可预防服务器被一个客户端阻塞。只有在劳动体系独立在一个外为行的场面是匪可能有的,因为用在客户端系统是外于行,来安装顺序并堵住单独的运用阻塞客户端系统的浑办事历程。

再也多系消息可见:

  • Queued Remote Function Call
    (qRFC)

后台RFC:bgRFC

使用

bgRFC(Background Remote Function
Call)允许吃调用程序稍晚一些接收数据,而无是一道接收。接收数据的早晚,需要保证数据只出现相同不好还无序(
transactional) 、或者单现出同不行还有序(queued)。

采用bgRFC进行异步调用,会发出如下优势:

  • 于同一个SAP系统内(同一个体系ID,同一个client):解耦,同时提供了连行化能力。负载会分布于拖欠网的可用的应用服务器上。这个bgRFC场景被当一个外为程序。

  • 在个别独远程SAP系统之中:解耦,并且经过可实现采用或工作场景的物理细分。异步调用的结果是,调用者和为调用者的应用服务器的要特性差异可以取平衡。记录工作以调用系统受到得。这个现象是一个活蹦乱跳程序。

  • 有数个次成也外-内程序:该方式可以获得任何优化增选之优势。不过,如果你选择了这般做,数据会受记录点滴破,一破是调用者(外向处理)、一赖是被调用应用(
    内向程序的出格类别)。这导致数据库、应用服务器会生额外的负担。

bgRFC使用队列组织不同的调用。当一个调用同时受停在多独序列的时段,系统会为这些队列创建依赖。这带来了一个同步点(synchronization
point),类似于锁。

如一个调用处于依赖队列中,那么当且光当她在依赖队列的极上层时,它才会为处理。

对同一个destination,不可以拿bgRFC和tRFC、qRFC结合起来使用。不过,对于不同的destination,你可定义你想用的简报类。

语法:

 CALL FUNCTION 'function_name'

IN BACKGROUND UNIT unit

          EXPORTING ... 

 

集成

从今qRFC转换为bgRFC的应用程序,必须支持创建qRFC中的队列与bgRFC中之序列中的临时链接的迁移方案。通过如此的方案,可以保科学的排顺序,即便是以打qRFC变为bgRFC的随时。

只顾:从bgRFC改回qRFC是无可能的。

以SAP NetWeaver Release
7.11及更胜似之本子及,bgRFC也堪与basXML(二进制ABAP序列化XML)通信协议一起使用。

架构

风土人情的qRFC模型只有在数额被RFC调度程序处理的时才探测各个独立单元内的依赖性关系。对于每个destination,外向调度程序都见面打开一个调度程序来处理这destination的多少。

及之相对的凡,bgRFC的指关系在数存储的下就是控制了。通过这样做,RFC调度程序可以一次性找到有的急需为拍卖的单元,并且经过极端小之用力(minimum
effort)就可找到其中间的因关系。在储存数据的时需要提交的附加努力,则足以当那个充分程度上由于数据库设计着之大效率算法和优化补偿。

每个客户端定义一定数额的活泼计划,并且并行处理队列负载,虽然目标体系的负载会在一个较短的时日间隔后叫确定,但是呢为此会面更加可靠。

单元以及排的删除程序

以及传统的主次不同,如果来任何单元或队列被删去,依赖还会维持。因为单元会受优先打上记,并且在当时之后只是吃调度程序删除。

亚洲必赢bwin696.com 4

若图,在去了Unit4之后,Unit6只能够当Unit3之后运行,因为Unit4只有在调度程序处理过Unit3之后才见面叫删除。如果您去掉queue2,那么会发下面的情形:

亚洲必赢bwin696.com 5

Unit6见面在Unit2从此运行,所有选定的unit都见面给调度程序删除。

留神:删除队列或者单元总是有风险的。在咱们的事例里,它见面招致Unit6遇到错误,或者造成目标体系的数据库不平等,因为它们的前提Unit4因为吃删除而并未运行。

Gateway:Gateway是另外一个黑的习性瓶颈,在bgRFC中,它呢获得了优化。bgRFC中之初的定义是会调剂在相同光应用服务器上还要运转的龙腾虎跃调度程序的无比可怜数据,也会见调剂全部RFC调度程序可用之最好大连接数。这个范围会保护当地的Gateway使之不至于过载。

每个发送系统的交互的外向调度程序数量和它的绝大连接数也是可配置的,因此于destination的Gateway也在过载保护。

特性的震慑:新bgRFC贯彻的优化在青出于蓝负荷、多因的状况下特别扎眼。首糟糕运行的时段,线性对数可伸缩性(a
linear logarithmical
scalability)的RFC数据处理成可能(视系统兼容性而定)。

函数队排的政工特性使得,在拍卖单独的单元时,bgRFC不绝容易获得斐然的性能提升,但是当用还多要另行快的硬件的时候,则足以显著提升吞吐量。限制因素会是数据库的属性和这些单元的处理速度。

此外,新的API也是优化的一模一样部分。一些剩下的函数被移除,某些老的API也不再采用。这使得相关的干活尤为平整和有效率,减少支持组织和开发团队的工作量。

重多信息:

更多关于bgRFC的信, 请看:

  • bgRFC:
    配置

  • bgRFC:
    管理

  • bgRFC:
    编程

当地数据列:LDQ

地面数据列(Local Data Queue
)是一模一样栽专门之RFC通信。在这种应用情况下,系统非见面积极性发送数据。相反,根据拉取规则,系统会把数量存储于本土,直到于外表系统调用(比如移动设备)。

LDQ可以取代原先由qRFC在未发送场景下提供的机能(qRFC No
Send)。相比之下它提供了再次有效率的数据模型。

重复多内容:

Local Data Queue
(LDQ)

名词对照

scheduler:调度程序

outbound  queue:外亚洲必赢bwin696.com于行

inbound queue:内往行

 

连带文章:ABAP
RFC远程调用

 

 

相关文章