登録イベントを聴く
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 に変更してください。
次に、以下の手順に従います。
-
サンプルをダウンロードして解凍してください。
curl https://resources.learn.liferay.com/examples/liferay-s3z9.zip -Ounzip liferay-s3z9.zip -
s3z9-able-implモジュールをデプロイして、メッセージバスイベントリスナーを起動します。cd liferay-s3z9/s3z9-able-impl../gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)注記このコマンドは、モジュール JAR を Docker コンテナ上の
/opt/liferay/osgi/modulesにコピーすることと同じです。 -
s3z9-baker-implモジュールをデプロイして、宛先を追加します。cd ../s3z9-baker-impl../gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq) -
Dockerコンテナコンソールには、
S3Z9AbleMessageBusEventListenerの、新しく追加された宛先への応答が表示されます。[main][S3Z9AbleMessageBusEventListener:17] 宛先が追加されました acme/s3z9_baker -
s3z9-charlie-implモジュールをデプロイして、宛先イベントリスナーを起動します。cd ../s3z9-charlie-impl../gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq) -
s3z9-dog-implモジュールをデプロイして、宛先にメッセージリスナーを登録します。cd ../s3z9-dog-impl../gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq) -
Dockerコンテナコンソールには、
S3Z9CharlieDestinationEventListenerが新しく登録されたメッセージリスナーに応答した内容が表示されます。[S3Z9CharlieDestinationEventListener:23] acme/s3z9_baker へのメッセージリスナーを登録しました
モジュールの概要は以下のとおりです。
-
s3z9-able-implのMessageBusEventListener実装は、宛先の追加と削除をリッスンします。 -
s3z9-baker-implのメッセージング設定クラスは宛先を追加します。s3z9-able-implのMessageBusEventListener実装は追加された宛先通知を受け取り、イベントをログに記録します。 -
s3z9-charlie-implのDestinationEventListener実装は、宛先に登録または登録解除されるメッセージリスナーをリッスンします。 -
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 が宛先をデプロイしたことを覚えておいてください。 これらのモジュールを停止すると、それぞれのクラスがメッセージリスナーとメッセージ送信先を登録解除します。
-
ブラウザで
http://localhost:8080にアクセスして Liferay インスタンスを開き、認証情報を使用してサインインしてください。 -
Gogoシェル を開きます。
-
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 -
メッセージリスナーモジュールを停止するには、次のGogoシェルコマンドを入力し、数字をモジュールのIDに置き換えてください。
1842番停留所 -
宛先イベントリスナーがメッセージリスナーの登録解除に対してログに記録した応答を確認します。
[S3Z9CharlieDestinationEventListener:33] acme/s3z9_baker からの未登録メッセージリスナー -
以下のGogoシェルコマンドを入力し、番号をモジュールのIDに置き換えて、宛先モジュールを停止してください。
1840 ストップ
メッセージバスイベントリスナーと宛先イベントリスナーのすべてのイベントがトリガーされました。
次は?
これらのメッセージバスイベントを監視する方法を理解したところで、新しい宛先からのメッセージを監視したり、登録に関連する新たな動きに応じてメッセージング環境を調整したりすることができるようになります。