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处理流图示:

房地产项目 1

而可于好几情况下使用以tRFC,比如,对于要以事情之两样等级更新相关数据库表的纷繁的处理过程。

tRFC会确保有的计划更新在先后到达COMMIT WORK语句时为实践。

(注意:tRFC的定义着未可知闹任何EXPORT参数,因为调用程序中使发生IMPORT参数,就会见导致语法错误。此外,你也非得以针对实施回调的先后进行异步调用)

系可用性:

假如远程系统非可用,SAP系统会将报表RSARFCSE计划呢后台作业,并将有关的事务ID作为变式,再进行拍卖。这个表格程序会再次地叫调用,直到其成功地连续对方系统了。

当于计划为后台作业时,RSARFCSE自动地盖一个时光距离运行(默认是各个15分钟运行一不好,最多品尝30不好)。你可以经增强程序SABP0000和SABP0003来自定义该日距离。

通过SM59部署destination,选择一个destination并且选择
编辑->TRFC选项,在此地定义连接尝试次数上限和另行连接尝试的日子距离。

房地产项目 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可以作为他往行(由调用系统序列化)处理,或者是外为行(由为调用系统序列化)。

* *

以下是三种植业务数据传的观(为什么图片中之亲笔是德文?):

房地产项目 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)就可以找到她中的负关系。在仓储数据的时刻要交给的附加努力,则可以深特别程度达到由于数据库设计受到之赛效率算法和优化补偿。

每个客户端定义一定数量的活泼计划,并且并行处理队列负载,虽然目标体系的负载会在一个较短的时刻间隔后为确定,但是呢用会面愈纯粹。

单元及行的删除程序

和风俗的次第不同,如果有其他单元或队列被去除,依赖还会保持。因为单元会给先行从及号,并且在就以后只是于调度程序删除。

房地产项目 4

假使图,在去了Unit4之后,Unit6只能够在Unit3之后运行,因为Unit4只有在调度程序处理过Unit3之后才见面给剔除。如果你去掉queue2,那么会发出下面的情事:

房地产项目 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:外为行

inbound queue:内为行

 

连锁文章:ABAP
RFC远程调用

 

 

相关文章