ABAP bgRFC

9 篇文章 2 订阅

简述

        真正的异步通信方式,它只执行一次RFC服务器中调用的功能模块。当 RFC 客户端程序正在执行 bgRFC 时,远程系统不需要可用。bgRFC 组件将调用的 RFC 函数与相应的数据一起存储在 SAP 数据库中的唯一事务 ID (TID) 下。

        出入站

        在同一系统,解耦和(潜在的)并行化。负载分布在该系统的可用应用程序服务器上。此 bgRFC 场景称为入站过程。

        在两个系统,解耦以及应用程序或业务场景的物理分段是可能的。作为异步的结果,可以平衡被调用应用程序和调用应用程序的应用程序服务器的关键特性的差异。记录在呼叫系统中完成。此方案是 出站过程。

        对比tRFC和qRFC优点

        改进的可扩展性

        更少使用系统资源

        更详细的配置选项

        根据 push原则开发处理事务或排队,明确功能分离。

        就其完整的、面向对象的 API 以及与 ABAP 编程语言的集成而言,对开发人员来说更好

        主要特点

        数据任意顺序( 事务性)传输一次或仅以创建顺序( 排队)传输一次。

        如果调用时,被调用系统不可用,调用保留在本地队列下,等待再次调用。

        bgRFC以一个单元执行,在一个单元内调用具有如下特点。

        1. 按照它们被调用的顺序执行

        2. 在目标系统的同一程序上下文中执行

        3. 在单个事务中执行:它们作为一个单元提交或回滚。

        bgRFC 可以是事务性的(类型 T)或排队的(类型 Q)。使用 Q 型时,属于多个调用的单元也将按照它们写入数据库的顺序进行发送和处理。

        依赖项

        qRFC 模型仅在RFC 调度程序处理数据时检测各个单元之间的依赖关系 。对于每个目的地,出站调度程序启动一个调度程序来处理该目的地的数据。调度程序必须在每次处理目的地之前再次确定顺序。

        bgRFC,依赖关系是在 存储数据时确定的。RFC 调度程序可以以最小的努力找到所有可以立即执行的单元,并且只检测一次所有依赖项。存储数据时的额外工作在很大程度上通过数据库设计中的高效算法和优化得到补偿。

bgRFC删除队列或单元有风险的,并行时单元依赖被删除坑你导致后续单元错误。

        性能

        使用新的 bgRFC 设计实现的改进主要在高负载条件下变得明显,此时每个目的地都有许多相关单元。RFC 数据处理首次可以实现线性对数可扩展性(取决于系统容量)。

        当处理单个单元时,排队功能的事务行为不允许显着节省,但应用更多或更快的硬件会在吞吐量方面产生更明显的结果。限制因素是数据库的性能和单元的处理速度。

        此外,新的 API 也有助于优化程序。冗余功能已被删除,旧 API 的一些限制不再适用。这导致了一个更流畅、更有效的概念,这将减少支持和开发团队的时间和精力。

bgRFC配置

        出站队列的目的地必须在事务 SM59中维护

        入站队列的目的地必须在事务 SBGRFCMAINIDST 中维护

        事务代码 SBGRFCCONF bgRFC调用配置

每个日志的消息数

默认值1000,需要大于100

日志条目的生命周期(小时)

默认值120,不建议选择太短时间

压缩 

        在系统中实现更好吞吐量的设置取决于许多不同的因素。如果要减少数据库的负载,请压缩数据。这也减少了网络负载。相反,压缩需要应用服务器上的资源。因此,如果网络和数据库负载对您的系统没有特别重要的意义,不要选择压缩数据。

