メッセージを聞く
登録済みのメッセージバスの宛先に送信されたメッセージは、DXP/Portalに組み込まれているもの、サードパーティによって定義されているもの、自分で作成したものに関係なく、リッスンすることができます。 同じ宛先に送信されるメッセージには、通常、類似したイベントタイプやトピックなど、共通点があります。 ここでは、DestinationNames.DOCUMENT_LIBRARY_PDF_PROCESSOR
という宛先で受信したメッセージをリッスンするクラスをデプロイします。 ドキュメントとメディアは、アップロードされたすべてのPDFファイルを処理した後、この宛先にメッセージを送信します。
サンプルのメッセージリスナーを実行する
新しいLiferay インスタンスを起動し、以下を実行します。
docker run -it -m 8g -p 8080:8080 liferay/portal:7.4.3.55-ga55。
http://localhost:8080でLiferayへのサインインします。 メールアドレス[email protected]_とパスワード_test_を使用してください。 プロンプトが表示されたら、パスワードを _learn_に変更します。
次に、以下の手順を実行します。
example project をダウンロードし、解凍してください。
curl https://resources.learn.liferay.com/dxp/latest/ja/building-applications/core-frameworks/message-bus/liferay-w3a4.zip -O
unzip liferay-w3a4.zip
プロジェクトモジュールをビルドしてデプロイします。
cd liferay-w3a4
./gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)
noteこのコマンドは、コンパイルされたモジュール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
は宛先に送信されたメッセージを受信します。