ActiveMQ中advisory的使用和原理

在ActiveMQ中的监控和管理也可以通过Advisory实现对消息生产者和消息消费者以及队列的监控。Advisory实质通过事件监听实现。

调用过程的序列图如下:

 

1.在Advisory中实现对队列目标的监控:

A.队列目标的事件类:DestinationEvent继承EventObject实现对DestinationInfo的监控。

B.通过队列目标的监听实现对队列事件的监控

public interface DestinationListener {

    void onDestinationEvent(DestinationEvent event);

}

C.通过DestinationSource类实现对Broker中队列目标Destination的跟踪。

2.在Advisory中实现对消费者的监控:

A.通过抽象类ConsumerEvent实现对消费者的监控。ConsumerEvent继承自EventObject。

       针对对Consumer监控和管理由子类ConsumerStartedEvent和ConsumerStoppedEvent实现。

B.通过消费者监听实现对消费者的监听。

public interface ConsumerListener {

    void onConsumerEvent(ConsumerEvent event);

}

C.通过ConsumerEventSource对消费者的监听。

3.在Advisory中实现对生产者的监控:

A.通过抽象类ProducerEvent实现对消费者的监控。ProducerEvent继承自EventObject。

       针对对Producter监控和管理由子类ProducerStartedEvent和ProducerStoppedEvent实现。

B.通过生产者监听实现对消费者的监听。

public interface ProducerListener {

    void onProducerEvent(ProducerEvent event);

}

C.通过ProducerEventSource对消费者的监听。

自定义事件:

Java代码   收藏代码
  1. package easyway.app.activemq.demo.events;  
  2. import java.util.EventObject;  
  3. /** 
  4.  * 通过EasywayEvent.java文件创建EasywayEvent类,这个类继承EventObject。这个类的构造函数的参数传递了产生这个事件的事件源(比如各种控件),方法getSource用来获得这个事件源的引用。 
  5.  * @author Owner 
  6.  * 
  7.  */  
  8. public class EasywayEvent  extends EventObject  
  9. {  
  10.         /** 
  11.      *  
  12.      */  
  13.     private static final long serialVersionUID = 1L;  
  14.         Object obj;  
  15.         public EasywayEvent(Object source)  
  16.         {  
  17.                super(source);  
  18.                obj = source;  
  19.         }  
  20.         public Object getSource()  
  21.         {  
  22.                return obj;  
  23.         }  
  24.         public void say()  
  25.         {  
  26.                System.out.println("This is say method...");  
  27.         }  
  28. }  

 监听器:

Java代码   收藏代码
  1. package easyway.app.activemq.demo.events;  
  2.   
  3. /** 
  4.  * 定义新的事件监听接口,该接口继承自EventListener;该接口包含对DemeEvent事件的处理程序: 
  5.  */  
  6. import java.util.EventListener;  
  7. public interface EasywayListener extends EventListener  
  8. {  
  9.         public void easywayEvent(EasywayEvent dm);  
  10. }   

 

事件监听实现类:

Java代码   收藏代码
  1. package easyway.app.activemq.demo.events;  
  2.   
  3.   
  4.     public class EasyWayListener1 implements EasywayListener  
  5.     {  
  6.         public void easywayEvent(EasywayEvent dm) {  
  7.             System.out.println("Inside listener1...");            
  8.         }  
  9.     }  

 

测试类:

Java代码   收藏代码
  1. package easyway.app.activemq.demo.events;  
  2.   
  3. import java.util.*;  
  4. /** 
  5.  * 通过EasyWaySource..ava文件创造一个事件源类,它用一个java.utile.Vector对象来存储所有的事件监听 
  6.  * 器对象,存储方式是通过addListener(..)这样的方法。notifyDemeEvent(..)是触发事件的方法, 
  7.  * 用来通知系统:事件发生了,你调用相应的处理函数(回调函数)吧。 
  8.  * @author Owner 
  9.  * 
  10.  */  
  11. public class EasyWaySource {  
  12.   
  13.        private Vector<EasywayListener> repository = new Vector<EasywayListener>();  
  14.        EasywayListener dl;  
  15.        public EasyWaySource()  
  16.        {  
  17.    
  18.        }  
  19.        public void addDemoListener(EasywayListener dl)  
  20.        {  
  21.               repository.addElement(dl);  
  22.        }  
  23.        public void notifyDemoEvent()  
  24.        {  
  25.               Enumeration enum1 = repository.elements();  
  26.               while(enum1.hasMoreElements())  
  27.               {  
  28.                     dl = (EasywayListener)enum1.nextElement();  
  29.                     dl.easywayEvent(new EasywayEvent(this));  
  30.               }  
  31.        }  
  32. }  
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值