Message Bus
ご覧のページは、お客様の利便性のために一部機械翻訳されています。また、ドキュメントは頻繁に更新が加えられており、翻訳は未完成の部分が含まれることをご了承ください。最新情報は都度公開されておりますため、必ず英語版をご参照ください。翻訳に問題がある場合は、 こちら までご連絡ください。

登録イベントを聴く

Liferay DXP 2023.Q3/Portal GA92 以前 サポート対象外

重要

このチュートリアルで説明するメッセージング API は、Liferay DXP 2023.Q3/Portal GA92 以降では利用できません。

メッセージングAPIは、宛先イベントとメッセージリスナー登録イベントのリッスンをサポートしています。 これらのイベントに耳を傾けるべき理由は以下のとおりです。

  • 興味のあるメッセージを新しい宛先に送信する場合
  • 宛先でのメッセージングに調整が必要な場合
  • 未登録の宛先に依存する場合
  • 登録を解除して再割り当て可能なリソースを解放する場合

このサンプルプロジェクトは、これらの登録イベントをリッスンする方法を示しています。 まずはサンプルを実行してみましょう。 次に、イベントリスナーの実装を調べます。 最後に、登録解除イベントをトリガーします。

例でイベントをトリガーする

これらは、宛先登録リスナー、メッセージリスナー登録リスナー、およびそれらが監視するイベントをトリガーするクラスをデプロイします。

新しいLiferay インスタンスを起動し、以下を実行します。

docker run -it -m 8g -p 8080:8080 liferay/portal:7.4.3.132-ga132

http://localhost:8080 で Liferay にサインインしてください。 メールアドレス test@liferay.com とパスワード test を使用してください。 プロンプトが表示されたら、パスワードを learn に変更してください。

次に、以下の手順に従います。

  1. サンプルをダウンロードして解凍してください。

    curl https://resources.learn.liferay.com/examples/liferay-s3z9.zip -O
    
    unzip liferay-s3z9.zip
    
  2. s3z9-able-impl モジュールをデプロイして、メッセージバスイベントリスナーを起動します。

    cd liferay-s3z9/s3z9-able-impl
    
    ../gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)
    
    注記

    このコマンドは、モジュール JAR を Docker コンテナ上の /opt/liferay/osgi/modules にコピーすることと同じです。

  3. s3z9-baker-impl モジュールをデプロイして、宛先を追加します。

    cd ../s3z9-baker-impl
    
    ../gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)
    
  4. Dockerコンテナコンソールには、 S3Z9AbleMessageBusEventListenerの、新しく追加された宛先への応答が表示されます。

    [main][S3Z9AbleMessageBusEventListener:17] 宛先が追加されました acme/s3z9_baker
    
  5. s3z9-charlie-impl モジュールをデプロイして、宛先イベントリスナーを起動します。

    cd ../s3z9-charlie-impl
    
    ../gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)
    
  6. s3z9-dog-impl モジュールをデプロイして、宛先にメッセージリスナーを登録します。

    cd ../s3z9-dog-impl
    
    ../gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)
    
  7. Dockerコンテナコンソールには、 S3Z9CharlieDestinationEventListenerが新しく登録されたメッセージリスナーに応答した内容が表示されます。

    [S3Z9CharlieDestinationEventListener:23] acme/s3z9_baker へのメッセージリスナーを登録しました
    

モジュールの概要は以下のとおりです。

  1. s3z9-able-implの MessageBusEventListener 実装は、宛先の追加と削除をリッスンします。

  2. s3z9-baker-implのメッセージング設定クラスは宛先を追加します。 s3z9-able-implの MessageBusEventListener 実装は追加された宛先通知を受け取り、イベントをログに記録します。

  3. s3z9-charlie-implの DestinationEventListener 実装は、宛先に登録または登録解除されるメッセージリスナーをリッスンします。

  4. s3z9-dog-implの MessageListener 実装は宛先に登録します。 s3z9-charlie-implの DestinationEventListener 実装はメッセージリスナー登録通知を受け取り、イベントをログに記録します。

MessageBusEventListener を調べます

メッセージ バスは、 MessageBusEventListeners に、 Destinations が追加または削除されたときに通知します。 以下は、 MessageBusEventListener の実装例です。

@Component(service = MessageBusEventListener.class)
public class S3Z9AbleMessageBusEventListener
	implements MessageBusEventListener {

	@Override
	public void destinationAdded(Destination destination) {
		if (_log.isInfoEnabled()) {
			_log.info("Added destination " + destination.getName());
		}
	}

	@Override
	public void destinationRemoved(Destination destination) {
		if (_log.isInfoEnabled()) {
			_log.info("削除された宛先 " + destination.getName());
		}
	}

	private static final Log _log = LogFactoryUtil.getLog(
		S3Z9AbleMessageBusEventListener.class);

}

