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

メッセージのリッスン

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

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

  1. サンプルプロジェクトをダウンロードして解凍します。

    curl https://resources.learn.liferay.com/examples/liferay-w3a4.zip -O
    
    unzip liferay-w3a4.zip
    
  2. プロジェクトモジュールをビルドしてデプロイします。

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

    このコマンドは、コンパイルされたモジュール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は宛先に送信されたメッセージを受信します。