将 java spring boot 应用程序连接到 SAP 事件网格 (BTP)

问题描述

我目前正在尝试将 Java 应用程序(在本地运行)连接到 SAP 事件网格,以接收某些 SAP 系统发布的消息。

同事提供了一个包含凭据和端点的 json 文件

{
    "namespace": ":)","xsappname": ":)","management": [
        {
            "oa2": {
                "clientid": ":)","clientsecret": ":)","tokenendpoint": "https://whatever.authentication.eu20.hana.ondemand.com/oauth/token","granttype": "client_credentials"
            },"uri": "https://em-hub-backend.cfapps.eu20.hana.ondemand.com"
        }
    ],"serviceinstanceid": ":)","messaging": [
        {
            "oa2": {
                "clientid": ":)","protocol": [
                "amqp10ws"
            ],"broker": {
                "type": "sapmgw"
            },"uri": "wss://em-messaging-gateway.cfapps.eu20.hana.ondemand.com/protocols/amqp10ws"
        },{
            "oa2": {
                "clientid": ":)","protocol": [
                "mqtt311ws"
            ],"uri": "wss://em-messaging-gateway.cfapps.eu20.hana.ondemand.com/protocols/mqtt311ws"
        },"protocol": [
                "httprest"
            ],"broker": {
                "type": "saprestmgw"
            },"uri": "https://em-pubsub.cfapps.eu20.hana.ondemand.com"
        }
    ]
}

根据 SAP 帮助页面,有 3 种支持的协议 (https://help.sap.com/viewer/bf82e6b26456494cbdd197057c09979f/Cloud/en-US/3f424ff1ae3b4bc084c4f1ea0be96f54.html)

  • 基于 WebSocket 的高级消息队列协议 (AMQP) 1.0
  • 基于 WebSocket 的消息队列遥测传输 (MQTT) 3.1.1
  • 用于消息传递的 REST API

我猜 REST API 的性能很差。所以我会通过 WS 选择 AMQP 或 MQTT。 很难找到支持 AMQP 或 MQTT 以及安全 websockets 和 oauth 身份验证的 java 客户端库。

我已经看过 SAP 云 sdk。但功能概述告诉我消息传递仍处于计划状态,这意味着它尚不可用。

你有什么建议我可以在这里取得进展吗?

解决方法

UPD:我的同事推荐 XBEM library 是当前 SAP 事件消费的最佳选择。 CAP 和 SDK 的库在其基础上增加了便利性。在此处查看更多docs

SAP Cloud SDK 为 S/4HANA 的企业事件网格提供了实验性支持,但它已被 CAP 停止支持实施。他们承诺发布一个可以用作依赖项的库,以简化 Java 和 Node.js 的事件消耗。似乎比承诺的时间更长,请参阅屏幕截图中的当前状态: enter image description here

当库发布时,SDK 计划通过类型安全的事件访问提供额外的便利。目前,这是不可能的,因为没有普遍可用的版本。

如果您只有一个租户应用程序,您仍然可以试用 CAP 的库。作为参考,请咨询他们的 docs

如果您希望在 SAP Cloud SDK 中获得企业事件网格支持,请创建一个功能请求 here