`
longgangbai
  • 浏览: 7330378 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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监控和管理由子类ConsumerStartedEventConsumerStoppedEvent实现。

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

public interface ConsumerListener {

    void onConsumerEvent(ConsumerEvent event);

}

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

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

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

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

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

public interface ProducerListener {

    void onProducerEvent(ProducerEvent event);

}

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

自定义事件:

package easyway.app.activemq.demo.events;
import java.util.EventObject;
/**
 * 通过EasywayEvent.java文件创建EasywayEvent类,这个类继承EventObject。这个类的构造函数的参数传递了产生这个事件的事件源(比如各种控件),方法getSource用来获得这个事件源的引用。
 * @author Owner
 *
 */
public class EasywayEvent  extends EventObject
{
        /**
	 * 
	 */
	private static final long serialVersionUID = 1L;
		Object obj;
        public EasywayEvent(Object source)
        {
               super(source);
               obj = source;
        }
        public Object getSource()
        {
               return obj;
        }
        public void say()
        {
               System.out.println("This is say method...");
        }
}

 监听器:

package easyway.app.activemq.demo.events;

/**
 * 定义新的事件监听接口,该接口继承自EventListener;该接口包含对DemeEvent事件的处理程序:
 */
import java.util.EventListener;
public interface EasywayListener extends EventListener
{
        public void easywayEvent(EasywayEvent dm);
} 

 

事件监听实现类:

package easyway.app.activemq.demo.events;


	public class EasyWayListener1 implements EasywayListener
	{
		public void easywayEvent(EasywayEvent dm) {
            System.out.println("Inside listener1...");			
		}
	}

 

测试类:

package easyway.app.activemq.demo.events;

import java.util.*;
/**
 * 通过EasyWaySource..ava文件创造一个事件源类,它用一个java.utile.Vector对象来存储所有的事件监听
 * 器对象,存储方式是通过addListener(..)这样的方法。notifyDemeEvent(..)是触发事件的方法,
 * 用来通知系统:事件发生了,你调用相应的处理函数(回调函数)吧。
 * @author Owner
 *
 */
public class EasyWaySource {

       private Vector<EasywayListener> repository = new Vector<EasywayListener>();
       EasywayListener dl;
       public EasyWaySource()
       {
 
       }
       public void addDemoListener(EasywayListener dl)
       {
              repository.addElement(dl);
       }
       public void notifyDemoEvent()
       {
              Enumeration enum1 = repository.elements();
              while(enum1.hasMoreElements())
              {
                    dl = (EasywayListener)enum1.nextElement();
                    dl.easywayEvent(new EasywayEvent(this));
              }
       }
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics