SAP ABAP QRFC 使用,MQ,队列,实例

本文介绍了在SAP中使用QRFC处理队列的需求,包括创建队列、激活队列和实现多队列并发优化,以提高系统性能和用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求的来源

在SAP中经常有碰到队列的情况,比如发送队列(各个系统交互等等),而且这样的情况不在少数,当多个系统同时使用的时候便会导致系统卡死,用户体验差,那么这个时候就要应用到MQ。在开源社区中有Rabbit MQ,那么在SAP中有没有现成可以使用的技术和情况呢?答案是必然的不然本文也不会存在。就是QRFC(Queqe RFC)也称队列RFC。

快速上手

本文旨在十分钟让你懂得如何使用QRFC并将他应用到实际的生产生活。快速上手这项技能

1.创建队列并提交

REPORT ZVRZHENG034.

PARAMETERS:
  P_NUM TYPE I        DEFAULT 50,
  P_IN  TYPE TRFCQNAM DEFAULT 'YTEST01_IN',
  P_OUT TYPE TRFCQNAM DEFAULT 'YTEST01_OUT',
  P_RFC TYPE RFCDEST  DEFAULT 'NONE'.

START-OF-SELECTION.
  DO P_NUM TIMES.

    CALL FUNCTION 'TRFC_SET_QIN_PROPERTIES'
      EXPORTING
*       QOUT_NAME          = P_OUT
        QIN_NAME           = P_IN
      EXCEPTIONS
        INVALID_QUEUE_NAME = 1
        OTHERS             = 2.
    IF SY-SUBRC <> 0.
      MESSAGE E001(00) WITH 'TRFC_SET_QIN_PROPERTIES error'.
    ENDIF.

*    CALL FUNCTION 'ZVRZHENG_BGRFC'
    CALL FUNCTION 'ZGG'
      IN BACKGROUND TASK
      DESTINATION P_RFC
      AS SEPARATE UNIT
      EXPORTING
        I_VBELN = '110'.

  ENDDO.
  COMMIT WORK.
  IF SY-SUBRC <> 0.
    MESSAGE E001(00) WITH 'Commit error with return code:' SY-SUBRC.
  ENDIF.

2.执行队列


    CALL FUNCTION 'TRFC_QIN_ACTIVATE' STARTING NEW TASK 'ZVRZHENG'
      EXPORTING
        QNAME   = 'YTEST01_IN'"你要执行的队列
        MAXTIME = 3600."最大执行时间

3.监控执行情况 SMQ2

这是待执行状态

这是执行状态

那么截至到这里你已经能以队列的形式调用啦。

多队列并发

很多时候做队列的原因是资源安排的不合理,如果像快速上手中那样只创建一个,那和直接同步等待无异,作为一个合格的ABAPer要榨干CPU的每一丝能效,要节约每一个内存中的1和0。那怎么样在保证系统不卡死的情况下最大化使用CPU的性能,BASIS会给每个系统分一定程度的性能,推荐开的线程在5~8之间(符合大部分BASIS的习惯) 一般10个以下。

1.循环队列

循环队列是指从1到8,8 的下一个到1无限循环的队列。为了使我们的队列均匀的跑,使用循环队列来写入任务让每个队列的数量和运行时间大致相等,保证不会某个队列过于堵塞。具体体现在代码中是这样的。

  DATA LV_QIN TYPE TRFCQNAM.
  DO 100 TIMES.
    LV_QIN = SY-INDEX MOD 7 + 1."Loop时使用sy-tabix
    CONDENSE LV_QIN.
    LV_QIN = 'VRZHENGTEST' && LV_QIN.
    CALL FUNCTION 'TRFC_SET_QIN_PROPERTIES'
      EXPORTING
*       QOUT_NAME          = P_OUT
        QIN_NAME           = LV_QIN
      EXCEPTIONS
        INVALID_QUEUE_NAME = 1
        OTHERS             = 2.
    IF SY-SUBRC <> 0.
      MESSAGE E001(00) WITH 'TRFC_SET_QIN_PROPERTIES error'.
    ENDIF.

    CALL FUNCTION 'ZVRZHENG_BGRFC' IN BACKGROUND TASK DESTINATION 'NONE' AS SEPARATE UNIT.

  ENDDO.
 COMMIT WORK.

2.循环启用队列

循环启用队列,同时多条队列在跑动,并可以讲队列放置在闲置的应用部署中进行。即资源空闲的应用实例,可根据BASIS的设定设置,并且使用多线程的方式调用,挤干服务器的每一滴性能。

  DO 8 TIMES.
    LV_QIN = SY-INDEX MOD 7 + 1."Loop时使用sy-tabix
    CONDENSE LV_QIN.
    LV_QIN = 'VRZHENGTEST' && LV_QIN.
    CALL FUNCTION 'TRFC_QIN_ACTIVATE' STARTING NEW TASK LV_QIN
      EXPORTING
        QNAME   =  LV_QIN 
        MAXTIME = 7200."最大运行时间,最大可调整至9999
    IF SY-SUBRC <> 0.

    ENDIF.
  ENDDO.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值