12.11. 使用MQ事件监听器

通过该管理API,用户可以在客户端注册监听指定的MQ服务器的事件的监听器。当服务器端指定的事件发生时就会通知该监听器。监听器的注册及触发过程如下:

假如用户要监听服务器端某种类型的事件,用户必须创建一个实现了跟该类型的事件相对应的监听器接口的类,然后使用管理API的客户端事件注册中心,将该类的对象注册到该注册中心中。注册之后,当服务器上该类型的事件发生的时候,就会通知刚刚注册的对象相对应的方法。

12.11.1. 使用路由事件监听器

实现了IRouteEventListener接口的类能够监听到服务器端跟网络路由相关的事件,目前能够监听的事件有:

  • 网络上某个两个节点的连接断开。

  • 网络上某个两个节点的连接获得。

以下代码演示了如何使用管理API,在客户端事件注册中心中注册一个实现了IRouteEventListener接口的监听器,该监听器能够监听网络上节点的断开和连接的事件。

  • 实现路由事件监听器接口:

class RouteEventListenerImpl implements IRouteEventListener {

        public void onRouteConnected(RouteChangedEvent event) {
            //实现路由连接获得的管理动作,通过event.getSourceRouterName()得到路
            //由连接的源节点,event.getDestinationRouterName()得到路由连接的目的节点
        }

        public void onRouteDisconnected(RouteChangedEvent event) {
            //实现路由连接断开的管理动作,通过event.getSourceRouterName()得到路
            //由连接的源节点,event.getDestinationRouterName()得到路由连接的目的节点
        }
}

  • 将路由事件监听器对象注册到客户端事件注册中心并开始监听事件:

    public void registerRouteEventListener () {
        try {
             //创建登录器对象,在创建对象时指定要登录的服务器的IP地址,端口号,用户名和密码
             //注意:必须将“admin”作为用户名和并提供其密码,因为 AMQ 的管理功能目前
             //限制只能由“admin”用户使用。
             IMqLoginer loginer = new JaasLoginerImpl("localhost", 4888, "admin", "admin");
             loginer.login();
             MqAdminObjectFactory factory = new MqAdminObjectFactory(loginer);
             //获得事件注册中心,注册在该注册中心的监听器能够监听登陆的服务器能够连接得上的所有服务器的事件。
             IMqEventRegister register = factory.createAllServerListeningEventRegister();
             //将路由事件监听器对象注册到该注册中心,注册的时候需要指定监听器
             //的类型,监听器根据类型监听跟该类型相对应的事件。
             register.registeEventListener(new RouteEventListenerImpl(), ListenerType.ROUTE_EVENT_LISTENER);
             //开始监听事件。开始监听之后,当事件发生时就会通知监听器对象对应
             //的方法。
             register.startListen();
        } catch (JmsAdminException e) {
            //异常处理代码
        } catch (LoginException e) {
            //异常处理代码
        }
    }   

  • 停止对事件的监听并将路由事件监听器卸载:

    public void unregisterRouteEventListener () {
        try {
            //停止对事件的监听,停止之后才能够卸载监听器或者注册新的监听器。
            register.stopListen();
            //根据监听器类型将跟该类型相对应的监听器卸载。
            register.unregisteEventListener(ListenerType.ROUTE_EVENT_LISTENER);
        } catch (JmsAdminException e) {
            //异常处理代码
        }
    }   

12.11.2. 使用队列事件监听器

实现了IQueueEventListener接口的类能够监听到服务器端跟队列相关的事件,目前能够监听的事件有:

  • 服务上一个队列的创建 。

  • 服务上一个队列的删除。

在客户端事件注册中心注册监听器的步骤如以上代码所述。

12.11.3. 使用主题事件监听器

实现了ITopicEventListener接口的类能够监听到服务器端跟主题相关的事件,目前能够监听的事件有:

  • 服务上一个主题的创建 。

  • 服务上一个主题的删除。

在客户端事件注册中心注册监听器的步骤如以上代码所述。

12.11.4. 使用JMS连接工厂事件监听器

实现了IConnectionFactoryEventListener接口的类能够监听到服务器端跟JMS连接工厂相关的事件,目前能够监听的事件有:

  • 服务上一个连接工厂的创建 。

  • 服务上一个连接工厂的删除。

在客户端事件注册中心注册监听器的步骤如以上代码所述。