드라이버 레벨에서 전역으로 subscriber를 등록하는 방법임.

라이브러리 레벨에서 하는 방법은 아래 링크 참조.

https://www.mongodb.com/docs/php-library/upcoming/reference/method/MongoDBClient-addSubscriber/

 

 

 

아래는 전역으로 subscriber를 등록하여 MongoDB command를 모니터링하는 예제.

 

<?php
 
use MongoDB\Driver\Monitoring\CommandSubscriber;
use MongoDB\Driver\Monitoring\CommandStartedEvent;
use MongoDB\Driver\Monitoring\CommandSucceededEvent;
use MongoDB\Driver\Monitoring\CommandFailedEvent;
 
 
// subscriber
// https://www.php.net/manual/en/class.mongodb-driver-monitoring-commandsubscriber.php
class MyCommandSubscriber implements CommandSubscriber
{
    // 커맨드 시작시
    // https://www.php.net/manual/en/class.mongodb-driver-monitoring-commandstartedevent.php
    public function commandStarted(CommandStartedEvent $event)
    {
        // read preference를 확인하고 싶을 경우
        printf("ReadPreference = %s\n", get_object_vars($event->getCommand())['$readPreference']->mode);
    }
 
    // 커맨드 성공시
    // https://www.php.net/manual/en/class.mongodb-driver-monitoring-commandsucceededevent.php
    public function commandSucceeded(CommandSucceededEvent $event)
    {
        // command 전송 후 reply 받을 때까지 걸린 시간
        printf("duration = %.3f sec\n", $event->getDuration() / 1000000);
    }
 
    // 커맨드 실패시
    // https://www.php.net/manual/en/class.mongodb-driver-monitoring-commandfailedevent.php
    public function commandFailed(CommandFailedEvent $event)
    {
        //
    }
}
 
 
 
// subscriber 등록
$myCommandSubscriber = new MyCommandSubscriber();
MongoDB\Driver\Monitoring\addSubscriber($myCommandSubscriber);
 
 
// 여기서 뭔가 MongoDB 커맨드를 실행하면 내가 등록한 subscriber의 각 이벤트 핸들러에 지정된 내용이 처리됨
 
// 각 이벤트 객체들이 가진 정보들이 풍부하므로 필터링을 통해 필요한 것들만 로그파일에 저장하거나 메시지큐를 통해 모으는 식으로 처리 가능

 

 

 

 

 

 

 

Posted by bloodguy
,