First, the initialization class
@Component("initListener")
public class InitListener implements ServletContextAware, ApplicationListener<ContextRefreshedEvent> {
/** logger */
private static final Logger logger = Logger.getLogger(InitListener.class.getName());
/** servletContext */
private ServletContext servletContext;
@Value("${system.version}")
private String systemVersion;
@Resource(name = "cacheServiceImpl")
private CacheService cacheService;
@Resource(name = "searchServiceImpl")
private SearchService searchService;
@Resource(name = "accessServerServiceImpl")
private AccessServerService accessServerService;
@Autowired
private MqServer mqServer;
@Override
public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
if(servletContext != null && contextRefreshedEvent.getApplicationContext().getParent() == null){
logger.debug("系统初始化开始……");
initSyncRuleMap();
initMqServer();
}
}
private void initMqServer() {
//查询所有mq的地址,循环开启链接
if (accessServerService ==null)
accessServerService = (AccessServerService) SpringUtils.getBean("accessServerServiceImpl");
List<AccessServer> servers = accessServerService.findAll();
for (AccessServer accessServer : servers) {
mqServer.addNetworkConnector("tcp://" + accessServer.getServerAddress());
}
}
public void setServletContext(ServletContext servletContext) {
this.servletContext = servletContext;
}
}
2. mqserver service class
@Service("mqServer")
public class MqServer {
private static Logger logger = Logger.getLogger(MqServer.class);
@Resource(name = "tamperServer")
private TamperServerImpl tamperServer;
@Resource(name = "amqBroker")
private BrokerService broker;
@Value(value = "${activemq.username}")
private String brokerUserName;
@Value(value = "${activemq.password}")
private String brokerPassword;
/**
* 添加网络连接
*
* @param netWorkUrl
*/
public void addNetworkConnector(String netWorkUrl) {
try {
URI localURI = URI.create("static:(" + netWorkUrl + ")");
NetworkConnector networkConnector = new DiscoveryNetworkConnector(localURI);
networkConnector.setUserName(brokerUserName);
networkConnector.setPassword(brokerPassword);
networkConnector.setDuplex(true);
networkConnector.setBrokerName(netWorkUrl);
networkConnector.setName(netWorkUrl);
broker.addNetworkConnector(networkConnector);
networkConnector.start();
} catch (Exception e) {
logger.error("activemq 增加 NetworkConnector 失败,异常:" + e.getMessage());
}
}
/**
* 添加网络连接
*
* @param netWorkUrl
*/
public void removeNetworkConnector(String netWorkUrl) {
try {
NetworkConnector connector = broker.getNetworkConnectorByName(netWorkUrl);
broker.removeNetworkConnector(connector);
connector.stop();
} catch (Exception e) {
logger.error("activemq 删除 NetworkConnector 失败,异常:" + e.getMessage());
}
}
}