在ActiveMQ中使用适配器模式来支持部署在多个容器中的Broker:
- ActiveMQ可以部署在tomcat、Jetty、WebLogic等web容器中。
- 也可以部署在调度容器如quartz中。
- 不同的容器有不同的生命周期和事件管理机制。
- ActiveMQ需要适配相应的容器特性。
ActiveMQ通过实现Servlet和Listener等适配器,支持部署在不同容器中:
Servlet适配器
实现BrokerServlet:
public class BrokerServlet extends HttpServlet {
private BrokerService brokerService;
public void init(ServletConfig config) {
brokerService = new BrokerService();
// 配置和开始broker服务
brokerService.start();
}
public void destroy() {
brokerService.stop();
}
}
通过实现Servlet的生命周期方法,适配web容器。
Listener适配器
实现ContextListener:
public class BrokerLifecycleListener implements ContextListener {
public void contextInitialized(ContextEvent event) {
BrokerService brokerService = ..
brokerService.start();
}
public void contextDestroyed(ContextEvent event) {
..
brokerService.stop();
}
}
通过监听context事件,启动和停止broker服务。
作用
通过实现不同的适配器,ActiveMQ可以:
- 启动和停止 broker服务
- 监听和响应容器生命周期事件
- 灵活部署在各种容器中
符合适配器模式原理:
- 通过定义适配器接口
- 提供不同的具体适配器
- 来适配不同目标