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变体的叙述:

事务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存在有内向队列,那也象征它在发送系统上肯定存在外向队列。内向队列在一段时间里只好处理系统资源允许处理的函数模块调用数量。它可以防范服务器被一个客户端阻塞。唯有在劳务体系独立存在一个内向队列的面貌是不容许存在的,因为急需在客户端系统存在外向队列,来安装顺序并拦截单独的拔取阻塞客户端系统的满贯办事历程。

更多相关消息可见:

后台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的音讯, 请看:

本土数据队列:LDQ

地面数据队列(Local Data Queue
)是一种特其它RFC通信。在这种应用意况下,系统不会积极性发送数据。相反,按照拉取规则,系统会把数据存储在该地,直到被外表系统调用(比如移动设备)。

LDQ可以代表原先由qRFC在不发送场景下提供的意义(qRFC No
Send)。相比之下它提供了更有效用的数据模型。

更多内容:

Local Data Queue
(LDQ)

名词对照

scheduler:调度程序

outbound  queue:外向队列

inbound queue:内向队列

 

有关小说:ABAP
RFC远程调用

 

 

相关文章