点击蓝字 关注我们

前言

PO(/PI)是SAP公司的一个中间件产品,用来辅助连接SAP系统与外围系统. (当然外围系统之间也可以使用PO).

本文主要介绍目标系统对异步消息处理的注意事项

问题发现

最近在项目中碰到一个PO与目标系统的数据传递问题.

目标系统人员称通过PO传递的单据有重复的.同时提供了重复的单号.

通过单号查询了PO的消息包,发现单号在PO系统中并没有重复, 只是该单所在的消息包在PO中的处理因为目标系统报错,重试了3次.

因此猜测导致单据重复的原因:目标系统每次报错之前都成功处理了部分单据,但是因为http服务超时报错,后面的单据没有处理,PO重试错误消息时又成功处理了部分单据, 导致重复.

后文是对该问题的分析及可能的解决方案

下图显示了PO监控器中该消息的重试及报错信息

多单传递

一般设计PO接口时,会允许一个消息传送多个单据(或主数据).

如下图,在PO中定义的DATA TYPE 中,会把消息主体节点(图示中是 body, 这个节点名称按项目习惯来命名)设置为 0..unbounded .

表示一个消息中可以存在多个body 节点. 一个body 节点往往是一单(或者一个主数据). 因此每个消息允许存在多单或多个主数据.

发出方控制

发出方程序一般通过参数控制每个消息中发送一个还是多个单据

消息包大小

一般情况下,发送同样个数的单, 消息包越大(一个消息中的单据数越多),意味着调用次数越少. 消息包越小,意味着调用次数越多.

总的时间开销=每个消息包的处理时间*消息包个数.

从总体性能来看, 并非包越大越好.消息包过大,单个消息包的处理性能可能会下降很多. 导致总体时间开销增大.

PO本身对消息包的大小有个建议(大概是不要超过4M左右). 因为每个接口的信息的大小不一致,因此每个接口传递的最佳单据个数也不尽相同,但是大概500-1000个单左右比较合适

对于同步接口,因为调用方等待反馈结果. 消息包越小越好,以便目标系统及时完成处理并反馈接口, 所以同步接口往往每个消息包传递一单.

消息错误重试

PO会把消息包作为一个整体处理, 在处理过程中,如果碰到目标系统反馈异常,PO会根据参数设置,重新尝试消息的处理,最大尝试3次.(可通过底层参数调整,单个接口可以通过通道参数设置该接口的重试次数)

XI will by default try to restart the message 3 times at intervals of 5 minutes before the status of the message is changed from Waiting to System Error .

We can achieve this by changing the retry count used by the Adapter Engine, by default its set to 3 times, 5 minutes apart. This count can be changed in Visual Admin->server->services-> SAP XI Adapter: XI.Here  change the number Retries parameter from 3 to 10 and change the retry retryInterval to around 10minutes. For these configuration changes to be picked up, restart SAP XI Adapter: XI.

  • xiadapter.inbound.numberRetries.default  3  重试次数

  • xiadapter.inbound.retryInterval.default   300000      重试间隔(入站)

  • xiadapter.outbound.retryInterval.default  300000      重试间隔(出站)

消息包处理方式

这里的消息包处理主要指目标系统对异步消息包的处理.

基于消息包的完整性及PO的重试机制,目标系统可以有两种处理方式

  • 消息包作为一个整体考虑,消息包中含的单,要么整体成功,要么整体失败.这样PO的报错重试机制就不会导致目标系统重复写入单据

  • 对单据做排重处理, 根据关键字识别单号, 对于存在的单号,做修改处理或记录日志报错,对于不存在的单号,做写入处理.(更完整的逻辑是:检查单据状态, 如果允许修改,才修改,对于不允许修改的单据,通过日志报错)

同时针对报错中的超时问题,目标系统需要修改http关于超时的参数,给服务调用更多的可用时间间隔.

当然,如果外围系统无法按上述逻辑调整. 也可以由发出系统改成每个消息包只传一单.

这个改动作为权宜之计可以临时使用一下. 因为大数据量传输时,每个消息只传一个单据, 会导致对PO的大量调用. 总体耗时增加的同时对PO的总体执行性能也会产生影响.

图示:推荐的消息处理方式

总结

异步接口无论发出方,还是接收方,都需要对发送/接收的数据做详细的日志记录.这样才能在业务发现数据异常时,通过不同环节的日志查询发现问题产生的原因.

同时目标系统最好有单据重复校验,单据的临时保存及出错单据的重处理机制.

这样对于一些因为目标系统原因导致的错误,解决报错原因后, 无需源系统重新发送数据,目标系统即可对临时存储的单据完成报错数据的重处理.

