Flex Gateway新着情報
Governance新着情報
Monitoring API ManagerMule には、フローコンポーネントの追加、認証の要求失敗、Mule の起動など、Mule サーバーで行われた変更を確認するために使用できる内部通知メカニズムがあります。こうした通知に反応するためのエージェントまたはフローコンポーネントをセットアップできます。
メッセージ通知は、Mule サーバーとの間で送信されるすべての情報のスナップショットとなります。Mule はメッセージを送受信したときにこうした通知を実行します。こうした追加の通知はパフォーマンスに影響を及ぼすため、デフォルトで無効になっています。メッセージ通知を有効にするには、Mule 設定ファイルで <notifications>
要素を使用して有効にするメッセージの種別を設定します。また、通知リスナーを登録してインターフェースを特定の通知に関連付けます。
たとえば、最初に Spring 設定ファイルで通知リスナーの Bean を作成し、受信する通知の種別のクラスを指定します。
<bean name="notificationLogger" class="org.myfirm.ProcessorNotificationStore"/>
続いて、Spring 設定の参照を追加します。
<spring:config name="springConfig" files="notification-beans.xml"/>
次に、<notification>
要素を使用して受信する通知を指定し、<notification-listener>
要素を使用してリスナーを登録します。
<notifications>
<notification event="MESSAGE-PROCESSOR"/>
<notification-listener ref="notificationLogger"/>
</notifications>
MESSAGE-PROCESSOR 通知を指定すると、通知はメッセージプロセッサーが呼び出される前と後に送信されます。リスナーは受信する通知の種別のインターフェースを実装しているため、リスナーは正しい通知を受信します。
たとえば、ProcessorNotificationLogger
クラスは org.mule.runtime.api.notification.MessageProcessorNotificationListener
を実装します。
public class ProcessorNotificationLogger implements MessageProcessorNotificationListener<MessageProcessorNotification> {
@Override
public void onNotification(MessageProcessorNotification notification) {
// write here the logic to process the notification event
}
}
API クラスをクラスパスで使用できるように、忘れずに provided をスコープとして POM ファイルで Mule と API の連動関係を追加してください。この連動関係は実行時に Mule によって提供されます。
|
通知種別のリストについては、「通知設定リファレンス」を参照してください。通知リスナーインターフェースのリストについては、下記の[Notification Interfaces]を参照してください。
通知に関連付けられたインターフェースを変更するには、interface-class
属性で新しいインターフェースを指定します。
<notifications>
<notification event="COMPONENT-MESSAGE" interface-class="org.myfirm.MyMessageNotifications"/>
</notifications>
カスタム通知を作成する場合、event-class
属性も指定します。
<notifications>
<notification event="CUSTOM" event-class="org.myfirm.MyMessageNotificationsCustomMessage"
interface-class="org.myfirm.MyMessageNotifications"/>
</notifications>
特定のインターフェースが通知を受信しないようにブロックするには、<disable-notification>
要素で指定します。ブロックする通知種別 (イベント)、イベントクラス、インターフェース、インターフェースクラスを指定できます。
<notifications>
<disable-notification interface="SECURITY"/>
</notifications>
リスナーを登録するときに、subscription
属性を使用して特定のコンポーネントからの通知のみを受信するように指定できます。たとえば、「MyService1」という名前のフローコンポーネントからのみ通知を受信するようにリスナーを指定するには、次のようにリスナーを設定します。
<notification-listener ref="endpointNotificationLogger" subscription="MyService1"/>
<object name="endpointNotificationLogger" class="org.myfirm.EndpointNotificationLogger"/>
名前に「Service」が付くすべてのフローコンポーネントからの通知の受信に登録するには、次のようにワイルドカード文字列を使用します。
<notification-listener ref="endpointNotificationLogger" subscription="*Service*"/>
詳細は、下記の[Registering Listeners Programmatically]を参照してください。
オブジェクトは Mule でカスタム通知を実行し、カスタムリスナーに通知できます。たとえば、検出エージェントはクライアントが接続したときに「Client Found (クライアントが見つかりました)」という通知を実行する場合もあります。
カスタム通知は次のように実行します。
CustomNotification n = new CustomNotification("Hello");
notificationDispatcher.dispatch(n);
CustomNotificationListener
を実装するオブジェクトがこの通知を受信します。CustomNotification
を拡張して、カスタム通知種別のアクションを定義すると良いでしょう。例:
DiscoveryNotification n = new DiscoveryNotification(client, DiscoveryNotification.CLIENT_ADDED);
notificationDispatcher.dispatch(n);
次の表は、org.mule.runtime.api.notification
パッケージの Mule サーバー通知とインターフェースを示しています。オブジェクトは、これらのインターフェースのいずれかを実装して関連付けられた通知のリスナーになることができます。すべてのリスナーは NotificationListener
インターフェースを拡張します。
Notification (通知) | 説明 | インターフェース |
---|---|---|
Connection (接続) 通知 |
接続が行われるか切断されたときに実行されます。 |
|
Custom (カスタム) 通知 |
コンポーネントの他、ルーター、トランスフォーマー、エージェントなどのオブジェクトによって相互の状態の変更を通信するために実行される場合があります。 |
|
Exception (例外) 通知 |
例外がスローされました。 |
|
Management (管理) 通知 |
内部キューが容量に達するなど、Mule インスタンスまたはそのリソースの状態が変更されました。 |
|
Mule Context (Mule コンテキスト) 通知 |
Mule コンテキストの開始などのイベントが発生したときに実行できます。 |
|
Routing (ルーティング) 通知 |
Async-Reply (非同期返信) ルーターは、すでに処理されたイベントグループについてイベントが受信されたときにこの通知を使用します。 |
|
Security (セキュリティ) 通知 |
認証の要求が失敗したときに実行されます。 |
|
Transaction (トランザクション) 通知 |
トランザクションが開始された、コミットされた、ロールバックされた後に実行されます。 |
|
Async-Message (非同期メッセージ) 通知 |
非同期作業がスケジュールされ、指定されたフローについて完了したときに実行できます。 |
|
Pipeline-Message (パイプラインメッセージ) 通知 |
パイプラインの処理の重要なステップで実行されます。 |
|
Message-Processor (メッセージプロセッサー) 通知 |
メッセージプロセッサーが呼び出されました。 |
|
Exception Strategy (例外戦略) 通知 |
例外戦略が呼び出されました。 |
|
Extension (拡張機能) 通知 |
カスタムデータを含む拡張機能によって実行できます。 |
|
Connector-Message (コネクタメッセージ) 通知 |
メッセージが受信されたかコネクタを通じて送信されたときに実行されます。 |
|
リスナーインターフェースにはすべて単一のメソッドがあります。
public void onNotification(T notification);
ここで、T は通知クラスです (末尾に「Listener」が付かないリスナークラス)。
実装されているリスナーに応じて、特定の通知のみが受信されます。たとえば、オブジェクトで ManagementNotificationListener
が実装されている場合、種別 ManagementNotification
の通知のみが受信されます。オブジェクトは複数のリスナーを実装して複数の種別の通知を受信できます。
リスナーは次のように登録できます。
notificationListenerRegistry.registerListener(listener);
または
notificationListenerRegistry.registerListener(listener, selector);
ここで、listener
は NotificationListener<N>
インスタンスであり、selector
はリスナーをコールする前に実行された通知に適用する検索条件として機能する Predicate<N>
です。
各通知には、通知種別を決定するアクションコードがあります。アクションコードを問い合わせて、その種別を決定することができます。例:
MyObject.java
public class MyObject implements ConnectionNotificationListener<ConnectionNotification> {
(...)
public void onNotification(ConnectionNotification notification) {
if (valueOf(ConnectionNotification.CONNECTION_FAILED).equals(notification.getAction().getIdentifier())) {
// write here the logic to handle the connection failed notification
}
}
}
すべての通知は java.util.EventObject
を拡張し、getSource()
メソッドを使用してオブジェクトのペイロードにアクセスできます。次の表で、通知の各種別のペイロードについて説明します。
Notification (通知) | ペイロード種別 | リソース ID | 説明 |
---|---|---|---|
Connection (接続) 通知 |
String (文字列) |
|
接続されたメッセージレシーバーまたはメッセージディスパッチャー。 |
Custom (カスタム) 通知 |
任意のオブジェクト |
任意の String (文字列) |
オブジェクト種別は通知を実行したオブジェクトに対してカスタムです。 |
Exception (例外) 通知 |
ComponentLocation |
コンポーネント名 |
通知をトリガーしたフローコンポーネント。 |
Management (管理) 通知 |
Object (オブジェクト) |
オブジェクト ID |
この通知をトリガーした監視対象オブジェクト。 |
Mule Context (Mule コンテキスト) 通知 |
MuleContext |
Mule コンテキスト ID |
Mule コンテキストインスタンス。getMuleContext() のコールと同じ。 |
Routing (ルーティング) 通知 |
Message (メッセージ) |
メッセージ ID |
送信または受信されたメッセージ。 |
Security (セキュリティ) 通知 |
SecurityException |
例外メッセージ。 |
発生したセキュリティ例外。 |
Transaction (トランザクション) 通知 |
String (文字列) |
トランザクション ID |
この通知をトリガーしたトランザクション。 |
Async-Message (非同期メッセージ) 通知 |
ComponentLocation |
コンポーネント名 |
非同期作業をスケジュールしたコンポーネント。 |
Pipeline-Message (パイプラインメッセージ) 通知 |
String (文字列) |
Name (名前) |
パイプライン名。 |
Message-Processor (メッセージプロセッサー) 通知 |
ComponentLocation |
コンポーネント名 |
通知をトリガーしたフローコンポーネント。 |
Exception Strategy (例外戦略) 通知 |
ComponentLocation |
コンポーネント名 |
通知をトリガーしたフローコンポーネント。 |
Extension (拡張機能) 通知 |
Object (オブジェクト) |
ペイロードは拡張機能ごとに変更できます。 |
|
Connector-Message (コネクタメッセージ) 通知 |
ComponentLocation |
コンポーネント名 |