JMX モニタリング
ドライバーは JTX を使用します で macOS を作成する ドライバーのさまざまな側面を監視できるようになります。
ドライバーは、単一のタイプConnectionPoolStatisticsMBean
の MXBean
インスタンスを作成します。 ドライバーは、接続するサーバーごとに 1 つのConnectionPoolStatisticsMBean
インスタンスを登録します。 たとえば、レプリカセットに接続すると、ドライバーはレプリカセットの非表示でないメンバーごとに インスタンスを作成します。
各MXBean
インスタンスは、ドメインと名前付きプロパティのセットで構成される一意のオブジェクト名で登録する必要があります。 ドライバーによって作成されたすべてのMXBean
インスタンスは、ドメインorg.mongodb.driver
の下にあります。 ConnectionPoolStatisticsMBean
のインスタンスには次のプロパティがあります。
clusterId
: クライアントが生成した一意の識別子で、アプリケーションが同じ MongoDB サーバー配置に接続されている複数のMongoClient
インスタンスがある状況でオブジェクト名の一意性を確保するために必要です。host
: サーバーのホスト名port
: サーバーがリッスンしているポートminSize
: アイドル状態と使用中のノードを含む、プールの最小許可サイズmaxSize
: アイドル状態と使用中のノードを含む、プールの最大許容サイズsize
: アイドル状態と使用中のノードを含むプールの現在のサイズcheckedOutCount
: 現在使用中の接続の現在の数
JTX 接続プールのモニタリングはデフォルトで無効になっています。 これを有効にするには、 MongoClientSettings
インスタンスの作成時にcom.mongodb.management.JMXConnectionPoolListener
インスタンスを追加する必要があります。
MongoClientSettings settings = MongoClientSettings.builder() .applyToConnectionPoolSettings(builder -> builder.addConnectionPoolListener(new JMXConnectionPoolListener())) .build();
コマンド監視
ドライバーは コマンド監視仕様を実装し、コマンドが開始されたときとコマンドが成功または失敗したときにアプリケーションに通知できるようにします。
アプリケーションは、 CommandListener
インターフェースを実装するクラスのインスタンスを含むMongoClientSettings
インスタンスを構成することで、コマンド リスナーをMongoClient
に登録します。 次の例は、 CommandListener
インターフェースの簡単な実装です。
public class TestCommandListener implements CommandListener { public void commandStarted(final CommandStartedEvent event) { System.out.println(String.format("Sent command '%s:%s' with id %s to database '%s' " + "on connection '%s' to server '%s'", event.getCommandName(), event.getCommand().get(event.getCommandName()), event.getRequestId(), event.getDatabaseName(), event.getConnectionDescription() .getConnectionId(), event.getConnectionDescription().getServerAddress())); } public void commandSucceeded(final CommandSucceededEvent event) { System.out.println(String.format("Successfully executed command '%s' with id %s " + "on connection '%s' to server '%s'", event.getCommandName(), event.getRequestId(), event.getConnectionDescription() .getConnectionId(), event.getConnectionDescription().getServerAddress())); } public void commandFailed(final CommandFailedEvent event) { System.out.println(String.format("Failed execution of command '%s' with id %s " + "on connection '%s' to server '%s' with exception '%s'", event.getCommandName(), event.getRequestId(), event.getConnectionDescription() .getConnectionId(), event.getConnectionDescription().getServerAddress(), event.getThrowable())); } }
次の例では、 TestCommandListener
のインスタンスで構成されたMongoClientSettings
のインスタンスを作成します。
MongoClientSettings settings = MongoClientSettings.builder() .addCommandListener(new TestCommandListener()) .build(); MongoClient client = MongoClients.create(settings);
これらのオプションで構成されたMongoClient
は、各コマンドを MongoDB サーバーに送信する前にSystem.out
にメッセージを出力し、各コマンドの成功または失敗時に別のメッセージを出力します。
クラスター モニタリング
ドライバーは SDAM モニタリング仕様を実装し、接続先の MongoDB クラスターのトポロジーに対する変更をドライバーが検出したときにアプリケーションに通知できるようにします。
アプリケーションは、 ClusterListener
、 ServerListener
、またはServerMonitorListener
インターフェースのいずれかを実装するクラスのインスタンスでMongoClientSettings
を構成することで、 MongoClient
でリスナーを登録します。
次のコードは、クラスター リスナーの作成方法を示しています。
public class TestClusterListener implements ClusterListener { private final ReadPreference readPreference; private boolean isWritable; private boolean isReadable; public TestClusterListener(final ReadPreference readPreference) { this.readPreference = readPreference; } public void clusterOpening(final ClusterOpeningEvent clusterOpeningEvent) { System.out.println(String.format("Cluster with unique client identifier %s opening", clusterOpeningEvent.getClusterId())); } public void clusterClosed(final ClusterClosedEvent clusterClosedEvent) { System.out.println(String.format("Cluster with unique client identifier %s closed", clusterClosedEvent.getClusterId())); } public void clusterDescriptionChanged(final ClusterDescriptionChangedEvent event) { if (!isWritable) { if (event.getNewDescription().hasWritableServer()) { isWritable = true; System.out.println("Writable server available!"); } } else { if (!event.getNewDescription().hasWritableServer()) { isWritable = false; System.out.println("No writable server available!"); } } if (!isReadable) { if (event.getNewDescription().hasReadableServer(readPreference)) { isReadable = true; System.out.println("Readable server available!"); } } else { if (!event.getNewDescription().hasReadableServer(readPreference)) { isReadable = false; System.out.println("No readable server available!"); } } } }
次の例では、 TestClusterListener
のインスタンスで構成されたMongoClientSettings
のインスタンスを作成します。
List<ServerAddress> seedList = ... MongoClientSettings settings = MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.addClusterListener(new TestClusterListener(ReadPreference.secondary()))) .build(); MongoClient client = MongoClients.create(settings);
これらのオプションで構成されたMongoClient
は、 MongoClient
がこれらのオプションを使用して作成され、かつMongoClient
が閉じられたときに、 System.out
にメッセージを出力します。 さらに、クライアントが次のいずれかの状態になったときにメッセージが出力されます。
書込み (write) を受け入れる使用可能なサーバーがあること
書込み (write) を受け入れる使用可能なサーバーがありません
構成された を使用して読み取りを受け入れる使用可能なサーバーがある
ReadPreference
構成された を使用して読み取りを受け入れる使用可能なサーバーがない
ReadPreference
接続プールの監視
ドライバーは、接続プール関連のイベントの監視をサポートしています。
アプリケーションは、 ConnectionPoolListener
インターフェースを実装するクラスのインスタンスでMongoClientSettings
を構成することで、 MongoClient
でリスナーを登録します。
次のコードは、接続プール リスナーの作成方法を示しています。
public class TestConnectionPoolListener implements ConnectionPoolListener { public void connectionPoolOpened(final ConnectionPoolOpenedEvent event) { System.out.println(event); } public void connectionPoolClosed(final ConnectionPoolClosedEvent event) { System.out.println(event); } public void connectionCheckedOut(final ConnectionCheckedOutEvent event) { System.out.println(event); } public void connectionCheckedIn(final ConnectionCheckedInEvent event) { System.out.println(event); } public void connectionAdded(final ConnectionAddedEvent event) { System.out.println(event); } public void connectionRemoved(final ConnectionRemovedEvent event) { System.out.println(event); } }
次の例では、 TestConnectionPoolListener
のインスタンスで構成されたMongoClientSettings
のインスタンスを作成します。
List<ServerAddress> seedList = ... MongoClientSettings settings = MongoClientSettings.builder() .applyToConnectionPoolSettings(builder -> builder.addConnectionPoolListener(new TestConnectionPoolListener())) .build(); MongoClient client = MongoClients.create(settings);
これらのオプションで構成されたMongoClient
は、MongoClient が接続されている各 MongoDB サーバーの接続プール関連のイベントごとにSystem.out
にメッセージを出力します。