一般情况下,如果目标系统是SAP系统, 可以通过IDOC来作为单据的临时存储.这样可以利用IDOC的监控及重处理机制(需要增强单据重复校验机制),确保单据最终成功的写入SAP系统,产生相应的系统单据.

PO系列 目标系统对异步消息的处理相关推荐

  1. PO系列之 PO接口在ECC中的开发

    点击蓝字 关注我们 一 前言 PO(/PI)是SAP公司的一个中间件产品,用来辅助连接SAP系统与外围系统. (当然外围系统之间也可以使用PO). 一般情况下,异步接口推荐使用PO来确保数据正确抵达目 ...

  2. 电商异步消息系统的实践

    声明:本文为<程序员>7月期原创投稿文章,未经许可禁止任何形式的转载. 作者:王晓宇,小米网平台研发部软件研发工程师.2015年入职小米,主要负责电商后端仓储物流相关的业务系统开发.曾在西 ...

  3. kafka之Producer同步与异步消息发送及事务幂等性案例应用实战

    本套系列博客从真实商业环境抽取案例进行总结和分享,并给出Spark商业应用实战指导,请持续关注本套博客.版权声明:本套Spark商业应用实战归作者(秦凯新)所有,禁止转载,欢迎学习. 秦凯新的技术社区 ...

  4. 微服务中的异步消息通讯

    前言 在上一篇文章中,我们说到了异步消息通讯,下面这篇文章呢,大部分内容是翻译来自于这篇微软的文章,所以其内容还是具有一定的理论指导意义的. 当我们跨多个微服务进行内部通讯的时候,异步消息和事件驱动至 ...

  5. 阿里P8架构师谈:多线程、架构、异步消息、Redis等性能优化策略

    常见性能优化策略分类 1.代码 之所以把代码放到第一位,是因为这一点最容易引起技术人员的忽视.很多技术人员拿到一个性能优化的需求以后,言必称缓存.异步.JVM等.实际上,第一步就应该是分析相关的代码, ...

  6. PO系列之 Integration Builder集成生成器中的Party伙伴功能

    一 前言 PO(/PI)是SAP公司的一个中间件产品,用来辅助连接SAP系统与外围系统. (当然外围系统之间也可以使用PO). 一般情况下,异步接口推荐使用PO来确保数据正确抵达目标系统. PO通过企 ...

  7. EJB与JAVA BEAN_J2EE的异步消息机制

    EJB与JAVA BEAN_J2EE的异步消息机制 EJB与JAVA BEAN的区别 Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个 ...

  8. Android异步消息机制

    2019独角兽企业重金招聘Python工程师标准>>> 目录介绍 1.Handler的常见的使用方式 2.如何在子线程中定义Handler 3.主线程如何自动调用Looper.pre ...

  9. 异步消息的传递-回调机制

    1 什么是回调 软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用.回调和异步调用.同步调用是一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用:回调是一种双向 ...

最新文章

  1. 搜索重复代码_通过MappedByteBuffer搜索大文件
  2. usestate中的回调函数_React Hooks 源码解析(3):useState
  3. 【dfs】【链表】连通图 (ssl 1758)
  4. php递归操作目录 递归对参数转义
  5. LightOJ - 1140 How Many Zeroes?
  6. 解决无法连接到visual studio开发服务器的问题
  7. 天津检验检疫局完成核心业务容灾备份系统建设
  8. 本地Windows安装Navicat
  9. MySQL递归查询 三种实现方式
  10. 数据库知识与技巧日常汇总
  11. 代码参考--点击文本,即可复制
  12. java字符串不足长度自动补0
  13. iPhone屏幕数据
  14. IDC运维工程师的基本要求
  15. Python一些常用的网站
  16. ios 中h5网页跳到第三方后回到项目字体变大
  17. 如何解决哔哩哔哩视频声音过小的问题?
  18. idea Translation插件问题 TKK: 更新 TKK 失败,请检查网络连接解决办法
  19. mac下配置Charles,安装证书
  20. 酸奶糖酸比的计算机控制,PAL-BX丨ACID F5 五种水果糖酸度计

热门文章

  1. SpringMVC知识整理
  2. 百度地图添加带有图案的多边形区域
  3. CentOS安装wireshark
  4. multisim仿真 电流控制的电压源电路连接方法
  5. xcode7代码自动排版(格式化)
  6. Carson带你学Android:这是一个与众不同的Android微信公众号
  7. 学习笔记:《数字媒体技术概论》-3/10 计算机视觉技术及应用-中国大学慕课公开课
  8. Sentinel滑动时间窗限流算法原理及源码解析(中)
  9. 浙江大学计算机预推免经历
  10. 非关系型数据库MongoDB学习笔记