0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SAP Event Meshを試してみる

Last updated at Posted at 2022-03-04

お仕事でEvent Meshを触る機会があったので自分でも触ってみようと思いました

わかりやすい説明とかは書けないのでこちらの記事を読んで頂くとだいたいのことはわかると思います(感謝)

また実務での利用イメージはこちらを見ていただくと良いかと思います。

S/4のBusinessPartnerが更新されるとEventMeshにMQTTプロトコルで連携がされてODataで見に行くようになっています。

今回の流れ

Node.jsのメッセージクライアントリポジトリがあるのでこちら使ってみます。
基本的にこちらの解説に従って進めていきます。
大きな流れとしては
1.準備
2.Queue Subscriptionsの確認
3.Webhook Subscriptionsの確認

準備

EventMeshのinstance作ったりServiceKeyの発行

上記のURLにも記載はありますがチュートリアルもあるのでこちらも参考に

コード準備

git clone https://github.com/SAP-samples/event-mesh-client-nodejs-samples.git
cd xb-msg-amqp-v100-samples
npm install

cf-sample-config.jsをServiceKeyに合わせて修正

ServiceKey.json
{
  "uaa": {
    "credential-type": "binding-secret",
    "clientid": "sb-clone-xbem-service-broker-63fe8d60c2a54ecf99b269e00ccbea62-clone!b40970|xbem-service-broker-!b732",
    "clientsecret": "0c51cb83-e3a4-4b60-9814-1a588f5dde40$qNB4NPKpqsxQIzn6TxZf0UgrVob065IWlQjBAxolRYw=",
    "xsappname": "clone-xbem-service-broker-63fe8d60c2a54ecf99b269e00ccbea62-clone!b40970|xbem-service-broker-!b732",
    "url": "https://bb8713batrial.authentication.us10.hana.ondemand.com"
  },
  "xsappname": "clone-xbem-service-broker-63fe8d60c2a54ecf99b269e00ccbea62-clone!b40970|xbem-service-broker-!b732",
  "management": [
    {
      "oa2": {
        "clientid": "sb-clone-xbem-service-broker-63fe8d60c2a54ecf99b269e00ccbea62-clone!b40970|xbem-service-broker-!b732",
        "clientsecret": "0c51cb83-e3a4-4b60-9814-1a588f5dde40$qNB4NPKpqsxQIzn6TxZf0UgrVob065IWlQjBAxolRYw=",
        "tokenendpoint": "https://bb8713batrial.authentication.us10.hana.ondemand.com/oauth/token",
        "granttype": "client_credentials"
      },
      "uri": "https://enterprise-messaging-hub-backend.cfapps.us10.hana.ondemand.com"
    }
  ],
  "serviceinstanceid": "63fe8d60-c2a5-4ecf-99b2-69e00ccbea62",
  "messaging": [
    {
      "oa2": {
        "clientid": "sb-clone-xbem-service-broker-63fe8d60c2a54ecf99b269e00ccbea62-clone!b40970|xbem-service-broker-!b732",
        "clientsecret": "0c51cb83-e3a4-4b60-9814-1a588f5dde40$qNB4NPKpqsxQIzn6TxZf0UgrVob065IWlQjBAxolRYw=",
        "tokenendpoint": "https://bb8713batrial.authentication.us10.hana.ondemand.com/oauth/token",
        "granttype": "client_credentials"
      },
      "protocol": [
        "amqp10ws"
      ],
      "broker": {
        "type": "sapmgw"
      },
      "uri": "wss://enterprise-messaging-messaging-gateway.cfapps.us10.hana.ondemand.com/protocols/amqp10ws"
    },
    {
      "oa2": {
        "clientid": "sb-clone-xbem-service-broker-63fe8d60c2a54ecf99b269e00ccbea62-clone!b40970|xbem-service-broker-!b732",
        "clientsecret": "0c51cb83-e3a4-4b60-9814-1a588f5dde40$qNB4NPKpqsxQIzn6TxZf0UgrVob065IWlQjBAxolRYw=",
        "tokenendpoint": "https://bb8713batrial.authentication.us10.hana.ondemand.com/oauth/token",
        "granttype": "client_credentials"
      },
      "protocol": [
        "mqtt311ws"
      ],
      "broker": {
        "type": "sapmgw"
      },
      "uri": "wss://enterprise-messaging-messaging-gateway.cfapps.us10.hana.ondemand.com/protocols/mqtt311ws"
    },
    {
      "oa2": {
        "clientid": "sb-clone-xbem-service-broker-63fe8d60c2a54ecf99b269e00ccbea62-clone!b40970|xbem-service-broker-!b732",
        "clientsecret": "0c51cb83-e3a4-4b60-9814-1a588f5dde40$qNB4NPKpqsxQIzn6TxZf0UgrVob065IWlQjBAxolRYw=",
        "tokenendpoint": "https://bb8713batrial.authentication.us10.hana.ondemand.com/oauth/token",
        "granttype": "client_credentials"
      },
      "protocol": [
        "httprest"
      ],
      "broker": {
        "type": "saprestmgw"
      },
      "uri": "https://enterprise-messaging-pubsub.cfapps.us10.hana.ondemand.com"
    }
  ]
}

