activemq-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Dmitry (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (ARTEMIS-1236) Diverts are not reloaded on server restart
Date Mon, 19 Jun 2017 09:51:00 GMT

     [ https://issues.apache.org/jira/browse/ARTEMIS-1236?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Dmitry updated ARTEMIS-1236:
----------------------------
    Description: 
When diverts are created dynamically they are lost after server restart.
{code}
package ru.roborox.messaging.broker.configuration;

import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNull;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;

import org.apache.activemq.artemis.api.core.TransportConfiguration;
import org.apache.activemq.artemis.core.config.Configuration;
import org.apache.activemq.artemis.core.config.DivertConfiguration;
import org.apache.activemq.artemis.core.config.impl.ConfigurationImpl;
import org.apache.activemq.artemis.core.remoting.impl.netty.NettyAcceptorFactory;
import org.apache.activemq.artemis.core.remoting.impl.netty.NettyConnectorFactory;
import org.apache.activemq.artemis.core.remoting.impl.netty.TransportConstants;
import org.apache.activemq.artemis.core.settings.impl.AddressFullMessagePolicy;
import org.apache.activemq.artemis.core.settings.impl.AddressSettings;
import org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory;
import org.apache.activemq.artemis.jms.server.config.JMSConfiguration;
import org.apache.activemq.artemis.jms.server.config.impl.JMSConfigurationImpl;
import org.apache.activemq.artemis.jms.server.config.impl.JMSQueueConfigurationImpl;
import org.apache.activemq.artemis.jms.server.embedded.EmbeddedJMS;
import org.springframework.jms.core.JmsTemplate;
import org.testng.annotations.Test;

public class RestartTest {

	@Test
	public void divertsReloaded() throws Exception {
		File tempDirectory = Files.createTempDirectory("").toFile();
		tempDirectory.deleteOnExit();
		String path = tempDirectory.getAbsolutePath();
		EmbeddedJMS jms = createServer(path);
		
		DivertConfiguration divert = new DivertConfiguration();
		divert.setAddress("from");
		divert.setForwardingAddress("to");
		divert.setName("divert");
		divert.setExclusive(true);
		jms.getActiveMQServer().deployDivert(divert);
		
		JmsTemplate template = queueTemplate();
		
		template.convertAndSend("from", "test");
		String received = (String) template.receiveAndConvert("to");
		assertEquals(received, "test");
		assertNull(template.receiveAndConvert("from"));
		jms.stop();
		Thread.sleep(1000);
		
		jms = createServer(path);
		
		template.convertAndSend("from", "test");
		received = (String) template.receiveAndConvert("to");
		assertEquals(received, "test");
		received = (String) template.receiveAndConvert("from");
		assertNull(received);
	}

	private EmbeddedJMS createServer(String path) throws IOException, Exception {
		EmbeddedJMS jms = new EmbeddedJMS();
		Configuration configuration = new ConfigurationImpl();
		HashSet<TransportConfiguration> transports = new HashSet<TransportConfiguration>();
		Map<String, Object> transportConfig = new HashMap<String, Object>();
		transportConfig.put(TransportConstants.HOST_PROP_NAME, "127.0.0.1");
		transportConfig.put(TransportConstants.PORT_PROP_NAME, 61616);
		transports.add(new TransportConfiguration(NettyAcceptorFactory.class.getName(), transportConfig));
		configuration.addConnectorConfiguration("self", new TransportConfiguration(NettyConnectorFactory.class.getName(),
transportConfig));
		configuration.setAcceptorConfigurations(transports);
		
		configuration.setPagingDirectory(path + "/data/paging");
		configuration.setBindingsDirectory(path + "/data/bindings");
		configuration.setJournalDirectory(path + "/data/journal");
		configuration.setLargeMessagesDirectory(path + "/data/large-messages");
		configuration.setPersistenceEnabled(true);
		configuration.setSecurityEnabled(false);
		AddressSettings defaultAddressSettings = new AddressSettings();
		defaultAddressSettings
			.setAddressFullMessagePolicy(AddressFullMessagePolicy.PAGE)
			.setMaxDeliveryAttempts(-1)
			.setRedeliveryDelay(0)
			.setRedistributionDelay(0)
			.setAutoCreateAddresses(false)
			.setAutoCreateQueues(false)
			.setAutoDeleteAddresses(false)
			.setAutoDeleteQueues(false)
			.setMaxSizeBytes(10L * 1024 * 1024)
			.setPageSizeBytes(5L * 1024 * 1024);
		configuration.addAddressesSetting("#", new AddressSettings(defaultAddressSettings));
		
		JMSConfiguration jmsConfiguration = new JMSConfigurationImpl();
		JMSQueueConfigurationImpl queue1 = new JMSQueueConfigurationImpl();
		queue1.setName("from");
		queue1.setDurable(true);
		JMSQueueConfigurationImpl queue2 = new JMSQueueConfigurationImpl();
		queue2.setName("to");
		queue2.setDurable(true);
		jmsConfiguration.setQueueConfigurations(Arrays.asList(queue1, queue2));
		jms.setJmsConfiguration(jmsConfiguration);
		jms.setConfiguration(configuration);
		
		jms.start();
		return jms;
	}
	
	private ActiveMQConnectionFactory jmsConnectionFactory() {
		Map<String, Object> params = new HashMap<String, Object>();
		params.put(TransportConstants.HOST_PROP_NAME, "127.0.0.1");
		params.put(TransportConstants.PORT_PROP_NAME, 61616);
		TransportConfiguration transportConfiguration = new TransportConfiguration(
				NettyConnectorFactory.class.getName(), params);
		ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(false, transportConfiguration);
		connectionFactory.setBlockOnAcknowledge(false);
		connectionFactory.setBlockOnDurableSend(false);
		connectionFactory.setBlockOnNonDurableSend(false);
		return connectionFactory;
	}
	
	private JmsTemplate queueTemplate() {
		JmsTemplate jmsTemplate = new JmsTemplate();
		jmsTemplate.setConnectionFactory(jmsConnectionFactory());
		jmsTemplate.setReceiveTimeout(1000);
		return jmsTemplate;
	}
}
{code}

  was:When diverts are created dynamically they are lost after server restart.


> Diverts are not reloaded on server restart
> ------------------------------------------
>
>                 Key: ARTEMIS-1236
>                 URL: https://issues.apache.org/jira/browse/ARTEMIS-1236
>             Project: ActiveMQ Artemis
>          Issue Type: Bug
>          Components: Broker
>    Affects Versions: 2.1.0
>            Reporter: Dmitry
>
> When diverts are created dynamically they are lost after server restart.
> {code}
> package ru.roborox.messaging.broker.configuration;
> import static org.testng.Assert.assertEquals;
> import static org.testng.Assert.assertNull;
> import java.io.File;
> import java.io.IOException;
> import java.nio.file.Files;
> import java.util.Arrays;
> import java.util.HashMap;
> import java.util.HashSet;
> import java.util.Map;
> import org.apache.activemq.artemis.api.core.TransportConfiguration;
> import org.apache.activemq.artemis.core.config.Configuration;
> import org.apache.activemq.artemis.core.config.DivertConfiguration;
> import org.apache.activemq.artemis.core.config.impl.ConfigurationImpl;
> import org.apache.activemq.artemis.core.remoting.impl.netty.NettyAcceptorFactory;
> import org.apache.activemq.artemis.core.remoting.impl.netty.NettyConnectorFactory;
> import org.apache.activemq.artemis.core.remoting.impl.netty.TransportConstants;
> import org.apache.activemq.artemis.core.settings.impl.AddressFullMessagePolicy;
> import org.apache.activemq.artemis.core.settings.impl.AddressSettings;
> import org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory;
> import org.apache.activemq.artemis.jms.server.config.JMSConfiguration;
> import org.apache.activemq.artemis.jms.server.config.impl.JMSConfigurationImpl;
> import org.apache.activemq.artemis.jms.server.config.impl.JMSQueueConfigurationImpl;
> import org.apache.activemq.artemis.jms.server.embedded.EmbeddedJMS;
> import org.springframework.jms.core.JmsTemplate;
> import org.testng.annotations.Test;
> public class RestartTest {
> 	@Test
> 	public void divertsReloaded() throws Exception {
> 		File tempDirectory = Files.createTempDirectory("").toFile();
> 		tempDirectory.deleteOnExit();
> 		String path = tempDirectory.getAbsolutePath();
> 		EmbeddedJMS jms = createServer(path);
> 		
> 		DivertConfiguration divert = new DivertConfiguration();
> 		divert.setAddress("from");
> 		divert.setForwardingAddress("to");
> 		divert.setName("divert");
> 		divert.setExclusive(true);
> 		jms.getActiveMQServer().deployDivert(divert);
> 		
> 		JmsTemplate template = queueTemplate();
> 		
> 		template.convertAndSend("from", "test");
> 		String received = (String) template.receiveAndConvert("to");
> 		assertEquals(received, "test");
> 		assertNull(template.receiveAndConvert("from"));
> 		jms.stop();
> 		Thread.sleep(1000);
> 		
> 		jms = createServer(path);
> 		
> 		template.convertAndSend("from", "test");
> 		received = (String) template.receiveAndConvert("to");
> 		assertEquals(received, "test");
> 		received = (String) template.receiveAndConvert("from");
> 		assertNull(received);
> 	}
> 	private EmbeddedJMS createServer(String path) throws IOException, Exception {
> 		EmbeddedJMS jms = new EmbeddedJMS();
> 		Configuration configuration = new ConfigurationImpl();
> 		HashSet<TransportConfiguration> transports = new HashSet<TransportConfiguration>();
> 		Map<String, Object> transportConfig = new HashMap<String, Object>();
> 		transportConfig.put(TransportConstants.HOST_PROP_NAME, "127.0.0.1");
> 		transportConfig.put(TransportConstants.PORT_PROP_NAME, 61616);
> 		transports.add(new TransportConfiguration(NettyAcceptorFactory.class.getName(), transportConfig));
> 		configuration.addConnectorConfiguration("self", new TransportConfiguration(NettyConnectorFactory.class.getName(),
transportConfig));
> 		configuration.setAcceptorConfigurations(transports);
> 		
> 		configuration.setPagingDirectory(path + "/data/paging");
> 		configuration.setBindingsDirectory(path + "/data/bindings");
> 		configuration.setJournalDirectory(path + "/data/journal");
> 		configuration.setLargeMessagesDirectory(path + "/data/large-messages");
> 		configuration.setPersistenceEnabled(true);
> 		configuration.setSecurityEnabled(false);
> 		AddressSettings defaultAddressSettings = new AddressSettings();
> 		defaultAddressSettings
> 			.setAddressFullMessagePolicy(AddressFullMessagePolicy.PAGE)
> 			.setMaxDeliveryAttempts(-1)
> 			.setRedeliveryDelay(0)
> 			.setRedistributionDelay(0)
> 			.setAutoCreateAddresses(false)
> 			.setAutoCreateQueues(false)
> 			.setAutoDeleteAddresses(false)
> 			.setAutoDeleteQueues(false)
> 			.setMaxSizeBytes(10L * 1024 * 1024)
> 			.setPageSizeBytes(5L * 1024 * 1024);
> 		configuration.addAddressesSetting("#", new AddressSettings(defaultAddressSettings));
> 		
> 		JMSConfiguration jmsConfiguration = new JMSConfigurationImpl();
> 		JMSQueueConfigurationImpl queue1 = new JMSQueueConfigurationImpl();
> 		queue1.setName("from");
> 		queue1.setDurable(true);
> 		JMSQueueConfigurationImpl queue2 = new JMSQueueConfigurationImpl();
> 		queue2.setName("to");
> 		queue2.setDurable(true);
> 		jmsConfiguration.setQueueConfigurations(Arrays.asList(queue1, queue2));
> 		jms.setJmsConfiguration(jmsConfiguration);
> 		jms.setConfiguration(configuration);
> 		
> 		jms.start();
> 		return jms;
> 	}
> 	
> 	private ActiveMQConnectionFactory jmsConnectionFactory() {
> 		Map<String, Object> params = new HashMap<String, Object>();
> 		params.put(TransportConstants.HOST_PROP_NAME, "127.0.0.1");
> 		params.put(TransportConstants.PORT_PROP_NAME, 61616);
> 		TransportConfiguration transportConfiguration = new TransportConfiguration(
> 				NettyConnectorFactory.class.getName(), params);
> 		ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(false,
transportConfiguration);
> 		connectionFactory.setBlockOnAcknowledge(false);
> 		connectionFactory.setBlockOnDurableSend(false);
> 		connectionFactory.setBlockOnNonDurableSend(false);
> 		return connectionFactory;
> 	}
> 	
> 	private JmsTemplate queueTemplate() {
> 		JmsTemplate jmsTemplate = new JmsTemplate();
> 		jmsTemplate.setConnectionFactory(jmsConnectionFactory());
> 		jmsTemplate.setReceiveTimeout(1000);
> 		return jmsTemplate;
> 	}
> }
> {code}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Mime
View raw message