/** * Creates an AddressInfo object with a single RoutingType associated with it. * @param name * @param routingType */ public AddressInfo(SimpleString name, RoutingType routingType) { this.name = CompositeAddress.extractAddressName(name); addRoutingType(routingType); }
addressInfo.addRoutingType(RoutingType.MULTICAST); addressInfo.addRoutingType(RoutingType.ANYCAST);
protected void createAddressInfo(final int node, final String address, final RoutingType routingType, final int defaulMaxConsumers, boolean defaultPurgeOnNoConsumers) throws Exception { AddressInfo addressInfo = new AddressInfo(new SimpleString(address)); addressInfo.addRoutingType(routingType); servers[node].addOrUpdateAddressInfo(addressInfo); }
private synchronized boolean internalCreateQueue(final String queueName, final String jmsQueueName, final String selectorString, final boolean durable, final boolean autoCreated) throws Exception { if (queues.get(queueName) != null) { return false; } else { // Convert from JMS selector to core filter String coreFilterString = null; if (selectorString != null) { coreFilterString = SelectorTranslator.convertToActiveMQFilterString(selectorString); } server.addOrUpdateAddressInfo(new AddressInfo(SimpleString.toSimpleString(queueName)).addRoutingType(RoutingType.ANYCAST)); AddressSettings as = server.getAddressSettingsRepository().getMatch(queueName); server.createQueue(SimpleString.toSimpleString(queueName), RoutingType.ANYCAST, SimpleString.toSimpleString(queueName), SimpleString.toSimpleString(coreFilterString), null, durable, false, true, false, false, as.getDefaultMaxConsumers(), as.isDefaultPurgeOnNoConsumers(), as.isAutoCreateAddresses()); // create the JMS queue with the logical name jmsQueueName and keeps queueName for its *core* queue name queues.put(queueName, ActiveMQDestination.createQueue(queueName, jmsQueueName)); this.recoverregistryBindings(queueName, PersistedType.Queue); return true; } }
addressInfo.addRoutingType(RoutingType.MULTICAST); } else { addressInfo = new AddressInfo(address, RoutingType.MULTICAST);
@Before public void setup() throws Exception { server = createServer(true); server.start(); server.waitForActivation(10, TimeUnit.SECONDS); ServerLocator sl = ActiveMQClient.createServerLocatorWithoutHA(new TransportConfiguration(INVM_CONNECTOR_FACTORY)); sessionFactory = sl.createSessionFactory(); addSessionFactory(sessionFactory); addressInfo = new AddressInfo(baseAddress); addressInfo.addRoutingType(RoutingType.MULTICAST); server.addOrUpdateAddressInfo(addressInfo); }
@Before public void setup() throws Exception { server = createServer(true); server.start(); server.waitForActivation(10, TimeUnit.SECONDS); ServerLocator sl = ActiveMQClient.createServerLocatorWithoutHA(new TransportConfiguration(INVM_CONNECTOR_FACTORY)); sessionFactory = sl.createSessionFactory(); addSessionFactory(sessionFactory); addressInfo = new AddressInfo(baseAddress); addressInfo.addRoutingType(RoutingType.ANYCAST); server.addOrUpdateAddressInfo(addressInfo); }
@Test public void testAddressQueryNonDefaultsOnStaticAddress() throws Exception { SimpleString addressName = SimpleString.toSimpleString(UUID.randomUUID().toString()); server.getAddressSettingsRepository().addMatch(addressName.toString(), new AddressSettings().setAutoCreateAddresses(false).setDefaultMaxConsumers(1).setDefaultPurgeOnNoConsumers(true)); server.addAddressInfo(new AddressInfo(addressName).addRoutingType(RoutingType.ANYCAST)); AddressQueryResult addressQueryResult = server.addressQuery(addressName); assertTrue(addressQueryResult.isExists()); assertTrue(addressQueryResult.getRoutingTypes().contains(RoutingType.ANYCAST)); assertFalse(addressQueryResult.getRoutingTypes().contains(RoutingType.MULTICAST)); assertEquals(addressName, addressQueryResult.getName()); assertFalse(addressQueryResult.isAutoCreateAddresses()); assertEquals(1, addressQueryResult.getDefaultMaxConsumers()); assertFalse(addressQueryResult.isAutoCreated()); assertTrue(addressQueryResult.isDefaultPurgeOnNoConsumers()); }
addressInfo.addRoutingType(RoutingType.ANYCAST);
private void deployQueuesFromListCoreQueueConfiguration(List<CoreQueueConfiguration> queues) throws Exception { for (CoreQueueConfiguration config : queues) { try { SimpleString queueName = SimpleString.toSimpleString(config.getName()); ActiveMQServerLogger.LOGGER.deployQueue(config.getName(), config.getAddress(), config.getRoutingType().toString()); AddressSettings as = addressSettingsRepository.getMatch(config.getAddress()); // determine if there is an address::queue match; update it if so int maxConsumers = config.getMaxConsumers() == null ? as.getDefaultMaxConsumers() : config.getMaxConsumers(); boolean isExclusive = config.isExclusive() == null ? as.isDefaultExclusiveQueue() : config.isExclusive(); boolean isLastValue = config.isLastValue() == null ? as.isDefaultLastValueQueue() : config.isLastValue(); SimpleString lastValueKey = config.getLastValueKey() == null ? as.getDefaultLastValueKey() : SimpleString.toSimpleString(config.getLastValueKey()); boolean isNonDestructive = config.isNonDestructive() == null ? as.isDefaultNonDestructive() : config.isNonDestructive(); int consumersBeforeDispatch = config.getConsumersBeforeDispatch() == null ? as.getDefaultConsumersBeforeDispatch() : config.getConsumersBeforeDispatch(); long delayBeforeDispatch = config.getDelayBeforeDispatch() == null ? as.getDefaultDelayBeforeDispatch() : config.getDelayBeforeDispatch(); if (locateQueue(queueName) != null && locateQueue(queueName).getAddress().toString().equals(config.getAddress())) { updateQueue(config.getName(), config.getRoutingType(), config.getFilterString(), maxConsumers, config.getPurgeOnNoConsumers(), isExclusive, isNonDestructive, consumersBeforeDispatch, delayBeforeDispatch, config.getUser(), true); } else { // if the address::queue doesn't exist then create it try { createQueue(new AddressInfo(SimpleString.toSimpleString(config.getAddress())).addRoutingType(config.getRoutingType()), queueName, SimpleString.toSimpleString(config.getFilterString()), SimpleString.toSimpleString(config.getUser()), config.isDurable(), false, false, false, false, maxConsumers, config.getPurgeOnNoConsumers(), isExclusive, isLastValue, lastValueKey, isNonDestructive, consumersBeforeDispatch, delayBeforeDispatch, true, true); } catch (ActiveMQQueueExistsException e) { // the queue may exist on a *different* address ActiveMQServerLogger.LOGGER.warn(e.getMessage()); } } } catch (Exception e) { ActiveMQServerLogger.LOGGER.problemDeployingQueue(config.getName(), e.getMessage()); } } }
final long delayBeforeDispatch, final boolean autoCreateAddress) throws Exception { return createQueue(new AddressInfo(address).addRoutingType(routingType), queueName, filterString, user, durable, temporary, ignoreIfExists, transientQueue, autoCreated, maxConsumers, purgeOnNoConsumers, exclusive, lastValue, lastValueKey, nonDestructive, consumersBeforeDispatch, delayBeforeDispatch, autoCreateAddress, false);
@Test public void testTopicPrefixWhenUseJndiIsFalse() throws Exception { final String prefix = "jms.topic."; final String destinationName = "test"; final SimpleString prefixedDestinationName = SimpleString.toSimpleString(prefix + destinationName); server.addAddressInfo(new AddressInfo(prefixedDestinationName).addRoutingType(RoutingType.MULTICAST)); ActiveMQResourceAdapter ra = new ActiveMQResourceAdapter(); ra.setConnectorClassName(INVM_CONNECTOR_FACTORY); ra.start(new BootstrapContext()); Connection conn = ra.getDefaultActiveMQConnectionFactory().createConnection(); conn.close(); ActiveMQActivationSpec spec = new ActiveMQActivationSpec(); spec.setResourceAdapter(ra); spec.setUseJNDI(false); spec.setDestinationType("javax.jms.Topic"); spec.setDestination(destinationName); spec.setTopicPrefix(prefix); spec.setMaxSession(1); spec.setSetupAttempts(1); ActiveMQActivation activation = new ActiveMQActivation(ra, new MessageEndpointFactory(), spec); activation.start(); assertEquals(1, ((AddressControl)server.getManagementService().getResource(ResourceNames.ADDRESS + prefixedDestinationName)).getQueueNames().length); activation.stop(); }
@Test public void testMulticastRouting() throws Exception { SimpleString sendAddress = new SimpleString("test.address"); List<String> testAddresses = Arrays.asList("test.address", "test.#", "test.*"); for (String consumeAddress : testAddresses) { // For each address, create 2 Queues with the same address, assert both queues receive message AddressInfo addressInfo = new AddressInfo(new SimpleString(consumeAddress)); addressInfo.addRoutingType(RoutingType.MULTICAST); server.addOrUpdateAddressInfo(addressInfo); Queue q1 = server.createQueue(new SimpleString(consumeAddress), RoutingType.MULTICAST, new SimpleString(consumeAddress + ".1"), null, true, false); Queue q2 = server.createQueue(new SimpleString(consumeAddress), RoutingType.MULTICAST, new SimpleString(consumeAddress + ".2"), null, true, false); ClientSession session = sessionFactory.createSession(); session.start(); ClientConsumer consumer1 = session.createConsumer(q1.getName()); ClientConsumer consumer2 = session.createConsumer(q2.getName()); ClientProducer producer = session.createProducer(sendAddress); ClientMessage m = session.createMessage(ClientMessage.TEXT_TYPE, true); m.getBodyBuffer().writeString("TestMessage"); producer.send(m); assertNotNull(consumer1.receive(2000)); assertNotNull(consumer2.receive(2000)); q1.deleteQueue(); q2.deleteQueue(); } }
@Test public void testAnycastRouting() throws Exception { SimpleString sendAddress = new SimpleString("test.address"); List<String> testAddresses = Arrays.asList("test.address", "test.#", "test.*"); for (String consumeAddress : testAddresses) { // For each address, create 2 Queues with the same address, assert one queue receive message AddressInfo addressInfo = new AddressInfo(new SimpleString(consumeAddress)); addressInfo.addRoutingType(RoutingType.ANYCAST); server.addOrUpdateAddressInfo(addressInfo); Queue q1 = server.createQueue(new SimpleString(consumeAddress), RoutingType.ANYCAST, new SimpleString(consumeAddress + ".1"), null, true, false, Queue.MAX_CONSUMERS_UNLIMITED, false, true); Queue q2 = server.createQueue(new SimpleString(consumeAddress), RoutingType.ANYCAST, new SimpleString(consumeAddress + ".2"), null, true, false, Queue.MAX_CONSUMERS_UNLIMITED, false, true); ClientSession session = sessionFactory.createSession(); session.start(); ClientConsumer consumer1 = session.createConsumer(q1.getName()); ClientConsumer consumer2 = session.createConsumer(q2.getName()); ClientProducer producer = session.createProducer(sendAddress); ClientMessage m = session.createMessage(ClientMessage.TEXT_TYPE, true); m.getBodyBuffer().writeString("TestMessage"); producer.send(m); int count = 0; count = (consumer1.receive(1000) == null) ? count : count + 1; count = (consumer2.receive(1000) == null) ? count : count + 1; assertEquals(1, count); q1.deleteQueue(); q2.deleteQueue(); } }