private void undeployAddressesAndQueueNotInConfiguration(Configuration configuration) throws Exception { Set<String> addressesInConfig = configuration.getAddressConfigurations().stream() .map(CoreAddressConfiguration::getName) .collect(Collectors.toSet()); Set<String> queuesInConfig = configuration.getAddressConfigurations().stream() .map(CoreAddressConfiguration::getQueueConfigurations) .flatMap(List::stream).map(CoreQueueConfiguration::getName) .collect(Collectors.toSet()); for (SimpleString addressName : listAddressNames()) { AddressSettings addressSettings = getAddressSettingsRepository().getMatch(addressName.toString()); if (!addressesInConfig.contains(addressName.toString()) && addressSettings.getConfigDeleteAddresses() == DeletionPolicy.FORCE) { for (Queue queue : listQueues(addressName)) { ActiveMQServerLogger.LOGGER.undeployQueue(queue.getName()); queue.deleteQueue(true); } ActiveMQServerLogger.LOGGER.undeployAddress(addressName); removeAddressInfo(addressName, null); } else if (addressSettings.getConfigDeleteQueues() == DeletionPolicy.FORCE) { for (Queue queue : listConfiguredQueues(addressName)) { if (!queuesInConfig.contains(queue.getName().toString())) { ActiveMQServerLogger.LOGGER.undeployQueue(queue.getName()); queue.deleteQueue(true); } } } } }
@Override public void reload(URL uri) throws Exception { Configuration config = new FileConfigurationParser().parseMainConfig(uri.openStream()); LegacyJMSConfiguration legacyJMSConfiguration = new LegacyJMSConfiguration(config); legacyJMSConfiguration.parseConfiguration(uri.openStream()); configuration.setSecurityRoles(config.getSecurityRoles()); configuration.setAddressesSettings(config.getAddressesSettings()); configuration.setDivertConfigurations(config.getDivertConfigurations()); configuration.setAddressConfigurations(config.getAddressConfigurations()); configuration.setQueueConfigurations(config.getQueueConfigurations()); configurationReloadDeployed.set(false); if (isActive()) { deployReloadableConfigFromConfiguration(); } } }
private void addQueue(Configuration serverConfig, String address, String name) { List<CoreAddressConfiguration> addrConfigs = serverConfig.getAddressConfigurations(); CoreAddressConfiguration addrCfg = new CoreAddressConfiguration(); addrCfg.setName(address); addrCfg.addRoutingType(RoutingType.ANYCAST); CoreQueueConfiguration qConfig = new CoreQueueConfiguration(); qConfig.setName(name); qConfig.setAddress(address); addrCfg.addQueueConfiguration(qConfig); addrConfigs.add(addrCfg); }
@Override protected void start() throws Exception { Configuration liveConf = createDefaultInVMConfig(); server = createServer(false, liveConf); server.getConfiguration().getAddressConfigurations().add(new CoreAddressConfiguration().setName(ADDRESS.toString()).addRoutingType(RoutingType.MULTICAST)); server.start(); waitForServerToStart(server); }
private void deployAddressesFromConfiguration(Configuration configuration) throws Exception { for (CoreAddressConfiguration config : configuration.getAddressConfigurations()) { try { ActiveMQServerLogger.LOGGER.deployAddress(config.getName(), config.getRoutingTypes().toString()); SimpleString address = SimpleString.toSimpleString(config.getName()); AddressInfo tobe = new AddressInfo(address, config.getRoutingTypes()); //During this stage until all queues re-configured we combine the current (if exists) with to-be routing types to allow changes in queues AddressInfo current = getAddressInfo(address); AddressInfo merged = new AddressInfo(address, tobe.getRoutingType()); if (current != null) { merged.getRoutingTypes().addAll(current.getRoutingTypes()); } addOrUpdateAddressInfo(merged); deployQueuesFromListCoreQueueConfiguration(config.getQueueConfigurations()); //Now all queues updated we apply the actual address info expected tobe. addOrUpdateAddressInfo(tobe); } catch (Exception e) { ActiveMQServerLogger.LOGGER.problemDeployingAddress(config.getName(), e.getMessage()); } } }
@Override protected void start() throws Exception { Configuration liveConf = createDefaultNettyConfig(); server = createServer(false, liveConf); server.getConfiguration().getAddressConfigurations().add(new CoreAddressConfiguration().setName(ADDRESS.toString()).addRoutingType(RoutingType.MULTICAST)); server.start(); waitForServerToStart(server); }
private void verifyAddresses() { assertEquals(3, conf.getAddressConfigurations().size()); CoreAddressConfiguration addressConfiguration = conf.getAddressConfigurations().get(0); assertEquals("addr1", addressConfiguration.getName()); Set<RoutingType> routingTypes = new HashSet<>(); addressConfiguration = conf.getAddressConfigurations().get(1); assertEquals("addr2", addressConfiguration.getName()); routingTypes = new HashSet<>(); addressConfiguration = conf.getAddressConfigurations().get(2); assertEquals("addr2", addressConfiguration.getName()); routingTypes = new HashSet<>();
@Test(timeout = 60 * 1000) public void testBrokerRestartAfterSubHashWithConfigurationQueues() throws Exception { // Add some pre configured queues CoreQueueConfiguration coreQueueConfiguration = new CoreQueueConfiguration(); coreQueueConfiguration.setName("DLQ"); coreQueueConfiguration.setRoutingType(RoutingType.ANYCAST); coreQueueConfiguration.setAddress("DLA"); CoreAddressConfiguration coreAddressConfiguration = new CoreAddressConfiguration(); coreAddressConfiguration.setName("DLA"); coreAddressConfiguration.addRoutingType(RoutingType.ANYCAST); coreAddressConfiguration.addQueueConfiguration(coreQueueConfiguration); getServer().getConfiguration().getAddressConfigurations().add(coreAddressConfiguration); getServer().stop(); getServer().start(); getServer().waitForActivation(10, TimeUnit.SECONDS); for (int i = 0; i < 2; i++) { MQTT mqtt = createMQTTConnection("myClient", false); BlockingConnection connection = mqtt.blockingConnection(); connection.connect(); connection.subscribe(new Topic[]{new Topic("#", QoS.AT_MOST_ONCE)}); connection.disconnect(); getServer().stop(); getServer().start(); getServer().waitForActivation(10, TimeUnit.SECONDS); } }
Assert.assertEquals(Collections.emptyList(), conf.getAddressConfigurations());