こんなJsonがあったら下記のように変えます。
今回はAMQPプロトコルで連携するのでそこのブロックの情報を持ってきます。

'use strict';

const fs = require('fs');

module.exports = {
  uri: 'wss://enterprise-messaging-messaging-gateway.cfapps.us10.hana.ondemand.com/protocols/amqp10ws',
  oa2: {
    endpoint: 'https://bb8713batrial.authentication.us10.hana.ondemand.com/oauth/token',
    client: 'sb-clone-xbem-service-broker-63fe8d60c2a54ecf99b269e00ccbea62-clone!b40970|xbem-service-broker-!b732',
    secret: '0c51cb83-e3a4-4b60-9814-1a588f5dde40$qNB4NPKpqsxQIzn6TxZf0UgrVob065IWlQjBAxolRYw='
  },
  credentials: {
    mechanism: '',
    user: '',
    password: ''
  },
  data: {
    source: 'queue:SampleForAQueue',
    target: 'topic:sample/for/a/topic',
    payload: new Buffer.allocUnsafe(20),
    maxCount: 100,
    logCount: 10
  }
};

cf-sample-config.jsに合わせてEventMeshのqueueとtopicを作成

image.png

image.png

Queue Subscriptionsの確認

producer.jsconsumer.jsがあってproducer.jsはEventMeshに連携を飛ばして、それをconsumer.jsで使う構成になっています。

こちらのコマンドを実行するとproducer実行され100回メッセージが飛ばされます。

$ npm run-script producer
> @sap/xb-msg-amqp-v100-samples@1.0.0 producer
> node src/producer.js ../config/cf-sample-config.js

connected node-v12.22.7 @sap/xb-msg-amqp-v100 0.9.56
10
20
30
40
50
60
70
80
90
100
disconnected

messages published    : 100
messages acknowledged : 100
websocket incoming    : 10 frames ( small 5 / medium 5 / large 0 )
websocket outgoing    : 9 frames ( small 6 / medium 3 / large 0 )
protocol incoming     : 108 frames, 3681 bytes, 9 chunks
protocol outgoing     : 107 frames, 10524 bytes, 8 chunks ( reuse 7 / alloc 3 )
drain events incoming : 0
drain events outgoing : 0
socket wait time[ms]  : 0
socket init time[ms]  : 3217
sender work time[ms]  : 19
overall run time[ms]  : 19
overall rate [msg/s]  : 5263

image.png

Queuesが100回分溜まったことが確認できます。
次にconsumerを動かしてQueuesを消費していきます。

$ npm run-script consumer
> @sap/xb-msg-amqp-v100-samples@1.0.0 consumer
> node src/consumer.js ../config/cf-sample-config.js

connected node-v12.22.7 @sap/xb-msg-amqp-v100 0.9.56
10
20
30
40
50
60
70
80
90
100
disconnected

messages published    : 100
websocket incoming    : 10 frames ( small 4 / medium 6 / large 0 )
websocket outgoing    : 12 frames ( small 7 / medium 5 / large 0 )
protocol incoming     : 106 frames, 15048 bytes, 10 chunks
protocol outgoing     : 106 frames, 5728 bytes, 11 chunks ( reuse 10 / alloc 3 )
drain events incoming : 0
drain events outgoing : 0
overall rate [msg/s]  : 526

image.png

Queuesが消費されて0になったことが確認できます。
実務の実装ではproducer,consumerの役割を果たすアプリがあってその橋渡しをするのがEventMeshの役割かと思います。

Webhook Subscriptionsの確認

EventMeshにWebhook Subscriptionの設定を作成します。

image.png

Webhookの宛先はこちらを指定しています。

producerをもう一度実行してみます

$ npm run-script producer
> @sap/xb-msg-amqp-v100-samples@1.0.0 producer
> node src/producer.js ../config/cf-sample-config.js

connected node-v12.22.7 @sap/xb-msg-amqp-v100 0.9.56
10
20
30
40
50
60
70
80
90
100
disconnected

messages published    : 100
messages acknowledged : 100
websocket incoming    : 10 frames ( small 5 / medium 5 / large 0 )
websocket outgoing    : 9 frames ( small 6 / medium 3 / large 0 )
protocol incoming     : 108 frames, 3681 bytes, 9 chunks
protocol outgoing     : 107 frames, 10524 bytes, 8 chunks ( reuse 7 / alloc 3 )
drain events incoming : 0
drain events outgoing : 0
socket wait time[ms]  : 0
socket init time[ms]  : 3217
sender work time[ms]  : 19
overall run time[ms]  : 19
overall rate [msg/s]  : 5263

Queuesは0のままです。

image.png

webhookの連携先を確認してみます。
2回やったので合計200回のRequestが確認できました。
こうやって溜まったQueuesぶん指定されたURLをコールさせることが出来ます。

image.png

最後に

EventMeshを使うと非同期なシステム間の連携ができることが確認出来ました。
おしまい

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?