简述
真正的异步通信方式,它只执行一次RFC服务器中调用的功能模块。当 RFC 客户端程序正在执行 bgRFC 时,远程系统不需要可用。bgRFC 组件将调用的 RFC 函数与相应的数据一起存储在 SAP 数据库中的唯一事务 ID (TID) 下。
在同一系统,解耦和(潜在的)并行化。负载分布在该系统的可用应用程序服务器上。此 bgRFC 场景称为入站过程。
在两个系统,解耦以及应用程序或业务场景的物理分段是可能的。作为异步的结果,可以平衡被调用应用程序和调用应用程序的应用程序服务器的关键特性的差异。记录在呼叫系统中完成。此方案是 出站过程。
就其完整的、面向对象的 API 以及与 ABAP 编程语言的集成而言,对开发人员来说更好
数据任意顺序( 事务性)传输一次或仅以创建顺序( 排队)传输一次。
如果调用时,被调用系统不可用,调用保留在本地队列下,等待再次调用。
bgRFC 可以是事务性的(类型 T)或排队的(类型 Q)。使用 Q 型时,属于多个调用的单元也将按照它们写入数据库的顺序进行发送和处理。
qRFC 模型仅在RFC 调度程序处理数据时检测各个单元之间的依赖关系 。对于每个目的地,出站调度程序启动一个调度程序来处理该目的地的数据。调度程序必须在每次处理目的地之前再次确定顺序。
bgRFC,依赖关系是在 存储数据时确定的。RFC 调度程序可以以最小的努力找到所有可以立即执行的单元,并且只检测一次所有依赖项。存储数据时的额外工作在很大程度上通过数据库设计中的高效算法和优化得到补偿。
bgRFC删除队列或单元有风险的,并行时单元依赖被删除坑你导致后续单元错误。
使用新的 bgRFC 设计实现的改进主要在高负载条件下变得明显,此时每个目的地都有许多相关单元。RFC 数据处理首次可以实现线性对数可扩展性(取决于系统容量)。
当处理单个单元时,排队功能的事务行为不允许显着节省,但应用更多或更快的硬件会在吞吐量方面产生更明显的结果。限制因素是数据库的性能和单元的处理速度。
此外,新的 API 也有助于优化程序。冗余功能已被删除,旧 API 的一些限制不再适用。这导致了一个更流畅、更有效的概念,这将减少支持和开发团队的时间和精力。
bgRFC配置
入站队列的目的地必须在事务 SBGRFCMAINIDST 中维护
在系统中实现更好吞吐量的设置取决于许多不同的因素。如果要减少数据库的负载,请压缩数据。这也减少了网络负载。相反,压缩需要应用服务器上的资源。因此,如果网络和数据库负载对您的系统没有特别重要的意义,不要选择压缩数据。
数据最初被标记为可删除。在此参数中指定的时间到期后,将启动一个从数据库中物理删除数据的报表。
出于性能原因,不要指定太短的时间段。但是,根据数据量的不同,较长的时间段可能会导致数据在相关表中累积(例如 QRFC_O_UNIT)
调度器数量
入站调度程序的数量(每个应用程序服务器)。如果系统负载很重,大量的调度器可以帮助系统并行处理更多的查询。但是,如果系统负载较轻,过多的调度器会互相阻塞,降低吞吐量。
在要启动调度程序的每个应用程序服务器上,必须至少有三个对话工作进程可用。必须为每个进一步的调度程序提供另一个对话工作流程。不能在对话工作进程少于三个的应用服务器上启动调度程序。确保入站和出站调度程序都有足够的对话工作流程。
此参数定义服务器可以保持多少打开的连接(任务)。此目的地的所有未处理的 bgRFC 调用都被计算在内。使用这些参数可以防止目的地被 bgRFC 调用超载。
对于 TCP/IP 连接(外部服务器程序),通常只允许一个连接。
如果您选择的百分比太大,您可能会使网关过载。如果您选择的百分比太小,吞吐量可能会受到限制。
空闲时间确定如果当前没有查询等待处理,调度程序将等待多长时间。如果在此时间之后没有查询,则调度程序终止。
默认值:10 取值范围:取值范围:>=1 和 <= < 每台服务器的最大打开连接数>
调度器数量
如果在将单元发送到目的地时发生通信错误,则在指定时间段后再次执行单元。此参数确定在将其标记为错误并锁定之前重试该单元的次数。
等待时间必须至少为 60 秒。如果在将单元发送到目的地时发生通信错误,调度程序可以重试该单元。此参数定义两次重试之间的等待时间。
等待时间必须至少为 60 秒。如果在将单元发送到目的地时经常出现通信错误,调度程序可以将该目的地锁定指定时间。此参数控制对目标的锁定保留多长时间。
定义调度程序在释放目标以供其他调度程序处理之前可以处理多长时间
如果设置了这个标志,那么调度程序创建的所有单元都会记录它们的处理状态。
如果您想在已经存在的处理队列和单元或调度配置的 bgRFC 授权之外定义访问保护,您可以在此处输入相关类。
IF_BGRFC_APPL_CHECK_MON_IN(入站调度程序)
IF_BGRFC_APPL_CHECK_MON_OUT(出站调度程序)
定义的目标会在SM59被锁定,无法更改,如果需要更改,则新建
定义完成
定义入站目标(入站bgRFC使用)
点击新建,选择服务器组
开发API:
CALL FUNCTION 'function_name' IN BACKGROUND UNIT unit
多个后台单元可以接受多个功能模块
如果发生运行时错误SYSTEM_ILLEGAL_STATEMENT后使用 DB_COMMIT或者隐式提交会触发错误DBIF_DSQL2_DEFAULT_CR_ERROR
单元中执行的所有数据库操作(例如 插入, 调整, 更新, 和 删除) 被持久化在数据库中。如果在此操作之后应用程序终止相关单元并出现错误(例如 消息 E, 一个, 或者 X) 那么你不能回滚整个单元( 逻辑工作单元)。
监控管理
事务代码 SBGRFCLOG bgRFC应用日志(SLG1)
注意事项
bgRFC 使用队列组织不同的调用。同时放置在多个队列中的调用会在这些队列之间创建依赖关系。这导致了一个同步点,它类似于锁。
直到要处理的条目位于定义依赖关系的队列的头部,依赖队列才被处理。只有当它位于所有队列的开头时,才能处理此条目。
通过调用启用 RFC 的功能模块来完成的。多个功能模块调用可以捆绑在一起形成一个 单元。单元是传输的单位。它要么完全转移,要么等待转移。
在同一个目的地不能使用bgRFC 与 tRFC 和 qRFC 的组合使用。
将 qRFC 转换为 bgRFC 的应用程序必须支持在 qRFC 中的队列和 bgRFC 中的队列之间创建临时链接的迁移方案,这样才能确定顺序正确,bgRFC不能改回qRFC
附加
bgRFC单元状态
bgRFC调试
如果单元的状态为红色(包含错误)或黄色(锁定),则只能使用 bgRFC 监视器直接调试单元。
如果有问题的错误是相关序列未被告知的技术错误,则只能使用 bgRFC Monitor 调试有错误的单元。否则,必须从序列监视器重新启动有错误的序列,并且只能使用外部断点进行调试。
将光标放在有问题的单元上,然后 从上下文菜单中 选择Unit Analysis Debug Unit 。(需要权限支持)