单位删除时间(秒)

        数据最初被标记为可删除。在此参数中指定的时间到期后,将启动一个从数据库中物理删除数据的报表。

        出于性能原因,不要指定太短的时间段。但是,根据数据量的不同,较长的时间段可能会导致数据在相关表中累积(例如 QRFC_O_UNIT)

        默认值3600,需要大于120

         调度器数量

        入站调度程序的数量(每个应用程序服务器)。如果系统负载很重,大量的调度器可以帮助系统并行处理更多的查询。但是,如果系统负载较轻,过多的调度器会互相阻塞,降低吞吐量。

        在要启动调度程序的每个应用程序服务器上,必须至少有三个对话工作进程可用。必须为每个进一步的调度程序提供另一个对话工作流程。不能在对话工作进程少于三个的应用服务器上启动调度程序。确保入站和出站调度程序都有足够的对话工作流程。

         -1:调度器的数量由负载决定(默认)。

         0:bgRFC 的应用程序服务器/目标被锁定。

        > 0:应用程序服务器/目标的运行调度程序的最大数量。

        每台服务器的连接数

        此参数定义服务器可以保持多少打开的连接(任务)。此目的地的所有未处理的 bgRFC 调用都被计算在内。使用这些参数可以防止目的地被 bgRFC 调用超载。

        对于 TCP/IP 连接(外部服务器程序),通常只允许一个连接。

        0:针对 bgRFC 调用锁定目标。

        默认值:500 ,需要>=0

        网关资源百分比

        选择 1% 到 100% 之间的百分比

        如果您选择的百分比太大,您可能会使网关过载。如果您选择的百分比太小,吞吐量可能会受到限制。

        默认值50,在1-100之间(不包含上下限)

        调度程序空闲时间

        空闲时间确定如果当前没有查询等待处理,调度程序将等待多长时间。如果在此时间之后没有查询,则调度程序终止。

        默认值:300 值范围:>= 60

        每个服务器的目的地

        默认值:10 取值范围:取值范围:>=1 和 <= < 每台服务器的最大打开连接数>

        条目的生命周期

        负载均衡表项的最大生命周期,以秒为单位

        默认值:10 取值范围:>= 1

        调度器数量

        默认值:-1 值范围:>= -1, 0 = 锁定

        最大自动重试次数

        如果在将单元发送到目的地时发生通信错误,则在指定时间段后再次执行单元。此参数确定在将其标记为错误并锁定之前重试该单元的次数。

        默认值:30 值范围:>= 0

        每单位等待时间

        等待时间必须至少为 60 秒。如果在将单元发送到目的地时发生通信错误,调度程序可以重试该单元。此参数定义两次重试之间的等待时间。

        默认值:900 值范围:>= 60

        每个目的地的等待时间

        发生通信错误时,两次自动通信尝试到目的地之间的等待时间

        等待时间必须至少为 60 秒。如果在将单元发送到目的地时经常出现通信错误,调度程序可以将该目的地锁定指定时间。此参数控制对目标的锁定保留多长时间。

        默认值:900 值范围:>= 60

        目的地处理时间

        以秒为单位的目的地的最大处理时间

        定义调度程序在释放目标以供其他调度程序处理之前可以处理多长时间

        默认值:0(= 无限)值范围:>= 300

        每个目的地的连接数

        默认值:10 值范围:>= 0

        自动检查次数

        查看一个单元是否仍在处理中的最大自动检查次数

        默认值 30  取值范围:> 0

        单位历史活动

        如果设置了这个标志,那么调度程序创建的所有单元都会记录它们的处理状态。

        使用事务代码 SBGRFCHIST 查看日志

        检查类

        如果您想在已经存在的处理队列和单元或调度配置的 bgRFC 授权之外定义访问保护,您可以在此处输入相关类。

        检查类可以使用以下接口实现:

        IF_BGRFC_APPL_CHECK_MON_IN(入站调度程序)

        IF_BGRFC_APPL_CHECK_MON_OUT(出站调度程序)

        定义管理程序目标(如果已有则不用处理)

        定义的目标会在SM59被锁定,无法更改,如果需要更改,则新建

        使用SM59新建时注意

        ABAP 连接:

                不能输入系统编号。

                无法输入任何服务器。

        逻辑连接:

                只能输入“NONE ” 或者不输入作为逻辑连接的参考。

                必须为两种连接类型输入用户、密码和客户端。

        定义完成

         定义入站目标(入站bgRFC使用)

         点击新建,选择服务器组

 

         开发API:

CALL FUNCTION 'function_name' IN BACKGROUND UNIT unit

         多个后台单元可以接受多个功能模块

        如果发生运行时错误SYSTEM_ILLEGAL_STATEMENT后使用 DB_COMMIT或者隐式提交会触发错误DBIF_DSQL2_DEFAULT_CR_ERROR 

        单元中执行的所有数据库操作(例如 插入, 调整, 更新, 和 删除) 被持久化在数据库中。如果在此操作之后应用程序终止相关单元并出现错误(例如 消息 E, 一个, 或者 X) 那么你不能回滚整个单元( 逻辑工作单元)。

监控管理

        事务代码 SBGRFCMON 调用 bgRFC 监视器

                单位活动

                删除单位

                调试单元

                锁定单元进行分析

                显示功能模块(源系统中的源代码)

                显示单元队列(仅限 Q 型)

                显示功能模块列表(双击功能模块)

                目的地活动

                锁定/解锁目的地

                维护目的地(去目的地的维护交易)

                队列活动(仅限 Q 型)

                创建/删除队列锁

                删除队列(删除队列的所有单元)

        事务代码 SBGRFCHIST 显示日志

        事务代码       SBGRFCLOG bgRFC应用日志(SLG1)

        报表 RSRZLDG0 执行错误的BGRFC运行

注意事项

        bgRFC 使用队列组织不同的调用。同时放置在多个队列中的调用会在这些队列之间创建依赖关系。这导致了一个同步点,它类似于锁。

        直到要处理的条目位于定义依赖关系的队列的头部,依赖队列才被处理。只有当它位于所有队列的开头时,才能处理此条目。

        通过调用启用 RFC 的功能模块来完成的。多个功能模块调用可以捆绑在一起形成一个 单元。单元是传输的单位。它要么完全转移,要么等待转移。

        在同一个目的地不能使用bgRFC 与 tRFC 和 qRFC 的组合使用。

        将 qRFC 转换为 bgRFC 的应用程序必须支持在 qRFC 中的队列和 bgRFC 中的队列之间创建临时链接的迁移方案,这样才能确定顺序正确,bgRFC不能改回qRFC

附加

bgRFC单元状态

 

bgRFC调试

        如果单元的状态为红色(包含错误)或黄色(锁定),则只能使用 bgRFC 监视器直接调试单元。

        如果有问题的错误是相关序列未被告知的技术错误,则只能使用 bgRFC Monitor 调试有错误的单元。否则,必须从序列监视器重新启动有错误的序列,并且只能使用外部断点进行调试。

        将光标放在有问题的单元上,然后 从上下文菜单中 选择Unit Analysis Debug Unit 。(需要权限支持)

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值