**简单介绍SAP中的消息订阅**
**背景**
设想一个问题,如何在SAP业务数据创建后立刻发送给第三方系统。我们SAP技术同事遇到这类需求都觉得比较头疼。常用的实现方式有:比如在SAP业务数据保存增强中触发第三方系统提供的接口将SAP数据发送给第三方系统,但这样实现对SAP系统开发改造比较大,而且如果在增强中误使用事务提交,会影响整个事务一致,严重时会导致生产环境数据不一致;其他方式比如使用IDOC方式实现异步传送,但和一些主流技术架构的第三方系统集成起来比较麻烦,因为他们通常支持协议是AMQP、JMS等。
现在我们可以依托SAP BTP平台,使用SAP Event Mesh服务,以事件驱动消息集成的方式满足这类需求。
**介绍**
SAP Event Mesh(原称Enterprise Messaging) 是SAP Business Technology Platform (SAP
BTP)的异步消息消息代理服务。它基于AMQP/MQTT/TCP通信协议,实现SAP系统间与第三方系统间的消息传送。与市面上主流的开源消息代理软件(RabbitMQ、RocketMQ)类似都实现了消息订阅,队列,事务处理等功能,而SAP
Event Mesh原生集成SAP产品SAP S/4HANA Event Enablement实现业务事件的消息发送。
**特点**
●原生支持SAP产品的业务事件功能。对S/4HANA On-Premise, S/4HANA Cloud, SuccessFactors , Concur
, Cloud for Customer等SAP产品提供预定义的配置。
●系统间数据交互的解耦。消息发送方和接收方的配置和数据流都集中到SAP Event Mesh中。
●方便扩展。消息集成是订阅式,只需要第三方系统支持AMQP协议并订阅SAP Event Mesh提供的接口即可扩充消息集成。
SAP Event Mesh 也可以集成SAP Cloud Platform Integration作为SAP云集成套件的一部分丰富SAP集成功能。
**例子**
下面介绍使用SAP S/4 HANA Event Enablement功能发布Business
Partner(BP)创建(Created)事件主题,并通过SAP Event Mesh将事件产生的消息内容分发给SAP BTP Cloud
Platform Integration, Workflow和邮件,实现触发审批流和推送通知。
**步骤一:**
在SAP BTP平台创建一个Event Mesh服务。
我们预先在SAP BTP平台中创建SAP Event Mesh服务,然后生成Service key。Service Key中包含了链接SAP Event
Mesh所需的连接信息。
**步骤二:**
我们需要在S/4HANA端配置与SAP Event Mesh服务通信。
1)在S/4HANA中使用上文创建的SAP Event Mesh服务的连接信息配置RFC Destination指向SAP Event Mesh 服务。
2) 使用Enterprise Event Enablement模块的Manage Channel and Parameters功能来配置Event
Channel。S/4HANA系统使用这个Channel的配置来发送消息。
3) 使用Enterprise Event Enablement模块的Maintain Event
Topics功能配置需要的发布事件主题,将BP事件主题发布出来。S/4HANA会根据Event Topics这个配置内容过滤需要发送的事件主题。
**步骤三:**
在SAP Event Mesh服务订阅中,配置消息队列和消息队列的主题订阅。接收方系统会监听这个消息队列获取消息内容。
这样我们完成了SAP Event Mesh & S/4HANA Event Enablement的配置内容。
**测试:**
我们使用SAP Cloud Platform Integration来监听这个消息队列。在SAP Cloud Platform
Integration中配置触发发送工作流和邮件发送。
在S/4HANA系统新建一个Business Partner。
打开SAP Event Mesh服务订阅,可以看到S/4HANA已经将消息推送到SAP Event Mesh配置的消息队列中。
SAP Cloud Platform Integration监听到了消息队列中的消息,启动了对应的CPI运行流程。
CPI中会将数据提交给BTP Workflow,触发工作流审批:
接着发送邮件通知相应人员:
至此上述举例的消息集成的功能流程完成。
\- E N D -
作者:张海华
审核:贾栋才
编辑:朱思聪