1、初始化類java
@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("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()); } } }