Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9140

Event Meshを試してみる

$
0
0
お仕事で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を作成 Queue Subscriptionsの確認 producer.jsとconsumer.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 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 Queuesが消費されて0になったことが確認できます。 実務の実装ではproducer,consumerの役割を果たすアプリがあってその橋渡しをするのがEventMeshの役割かと思います。 Webhook Subscriptionsの確認 EventMeshにWebhook Subscriptionの設定を作成します。 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のままです。 webhookの連携先を確認してみます。 2回やったので合計200回のRequestが確認できました。 こうやって溜まったQueuesぶん指定されたURLをコールさせることが出来ます。 最後に EventMeshを使うと非同期なシステム間の連携ができることが確認出来ました。 おしまい

Viewing all articles
Browse latest Browse all 9140

Trending Articles