SAP資格過去問ならSAPnavi

NoteやStripe決済で安全にSAP過去問を購入することができます。
領収書発行可能 / 即時入手可能

SAP過去問 (SAP Exam)

AMQP Sender and Receiver Objects

AMQP送信者または受信者イベントハンドラーを実装する

3番目のステップとして、使用するオブジェクトの種類に応じて、インターフェースIF_AMQP_SENDER_EVENT_HANDLERまたはIF_AMQP_RECEIVER_EVENT_HANDLERのいずれかを実装する必要があります。システムはAMQPセンダー/レシーバーイベントハンドラーメソッドを呼び出して、アプリケーションにAMQPセンダー/レシーバーオブジェクトを処理させます。アプリケーションは、次のイベントハンドラーメソッドを実装できます。

IF_AMQP_SENDER_EVENT_HANDLER
方法 説明
ON_ATTACH AMQP送信者リンクが接続されたときに呼び出されます
ON_DETACH AMQP送信者リンクが切断されたときに呼び出されます(存在する場合はエラー情報を含みます)
ON_FLOW_CHANGE 送信者のリンククレジットが受信したフロー制御フレームによって更新されたときに呼び出されます
ON_SEND
  • AMQPメッセージがディスポジションフレームによって確認されたときに呼び出されます(QoSの場合は少なくとも1回
  • メッセージが送信されるとすぐに呼び出されます(QoSの場合は最大1回

IF_AMQP_RECEIVER_EVENT_HANDLER
方法 説明
ON_ATTACH AMQPレシーバーリンクが接続されているときに呼び出されます
ON_DETACH AMQPレシーバーリンクが切断されたときに呼び出されます
ON_MESSAGE AMQPメッセージが受信されたときに呼び出されます

着信メッセージおよびイベントを処理するには、既存のABAPセッションがアイドル状態または待機状態である必要があります。この状態は、たとえばこのセッションの要求がない場合など、暗黙的に開始することも、ABAPWAITステートメントを使用して明示的に開始することもできます。クライアントがAPCイベントを明示的に待機できるようにするには、次のステートメントを使用できます。

AMQPセンダーオブジェクトとレシーバーオブジェクトを作成して使用する

AMQP送信者オブジェクトを作成するIF_AMQP_SESSION~CREATE_SENDERには、AMQPセッションオブジェクトのメソッドを使用する必要があります。同様に、AMQPレシーバーオブジェクトは、メソッドを使用して作成できますIF_AMQP_SESSION~CREATE_RECEIVER実装したAMQP送信側またはAMQP受信側のイベントハンドラーは、それぞれのメソッドに指定する必要があります。このメソッドは、タイプIF_AMQP_SENDERCREATE_SENDERのAMQPセンダーオブジェクトを提供します。これは、次のメソッドを提供します。

IF_AMQP_SENDER
方法 説明
ATTACH AMQP送信者リンクを接続します
DETACH AMQP送信側リンクを切り離します
SEND AMQPメッセージを送信します
GET_CREDIT メッセージを送信するために利用可能なリンククレジットを取得します
GET_PENDING_ENVELOPES 確認待ちのメッセージエンベロープを取得します。これらのメッセージは、少なくとも1回はQoSで公開されましたが、その受信はピアによってまだ確認されていません。

このメソッドは、タイプIF_AMQP_RECEIVERCREATE_RECEIVERのAMQPレシーバーオブジェクトを提供します。これは、次のメソッドを提供します。

IF_AMQP_RECEIVER
方法 説明
ATTACH AMQPレシーバーリンクを接続します
DETACH AMQPレシーバーリンクを切り離します
SEND_CREDIT AMQPフロー制御フレームを送信することにより、ピアにリンククレジットを付与します
GET_SOURCE リンクの実際の送信元アドレスを取得します
GET_RECEIVER_OPTIONS リンクの実際の受信者オプションを取得します

メソッドIF_AMQP_SENDER~ATTACHIF_AMQP_RECEIVER~ATTACHAMQP接続フレームをピアに送信します。呼び出しが成功した場合、ピアがリンクの接続を確認するとすぐにリンクが確立されます。この場合、ON_ATTACH指定されたイベントハンドラーのメソッドが呼び出されます。前述のように、ON_ATTACHイベントを処理するには、ABAPセッションがアイドル状態または待機状態である必要があります。

送信者のメソッドのパラメータI_SEND_OPTIONS受信者のメソッドのI_RECEIVER_OPTIONSを使用すると、リンク接続に指定できるオプションのパラメータを設定できます。これらは、たとえば、リンク名と自身のノードのアドレスです。受信者オプションを使用すると、受信者が送信側ピアに自動的に付与するクレジットの量を指定できます。デフォルトはです自動リンククレジットをオフにするには、この値をに設定できます最も重要なことは、送信者と受信者のオプションにより、リンクのQoSレベルを設定できることです。at-most-onceat-least-once、およびmixedの値ATTACHATTACHCO_DEFAULT_LINK_CREDIT (65535)CO_LINK_CREDIT_AUTO_MODE_OFF (0)(デフォルト)を設定できます。これらの結果、AMQP属性の送信側セトルモードと受信側セトルモードの値が次のように指定されるアタッチフレームが生成されます。

LinkQoS 送信者決済モード レシーバーセトルモード
せいぜい1回 落ち着いた 最初
少なくとも一度は 未解決 最初
混合(デフォルト) 混合 最初

メソッドIF_AMQP_SENDER~DETACHIF_AMQP_RECEIVER~DETACHAMQPデタッチフレームをピアに送信します。IF_AMQP_SESSION~ENDAMQPクライアントは、メソッドまたはIF_AMQP_CLIENT~CLOSEが呼び出されたときにAMQPデタッチフレームも送信することに注意してください。したがって、DETACHAMQPセッションまたは接続の存続期間全体にわたってリンクが確立されている場合、この方法は必要ありません。

このメソッドIF_AMQP_SENDER~SENDはAMQPメッセージを送信します。メッセージとその属性は、ファクトリメソッドを使用して作成できるAMQPメッセージオブジェクトとして提供する必要があります。

AMQPメッセージの一部の属性に加えて、メッセージオブジェクトでは、メッセージ転送のQoSレベルを指定できます:最大1回または最大1回(デフォルト)。このメッセージQoSレベルは、送信者リンクのリンクQoSレベルがmixedに設定されている場合にのみ、メッセージ転送に使用されます。それ以外の場合は、送信側接続で指定されたQoSレベルが使用されます。最後に、QoSレベルが最大で1回の場合、解決済みフラグがtrueに設定されたメッセージ転送が発生し、QoSレベルが少なくとも1回の場合、解決済みフラグがfalseに設定されたメッセージ転送が発生します

このメソッドは、タイプがIF_AMQP_SENDER~SENDオプションのエクスポートパラメータE_ENVELOPEIF_AMQP_MESSAGE_ENVELOPEを提供します。メッセージエンベロープには、メッセージがピアによってすでに確認されているかどうかの情報が格納されます。ABAPセッションが送信されたメッセージの確認応答を処理するとすぐに、その確認状態が処理から完了に変わります。メッセージが確認応答された場合、配信の結果であるAMQP配信状態(たとえば、受け入れ拒否)もメッセージエンベロープから取得できます。エンベロープごとに、この情報はメソッドGET_CONFIRMATION_STATEとを介して取得できます GET_DELIVERY_STATEまた、封筒はメソッドGET_MESSAGEGET_QOSメッセージの送信時に使用されたメッセージ属性とQoSレベルを取得します。

このメソッドは、確認状態処理IF_AMQP_SENDER~GET_PENDING_ENVELOPES中の送信者オブジェクトのすべてのエンベロープのリストを返しますこのメソッドの目的は、AMQPクライアントが切断された場合に、保留中のすべてのメッセージを簡単に取得することです。アプリケーションは、AMQP接続が再度確立されるとすぐにメッセージを再送信するために、この情報を保存したい場合があります。

このメソッドIF_AMQP_SENDER~GET_CREDITは、AMQPメッセージの送信に使用可能なリンククレジットを返します。AMQPクライアントは、リンククレジットが使用可能な場合にのみピアにメッセージを送信するため、送信者はこの方法を使用して、メッセージを送信するためのこの前提条件が満たされていることを確認する必要があります。ただし、SEND送信クレジットが利用できない場合、この方法は必ずしも失敗しないことに注意してください。便宜上、AMQPクライアントはメッセージを内部でバッファリングしようとし、受信者(この場合はピア)がリンククレジットを再度許可するとすぐにメッセージを送信します。送信バッファがいっぱいの場合、SENDメソッドは例外をスローします。

このメソッドIF_AMQP_RECEIVER~SEND_CREDITは、AMQPフロー制御フレームをピアに送信して、送信者が使用できるリンククレジットを更新します。この方法の使用は、受信機のリンク接続中に指定されたAMQP受信機オプションでAMQP受信機の自動リンククレジットがオフになっている場合にのみ意味があることに注意してください。デフォルトでは、ABAPAMQPレシーバはリンククレジットを自動的に付与します。

メソッドIF_AMQP_RECEIVER~GET_SOURCEIF_AMQP_RECEIVER~GET_RECEIVER_OPTIONSは、レシーバーリンクの接続が確認された後に使用される送信元アドレスとレシーバーオプションを返します。これらの方法の理由は、送信元アドレスと一部の受信者オプションが送信者リンク、この場合はピアを制御しているためです。

タイトルとURLをコピーしました