@Component アノテーションとその service = MessageBusEventListener.class 属性は、ランタイム フレームワークに S3Z9AbleMessageBusEventListener を MessageBusEventListener として登録するように指示します。 この実装では、 MessageBusEventListenerの 2 つのメソッドをオーバーライドします。

  • destinationAdded(Destination destination)は、新しく追加されたDestinationに応答します。
  • destinationRemoved(Destination destination)は、新しく削除された宛先に応答します。

S3Z9AbleMessageBusEventListenerのメソッド実装は、宛先イベントをログに記録します。

DestinationEventListener を調べます

メッセージバスは DestinationEventListener が MessageListenerが、DestinationEventListenerで指定された宛先に登録されたり、登録を解除されたりした際に、通知を行います。 以下は、 DestinationEventListener の実装例です。

@Component(
	property = "destination.name=acme/s3z9_baker",
	service = DestinationEventListener.class
)
public class S3Z9CharlieDestinationEventListener
	implements DestinationEventListener {

	@Override
	public void messageListenerRegistered(
		String destinationName, MessageListener messageListener) {

		if (_log.isInfoEnabled()) {
			_log.info(" " + destinationName にメッセージリスナーを登録しました);
		}
	}

	@Override
	public void messageListenerUnregistered(
		String destinationName, MessageListener messageListener) {

		if (_log.isInfoEnabled()) {
			_log.info("Unregistered message listener from " + destinationName);
		}
	}

	private static final Log _log = LogFactoryUtil.getLog(
		S3Z9CharlieDestinationEventListener.class);

}

@Component アノテーションの property = "destination.name=acme/s3z9_baker" および service = MessageBusEventListener.class 属性は、ランタイム フレームワークに S3Z9CharlieDestinationEventListener を DestinationEventListener として登録するように指示します。 は acme/s3z9_baker 宛先です。 この実装では、 DestinationEventListenerの 2 つのメソッドをオーバーライドします。

  • messageListenerRegistered(String destinationName, MessageListener messageListener) は、宛先に登録された新しいメッセージリスナーに応答します。

  • messageListenerUnregistered(String destinationName, MessageListener messageListener) は、宛先から登録解除された新しいメッセージリスナーに応答します。

S3Z9CharlieDestinationEventListenerのメソッド実装は、メッセージリスナー登録イベントをログに記録します。

メッセージバスリスナーの登録解除と宛先の削除に応答する例 MessageBusEventListener と DestinationEventListener については、以下をお読みください。

他のイベントをトリガーする

サンプルメッセージリスナーの登録を解除し、サンプル宛先を削除するには、それぞれのモジュールを停止します。 s3z9-dog-impl がメッセージリスナーをデプロイし、 s3z9-able-impl が宛先をデプロイしたことを覚えておいてください。 これらのモジュールを停止すると、それぞれのクラスがメッセージリスナーとメッセージ送信先を登録解除します。

  1. ブラウザで http://localhost:8080 にアクセスして Liferay インスタンスを開き、認証情報を使用してサインインしてください。

  2. Gogoシェル を開きます。

  3. Gogoシェルコマンドフィールドに以下のコマンドを入力して、サンプルモジュールの一覧を表示します。

    lb | grep S3Z9
    

    各行の先頭には、対応するモジュールのID番号が含まれています。

    1839|アクティブ|10|Acme S3Z9 Able実装(1.0.0)|1.0.0
    1840|アクティブ|10|Acme S3Z9 Baker実装(1.0.0)|1.0.0
    1841|アクティブ|10|Acme S3Z9 Charlie実装(1.0.0)|1.0.0
    1842|アクティブ|10|Acme S3Z9 Dog実装(1.0.0)|1.0.0
    
  4. メッセージリスナーモジュールを停止するには、次のGogoシェルコマンドを入力し、数字をモジュールのIDに置き換えてください。

    1842番停留所
    
  5. 宛先イベントリスナーがメッセージリスナーの登録解除に対してログに記録した応答を確認します。

    [S3Z9CharlieDestinationEventListener:33] acme/s3z9_baker からの未登録メッセージリスナー
    
  6. 以下のGogoシェルコマンドを入力し、番号をモジュールのIDに置き換えて、宛先モジュールを停止してください。

    1840 ストップ
    

  メッセージバスイベントリスナーと宛先イベントリスナーのすべてのイベントがトリガーされました。

次は?

これらのメッセージバスイベントを監視する方法を理解したところで、新しい宛先からのメッセージを監視したり、登録に関連する新たな動きに応じてメッセージング環境を調整したりすることができるようになります。