APC接続タイプ(WebSocketまたはTCPソケット)に関係なく、ABAPでMQTTクライアントアプリケーションを開発するには、以下の手順が必要です。
- MQTTイベントハンドラーを実装します。
MQTTイベントハンドラーを実装するには、インターフェースIF_MQTT_EVENT_HANDLERを実装する必要があります。システムはMQTTイベントハンドラーメソッドを呼び出して、アプリケーションに確認応答と着信メッセージを処理させます。アプリケーションは、次のイベントハンドラーメソッドを実装できます。
着信メッセージおよびイベントを処理するには、既存のABAPセッションがアイドル状態または待機状態である必要があります。この状態は、たとえば、このセッションの要求がない場合に暗黙的に開始することも、ABAPWAITステートメントを使用して明示的に開始することもできます。クライアントにAPCイベントを明示的に待機させるには、ステートメントを使用できますWAIT FOR PUSH CHANNELS UNTIL <log expression> [<UP TO <seconds> SECONDS]。
- MQTTクライアントオブジェクトを作成します。
MQTTクライアントオブジェクトのタイプはIF_MQTT_CLIENTであり、ファクトリクラスCL_MQTT_CLIENT_MANAGERを使用して作成する必要があります。2つの異なるクライアントファクトリメソッドがあります。
- CL_MQTT_CLIENT_MANAGER〜CREATE_BY_DESTINATION(MQTT WebSocketベースのクライアント通信用)。
- CL_MQTT_CLIENT_MANAGER〜CREATE_BY_URL( WebSocketとTCPソケットベースのMQTT通信の両方)。次のURLプレフィックスを使用して、適切な基盤となるプロトコルを選択できます。
- WebSocketおよびSecureWebSocketの場合はws://およびwss://
- TCPソケットおよびセキュアTCPソケットの場合はtcp://およびtcps://
CREATE_BY_DESTINATIONの場合、トランザクションでタイプ’G’(外部サーバーへのHTTP接続)の宛先を更新する必要がありますSM59。[宛先のログオンとセキュリティ]タブでは、オプションで、MQTTブローカーでの接続フェーズ中に可能な認証のためにMQTTユーザーとパスワードを維持できます。
これらの接続パラメーターに加えて、最初のステップで実装したイベントハンドラーをファクトリメソッドに渡す必要があります。
- MQTTクライアントオブジェクトを使用します。ファクトリメソッドが正常に実行されると、タイプIF_MQTT_CLIENTのMQTTクライアントオブジェクトが提供されます。このオブジェクトは、次のメソッドを提供します。
このメソッドIF_MQTT_CLIENT~CONNECTはMQTT接続を確立します。このメソッドは、接続のAPCおよびMQTTステップに追加の接続オプションを指定するためのオプションのインポートパラメーターを提供します。パラメータI_APC_CONNECT_OPTIONSを使用すると、アプリケーションでAPC接続オプションを指定できます。たとえば、接続セットアップのタイムアウトや、発信および着信MQTTメッセージのウイルススキャンプロファイルなどです。パラメーターI_MQTT_CONNECT_OPTIONSを使用すると、アプリケーションはMQTT関連のオプション(MQTTユーザー名とパスワード、MQTT接続の維持時間間隔、MQTT「WillMessage」など)を指定できます。
MQTTクライアントオブジェクトのメソッドPUBLISH、、、SUBSCRIBEおよびUNSUBSCRIBEは、オプションのエクスポートパラメータE_ENVELOPEを提供します。タイプは、それぞれのメソッドのIF_MQTT_ENVELOPE_PUBLISH、IF_MQTT_ENVELOPE_SUBSCRIBE、またはIF_MQTT_ENVELOPE_UNSUBSCRIBEです。エンベロープには、送信されたMQTTパケットに対して確認応答パケットがすでに受信されているかどうかの情報が格納されます。エンベロープごとに、この情報はメソッドを介して取得できますGET_CONFIRMATION_STATE。ABAPセッションが送信されたパケットの確認応答を処理するとすぐに、その確認状態が「処理中」から「完了」に変わります。メッセージのエンベロープを区別するために、各エンベロープには、MQTT接続ごとに一意のメッセージ番号(タイプINT8)が含まれています。この接続IDとメッセージ番号のペアは、ABAPシステムがMQTTブローカーと交換するMQTTアクションの一意の識別子として使用できます。エンベロープごとに、メソッドを使用してメッセージ番号を取得できますGET_MESSAGE_NUMBER。
MQTTクライアントオブジェクトのメソッドGET_PENDING_ENVELOPES_PUBLISHは、確認状態「処理中」にある送信済み公開パケットのすべてのエンベロープのリストを返します。このメソッドの目的は、MQTTクライアントがブローカーから切断された場合に、保留中のすべてのメッセージを簡単に取得することです。アプリケーションは、ブローカーへの接続が確立されるとすぐにメッセージを再送信するために、この情報を保存したい場合があります。
MQTTクライアントオブジェクトのメソッドGET_CONTEXTは、他のAPC接続の場合と同等の方法でMQTTクライアントの接続に関する情報を提供します。コンテキストには、次の情報が含まれています。-
接続の最初のHTTP要求(TCPソケットの場合、Internet Communication Manager(ICM)への内部HTTP要求があります)
-
接続ID(IDは拡張パスポート(EPP)にも記載されています)
-
接続状態
-