在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使用策略模式实现不同的消息持久化策略。通过统一的接口,完全解耦了具体的实现。