メッセージを聞く

メッセージを聞く

登録済みのメッセージバスの宛先に送信されたメッセージは、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_に変更します。

次に、以下の手順を実行します。

  1. 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
    
  2. プロジェクトモジュールをビルドしてデプロイします。

    cd liferay-w3a4
    
    ./gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)
    
    note

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

  3. Liferay Dockerコンテナコンソールでデプロイを確認します。

    STARTED com.acme.w3a4.impl_1.0.0 [2177]
    
  4. 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は宛先に送信されたメッセージを受信します。

追加情報