メッセージのリッスン
登録済みのメッセージバスの宛先に送信されたメッセージは、DXP/Portalに組み込まれているもの、サードパーティによって定義されているもの、自分で作成したものに関係なく、リッスンすることができます。 同じ宛先に送信されるメッセージには、通常、類似したイベントタイプやトピックなど、共通点があります。 ここでは、DestinationNames.DOCUMENT_LIBRARY_PDF_PROCESSORという宛先で受信したメッセージをリッスンするクラスをデプロイします。 ドキュメントとメディアは、アップロードされたすべてのPDFファイルを処理した後、この宛先にメッセージを送信します。
サンプルのメッセージリスナーを実行する
新しい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-w3a4.zip -Ounzip liferay-w3a4.zip -
プロジェクトモジュールをビルドしてデプロイします。
cd liferay-w3a4./gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)注このコマンドは、コンパイルされたモジュールJARをDockerコンテナ上の
/opt/liferay/osgi/modulesにコピーするのと同じです。 -
Liferay Dockerコンテナコンソールでデプロイを確認します。
STARTED com.acme.w3a4.impl_1.0.0 [2177] -
UI で、 PDF ファイルを ドキュメントとメディアにアップロードします。
ドキュメントとメディアは、PDFファイルプレビューの生成を完了すると、サンプルプロジェクトのMessageListenerがリッスンしている宛先にメッセージを送信します。 メッセージバスは、宛先に登録されているすべてのMessageListenerにメッセージを中継します。 中継されたメッセージを受信すると、プロジェクトのMessageListenerはメッセージのペイロードと宛先をログに記録します。
[liferay/document_library_pdf_processor-2][W3A4MessageListener:22] Received message payload [Ljava.lang.Object;@6df886c1 at destination liferay/document_library_pdf_processor
仕組みは次のとおりです。
宛先を決定する
メッセージの宛先は、その名前で参照されます。 APIは宛先名を指定します。 たとえば、 DestinationNames クラスは、Liferay の組み込みの宛先をリストします。 サンプルのMessageListenerは、次のString定数で指定されたLiferayの宛先に送信されたメッセージをリッスンします。
DestinationNames.DOCUMENT_LIBRARY_PDF_PROCESSOR
Liferay の *DestinationNames クラスを ソースコード で検索するか、リスナーを追加できる宛先の他の API を検索してください。 メッセージリスナーで宛先名を指定します。
MessageListenerインターフェイスを実装する
メッセージを受信するクラスで、 MessageListener インターフェイスを実装します。
public class W3A4MessageListener implements MessageListener {
receiveメソッドをメッセージを処理するためのロジックでオーバーライドします。 以下に、receiveメソッドの実装例を示します。
@Override
public void receive(Message message) {
if (_log.isInfoEnabled()) {
_log.info("Received message payload " + message.getPayload());
}
}
private static final Log _log = LogFactoryUtil.getLog(
W3A4MessageListener.class);
上記の実装は、メッセージのペイロードと宛先名をログに記録します。 その他のメソッドの詳細については、 Message クラスを参照してください。
MessageListenerを宛先に登録する
Componentアノテーションを使用してクラスを登録し、目的の宛先でメッセージをリッスンします。 例:
@Component(
property = "destination.name=" + DestinationNames.DOCUMENT_LIBRARY_PDF_PROCESSOR,
service = MessageListener.class
)
public class W3A4MessageListener implements MessageListener {
上記のアノテーションは、DestinationNames.DOCUMENT_LIBRARY_PDF_PROCESSORという名前の宛先でメッセージを受信するためのMessageListenerサービスコンポーネントとしてクラスを登録します。
コンポーネントのdestination.nameプロパティ値を宛先の名前に設定します。
プロジェクトをデプロイすると、OSGiランタイムはMessageListenerを宛先に登録します。 これで、MessageListenerは宛先に送信されたメッセージを受信します。