/** * It will create the address and queue configurations */ private void applyAddressesAndQueues(HashMap<String, String> filters) { StringWriter writer = new StringWriter(); PrintWriter printWriter = new PrintWriter(writer); printWriter.println(); for (String str : getQueueList()) { String[] seg = str.split(":"); String name = seg[0].trim(); // default routing type to anycast if not specified String routingType = (seg.length == 2 ? seg[1].trim() : "anycast"); try { RoutingType.valueOf(routingType.toUpperCase()); } catch (Exception e) { e.printStackTrace(); System.err.println("Invalid routing type: " + routingType); } printWriter.println(" <address name=\"" + name + "\">"); printWriter.println(" <" + routingType + ">"); printWriter.println(" <queue name=\"" + name + "\" />"); printWriter.println(" </" + routingType + ">"); printWriter.println(" </address>"); } for (String str : getAddressList()) { printWriter.println(" <address name=\"" + str + "\"/>"); } filters.put("${address-queue.settings}", writer.toString()); }
public void set(String key, String value) { if (key != null && value != null) { if (key.equals(ROUTING_TYPE)) { setRoutingType(RoutingType.valueOf(value.toUpperCase())); } else if (key.equals(FILTER_STRING)) { setFilterString(SimpleString.toSimpleString(value)); } else if (key.equals(DURABLE)) { setDurable(Boolean.valueOf(value)); } else if (key.equals(MAX_CONSUMERS)) { setMaxConsumers(Integer.valueOf(value)); } else if (key.equals(EXCLUSIVE)) { setExclusive(Boolean.valueOf(value)); } else if (key.equals(LAST_VALUE)) { setLastValue(Boolean.valueOf(value)); } else if (key.equals(LAST_VALUE_KEY)) { setLastValueKey(SimpleString.toSimpleString(value)); } else if (key.equals(NON_DESTRUCTIVE)) { setNonDestructive(Boolean.valueOf(value)); } else if (key.equals(PURGE_ON_NO_CONSUMERS)) { setPurgeOnNoConsumers(Boolean.valueOf(value)); } else if (key.equals(CONSUMERS_BEFORE_DISPATCH)) { setConsumersBeforeDispatch(Integer.valueOf(value)); } else if (key.equals(DELAY_BEFORE_DISPATCH)) { setDelayBeforeDispatch(Long.valueOf(value)); } else if (key.equals(CONSUMER_PRIORITY)) { setConsumerPriority(Integer.valueOf(value)); } } }
session.createQueue(address, RoutingType.valueOf(routingType), queueName, filter, true); if (logger.isDebugEnabled()) { logger.debug("Binding queue(name=" + queueName + ", address=" + address + ", filter=" + filter + ")");
public void set(String key, String value) { if (key != null && value != null) { if (key.equals(ROUTING_TYPE)) { setRoutingType(RoutingType.valueOf(value.toUpperCase())); } else if (key.equals(FILTER_STRING)) { setFilterString(SimpleString.toSimpleString(value)); } else if (key.equals(DURABLE)) { setDurable(Boolean.valueOf(value)); } else if (key.equals(MAX_CONSUMERS)) { setMaxConsumers(Integer.valueOf(value)); } else if (key.equals(EXCLUSIVE)) { setExclusive(Boolean.valueOf(value)); } else if (key.equals(LAST_VALUE)) { setLastValue(Boolean.valueOf(value)); } else if (key.equals(LAST_VALUE_KEY)) { setLastValueKey(SimpleString.toSimpleString(value)); } else if (key.equals(NON_DESTRUCTIVE)) { setNonDestructive(Boolean.valueOf(value)); } else if (key.equals(PURGE_ON_NO_CONSUMERS)) { setPurgeOnNoConsumers(Boolean.valueOf(value)); } else if (key.equals(CONSUMERS_BEFORE_DISPATCH)) { setConsumersBeforeDispatch(Integer.valueOf(value)); } else if (key.equals(DELAY_BEFORE_DISPATCH)) { setDelayBeforeDispatch(Long.valueOf(value)); } else if (key.equals(CONSUMER_PRIORITY)) { setConsumerPriority(Integer.valueOf(value)); } } }
public void set(String key, String value) { if (key != null && value != null) { if (key.equals(ROUTING_TYPE)) { setRoutingType(RoutingType.valueOf(value.toUpperCase())); } else if (key.equals(FILTER_STRING)) { setFilterString(SimpleString.toSimpleString(value)); } else if (key.equals(DURABLE)) { setDurable(Boolean.valueOf(value)); } else if (key.equals(MAX_CONSUMERS)) { setMaxConsumers(Integer.valueOf(value)); } else if (key.equals(EXCLUSIVE)) { setExclusive(Boolean.valueOf(value)); } else if (key.equals(LAST_VALUE)) { setLastValue(Boolean.valueOf(value)); } else if (key.equals(LAST_VALUE_KEY)) { setLastValueKey(SimpleString.toSimpleString(value)); } else if (key.equals(NON_DESTRUCTIVE)) { setNonDestructive(Boolean.valueOf(value)); } else if (key.equals(PURGE_ON_NO_CONSUMERS)) { setPurgeOnNoConsumers(Boolean.valueOf(value)); } else if (key.equals(CONSUMERS_BEFORE_DISPATCH)) { setConsumersBeforeDispatch(Integer.valueOf(value)); } else if (key.equals(DELAY_BEFORE_DISPATCH)) { setDelayBeforeDispatch(Long.valueOf(value)); } else if (key.equals(CONSUMER_PRIORITY)) { setConsumerPriority(Integer.valueOf(value)); } } }
session.createQueue(address, RoutingType.valueOf(routingType), queueName, filter, true); if (logger.isDebugEnabled()) { logger.debug("Binding queue(name=" + queueName + ", address=" + address + ", filter=" + filter + ")");
private void bindAddress() throws Exception { String addressName = ""; String routingTypes = ""; for (int i = 0; i < reader.getAttributeCount(); i++) { String attributeName = reader.getAttributeLocalName(i); switch (attributeName) { case XmlDataConstants.ADDRESS_BINDING_NAME: addressName = reader.getAttributeValue(i); break; case XmlDataConstants.ADDRESS_BINDING_ROUTING_TYPE: routingTypes = reader.getAttributeValue(i); break; } } ClientSession.AddressQuery addressQuery = session.addressQuery(new SimpleString(addressName)); if (!addressQuery.isExists()) { EnumSet<RoutingType> set = EnumSet.noneOf(RoutingType.class); for (String routingType : ListUtil.toList(routingTypes)) { set.add(RoutingType.valueOf(routingType)); } session.createAddress(SimpleString.toSimpleString(addressName), set, false); if (logger.isDebugEnabled()) { logger.debug("Binding address(name=" + addressName + ", routingTypes=" + routingTypes + ")"); } } else { if (logger.isDebugEnabled()) { logger.debug("Binding " + addressName + " already exists so won't re-bind."); } } }
private void bindAddress() throws Exception { String addressName = ""; String routingTypes = ""; for (int i = 0; i < reader.getAttributeCount(); i++) { String attributeName = reader.getAttributeLocalName(i); switch (attributeName) { case XmlDataConstants.ADDRESS_BINDING_NAME: addressName = reader.getAttributeValue(i); break; case XmlDataConstants.ADDRESS_BINDING_ROUTING_TYPE: routingTypes = reader.getAttributeValue(i); break; } } ClientSession.AddressQuery addressQuery = session.addressQuery(new SimpleString(addressName)); if (!addressQuery.isExists()) { EnumSet<RoutingType> set = EnumSet.noneOf(RoutingType.class); for (String routingType : ListUtil.toList(routingTypes)) { set.add(RoutingType.valueOf(routingType)); } session.createAddress(SimpleString.toSimpleString(addressName), set, false); if (logger.isDebugEnabled()) { logger.debug("Binding address(name=" + addressName + ", routingTypes=" + routingTypes + ")"); } } else { if (logger.isDebugEnabled()) { logger.debug("Binding " + addressName + " already exists so won't re-bind."); } } }
@Override public String updateAddress(String name, String routingTypes) throws Exception { checkStarted(); clearIO(); try { final EnumSet<RoutingType> routingTypeSet; if (routingTypes == null) { routingTypeSet = null; } else { routingTypeSet = EnumSet.noneOf(RoutingType.class); final String[] routingTypeNames = routingTypes.split(","); for (String routingTypeName : routingTypeNames) { routingTypeSet.add(RoutingType.valueOf(routingTypeName)); } } if (!server.updateAddressInfo(SimpleString.toSimpleString(name), routingTypeSet)) { throw ActiveMQMessageBundle.BUNDLE.addressDoesNotExist(SimpleString.toSimpleString(name)); } return AddressInfoTextFormatter.Long.format(server.getAddressInfo(SimpleString.toSimpleString(name)), new StringBuilder()).toString(); } finally { blockOnIO(); } }
@Override public String updateQueue(String name, String routingType, String filter, Integer maxConsumers, Boolean purgeOnNoConsumers, Boolean exclusive, Boolean nonDestructive, Integer consumersBeforeDispatch, Long delayBeforeDispatch, String user) throws Exception { checkStarted(); clearIO(); try { final Queue queue = server.updateQueue(name, routingType != null ? RoutingType.valueOf(routingType) : null, filter, maxConsumers, purgeOnNoConsumers, exclusive, nonDestructive, consumersBeforeDispatch, delayBeforeDispatch, user); if (queue == null) { throw ActiveMQMessageBundle.BUNDLE.noSuchQueue(new SimpleString(name)); } return QueueTextFormatter.Long.format(queue, new StringBuilder()).toString(); } finally { blockOnIO(); } }
@Override public String createAddress(String name, String routingTypes) throws Exception { checkStarted(); clearIO(); try { EnumSet<RoutingType> set = EnumSet.noneOf(RoutingType.class); for (String routingType : ListUtil.toList(routingTypes)) { set.add(RoutingType.valueOf(routingType)); } final AddressInfo addressInfo = new AddressInfo(new SimpleString(name), set); if (server.addAddressInfo(addressInfo)) { return AddressInfoTextFormatter.Long.format(addressInfo, new StringBuilder()).toString(); } else { throw ActiveMQMessageBundle.BUNDLE.addressAlreadyExists(addressInfo.getName()); } } finally { blockOnIO(); } }
private RoutingType getRoutingType(String typeHeader, String destination) throws ActiveMQStompException { // null is valid to return here so we know when the user didn't provide any routing info RoutingType routingType; if (typeHeader != null) { routingType = RoutingType.valueOf(typeHeader); } else { routingType = connection.getSession().getCoreSession().getAddressAndRoutingType(new AddressInfo(new SimpleString(destination))).getRoutingType(); } return routingType; }
private RoutingType getRoutingType(String typeHeader, String destination) throws Exception { // null is valid to return here so we know when the user didn't provide any routing info RoutingType routingType; if (typeHeader != null) { routingType = RoutingType.valueOf(typeHeader); } else { routingType = connection.getSession().getCoreSession().getAddressAndRoutingType(new AddressInfo(new SimpleString(destination))).getRoutingType(); } return routingType; }
String value = getTrimmedTextContent(child); Validators.ROUTING_TYPE.validate(DEFAULT_QUEUE_ROUTING_TYPE, value); RoutingType routingType = RoutingType.valueOf(value); addressSettings.setDefaultQueueRoutingType(routingType); } else if (DEFAULT_ADDRESS_ROUTING_TYPE.equalsIgnoreCase(name)) { String value = getTrimmedTextContent(child); Validators.ROUTING_TYPE.validate(DEFAULT_ADDRESS_ROUTING_TYPE, value); RoutingType routingType = RoutingType.valueOf(value); addressSettings.setDefaultAddressRoutingType(routingType); } else if (DEFAULT_CONSUMER_WINDOW_SIZE.equalsIgnoreCase(name)) {
public enum QueueTextFormatter { Long { @Override StringBuilder format(Queue queue, StringBuilder output) { output.append("Queue [name=").append(queue.getName()); output.append(", address=").append(queue.getAddress()); output.append(", routingType=").append(queue.getRoutingType()); final Filter filter = queue.getFilter(); if (filter != null) { output.append(", filter=").append(filter.getFilterString()); } output.append(", durable=").append(queue.isDurable()); final int maxConsumers = queue.getMaxConsumers(); if (maxConsumers != Queue.MAX_CONSUMERS_UNLIMITED) { output.append(", maxConsumers=").append(queue.getMaxConsumers()); } output.append(", purgeOnNoConsumers=").append(queue.isPurgeOnNoConsumers()); output.append(", autoCreateAddress=").append(queue.isAutoCreated()); output.append(", exclusive=").append(queue.isExclusive()); output.append(", lastValue=").append(queue.isLastValue()); output.append(", lastValueKey=").append(queue.getLastValueKey()); output.append(", nonDestructive=").append(queue.isNonDestructive()); output.append(", consumersBeforeDispatch=").append(queue.getConsumersBeforeDispatch()); output.append(", delayBeforeDispatch=").append(queue.getDelayBeforeDispatch()); output.append(", autoCreateAddress=").append(queue.isAutoCreated()); output.append(']'); return output; } };
public void testPrefix(final String prefix, final RoutingType routingType, final boolean send) throws Exception { int port = 61614; URI uri = createStompClientUri(scheme, hostname, port); final String ADDRESS = UUID.randomUUID().toString(); final String PREFIXED_ADDRESS = prefix + ADDRESS; String param = routingType.toString(); String urlParam = param.toLowerCase() + "Prefix"; server.getRemotingService().createAcceptor("test", "tcp://" + hostname + ":" + port + "?protocols=" + StompProtocolManagerFactory.STOMP_PROTOCOL_NAME + "&" + urlParam + "=" + prefix).start(); StompClientConnection conn = StompClientConnectionFactory.createClientConnection(uri); conn.connect(defUser, defPass); // since this queue doesn't exist the broker should create a new address using the routing type matching the prefix if (send) { send(conn, PREFIXED_ADDRESS, null, "Hello World", true); } else { String uuid = UUID.randomUUID().toString(); ClientStompFrame frame = conn.createFrame(Stomp.Commands.SUBSCRIBE) .addHeader(Stomp.Headers.Subscribe.DESTINATION, PREFIXED_ADDRESS) .addHeader(Stomp.Headers.RECEIPT_REQUESTED, uuid); frame = conn.sendFrame(frame); assertEquals(uuid, frame.getHeader(Stomp.Headers.Response.RECEIPT_ID)); } AddressInfo addressInfo = server.getAddressInfo(SimpleString.toSimpleString(ADDRESS)); assertNotNull("No address was created with the name " + ADDRESS, addressInfo); Set<RoutingType> routingTypes = new HashSet<>(); routingTypes.add(RoutingType.valueOf(param)); assertEquals(routingTypes, addressInfo.getRoutingTypes()); conn.disconnect(); }