ActiveMQ中策略模式:ActiveMQ 中的策略可以被外部更改而不影响客户端

在ActiveMQ中使用策略模式来实现不同的消息持久化策略。

具体来说:

ActiveMQ支持多种消息持久化

  • KahaDB
  • JDBC
  • LevelDB
  • XA
  • File persistence
    -延时持久化 等等

政策类

ActiveMQ定义了PersistenceAdapater接口:

public interface PersistenceAdapter {

   // 添加消息
  void addMessage(..);

   // 删除消息  
  void deleteMessage(..); 

   // 获取游标 
   MessageCursor browse()  throws Exception;  

   ...
}

具体策略

提供不同的实现:

public class KahaPersistenceAdapter implements PersistenceAdapter{

   // 使用 KahaDB 实现 
   ...

}

public class JdbcPersistenceAdapter implements PersistenceAdapater{

  // 使用 JDBC 实现  
  ...
}

获取策略

当需要使用持久化时,从上下文获取相应的策略:

PersistenceAdapter persistenceAdapter = 
    (PersistenceAdapter) broker.getAdaptor(destination);

根据配置,选择不同的实现。

交互策略

使用时,都通过统一的PersistenceAdapter接口来交互:

persistenceAdapter.addMessage(message);

MessageCursor cursor = persistenceAdapter.browse();
while(cursor.hasNext()){
   ...
}

不依赖具体的实现策略。

优点

ActiveMQ通过策略模式实现消息持久化策略具有以下好处:

  • 增加新的持久化策略就可轻松添加
  • 客户端使用不依赖具体的实现
  • 解耦了持久化策略的实现细节

符合策略模式原则:
定义一个策略接口、多个具体策略实现,并让客户端不依赖具体的策略。

总的来说,ActiveMQ使用策略模式实现不同的消息持久化策略。通过统一的接口,完全解耦了具体的实现。