Search in sources :

Example 46 with DiscoveryGroupConfiguration

use of org.apache.activemq.artemis.api.core.DiscoveryGroupConfiguration in project activemq-artemis by apache.

the class SymmetricClusterExample method main.

public static void main(final String[] args) throws Exception {
    Connection connection0 = null;
    Connection connection1 = null;
    Connection connection2 = null;
    Connection connection3 = null;
    Connection connection4 = null;
    Connection connection5 = null;
    try {
        // Step 1 - We instantiate a connection factory directly, specifying the UDP address and port for discovering
        // the list of servers in the cluster.
        // We could use JNDI to look-up a connection factory, but we'd need to know the JNDI server host and port for
        // the
        // specific server to do that, and that server might not be available at the time. By creating the
        // connection factory directly we avoid having to worry about a JNDI look-up.
        // In an app server environment you could use HA-JNDI to lookup from the clustered JNDI servers without
        // having to know about a specific one.
        UDPBroadcastEndpointFactory udpCfg = new UDPBroadcastEndpointFactory();
        udpCfg.setGroupAddress("231.7.7.7").setGroupPort(9876);
        DiscoveryGroupConfiguration groupConfiguration = new DiscoveryGroupConfiguration();
        groupConfiguration.setBroadcastEndpointFactory(udpCfg);
        ConnectionFactory cf = ActiveMQJMSClient.createConnectionFactoryWithHA(groupConfiguration, JMSFactoryType.CF);
        // We give a little while for each server to broadcast its whereabouts to the client
        Thread.sleep(2000);
        // Step 2. Directly instantiate JMS Queue and Topic objects
        Queue queue = ActiveMQJMSClient.createQueue("exampleQueue");
        Topic topic = ActiveMQJMSClient.createTopic("exampleTopic");
        // Step 3. We create six connections, they should be to different nodes of the cluster in a round-robin fashion
        // and start them
        connection0 = cf.createConnection();
        connection1 = cf.createConnection();
        connection2 = cf.createConnection();
        connection3 = cf.createConnection();
        connection4 = cf.createConnection();
        connection5 = cf.createConnection();
        connection0.start();
        connection1.start();
        connection2.start();
        connection3.start();
        connection4.start();
        connection5.start();
        // Step 4. We create a session on each connection
        Session session0 = connection0.createSession(false, Session.AUTO_ACKNOWLEDGE);
        Session session1 = connection1.createSession(false, Session.AUTO_ACKNOWLEDGE);
        Session session2 = connection2.createSession(false, Session.AUTO_ACKNOWLEDGE);
        Session session3 = connection0.createSession(false, Session.AUTO_ACKNOWLEDGE);
        Session session4 = connection1.createSession(false, Session.AUTO_ACKNOWLEDGE);
        Session session5 = connection2.createSession(false, Session.AUTO_ACKNOWLEDGE);
        // Step 5. We create a topic subscriber on each server
        MessageConsumer subscriber0 = session0.createConsumer(topic);
        MessageConsumer subscriber1 = session1.createConsumer(topic);
        MessageConsumer subscriber2 = session2.createConsumer(topic);
        MessageConsumer subscriber3 = session3.createConsumer(topic);
        MessageConsumer subscriber4 = session4.createConsumer(topic);
        MessageConsumer subscriber5 = session5.createConsumer(topic);
        // Step 6. We create a queue consumer on server 0
        MessageConsumer consumer0 = session0.createConsumer(queue);
        // Step 7. We create an anonymous message producer on just one server 2
        MessageProducer producer2 = session2.createProducer(null);
        // Step 8. We send 500 messages each to the queue and topic
        final int numMessages = 500;
        for (int i = 0; i < numMessages; i++) {
            TextMessage message1 = session2.createTextMessage("Topic message " + i);
            producer2.send(topic, message1);
            TextMessage message2 = session2.createTextMessage("Queue message " + i);
            producer2.send(queue, message2);
        }
        for (int i = 0; i < numMessages; i++) {
            TextMessage received0 = (TextMessage) subscriber0.receive(5000);
            if (received0 == null) {
                throw new IllegalStateException("Message is null!");
            }
            TextMessage received1 = (TextMessage) subscriber1.receive(5000);
            if (received1 == null) {
                throw new IllegalStateException("Message is null!");
            }
            TextMessage received2 = (TextMessage) subscriber2.receive(5000);
            if (received2 == null) {
                throw new IllegalStateException("Message is null!");
            }
            TextMessage received3 = (TextMessage) subscriber3.receive(5000);
            if (received3 == null) {
                throw new IllegalStateException("Message is null!");
            }
            TextMessage received4 = (TextMessage) subscriber4.receive(5000);
            if (received4 == null) {
                throw new IllegalStateException("Message is null!");
            }
            TextMessage received5 = (TextMessage) subscriber5.receive(5000);
            if (received5 == null) {
                throw new IllegalStateException("Message is null!");
            }
            TextMessage received6 = (TextMessage) consumer0.receive(5000);
            if (received6 == null) {
                throw new IllegalStateException("Message is null!");
            }
        }
    } finally {
        // Step 15. Be sure to close our resources!
        connection0.close();
        connection1.close();
        connection2.close();
        connection3.close();
        connection4.close();
        connection5.close();
    }
}
Also used : ConnectionFactory(javax.jms.ConnectionFactory) MessageConsumer(javax.jms.MessageConsumer) Connection(javax.jms.Connection) DiscoveryGroupConfiguration(org.apache.activemq.artemis.api.core.DiscoveryGroupConfiguration) MessageProducer(javax.jms.MessageProducer) Topic(javax.jms.Topic) UDPBroadcastEndpointFactory(org.apache.activemq.artemis.api.core.UDPBroadcastEndpointFactory) Queue(javax.jms.Queue) TextMessage(javax.jms.TextMessage) Session(javax.jms.Session)

Example 47 with DiscoveryGroupConfiguration

use of org.apache.activemq.artemis.api.core.DiscoveryGroupConfiguration in project activemq-artemis by apache.

the class ActiveMQConnectionFactoryTest method testDiscoveryConstructor.

@Test
public void testDiscoveryConstructor() throws Exception {
    DiscoveryGroupConfiguration groupConfiguration = new DiscoveryGroupConfiguration().setBroadcastEndpointFactory(new UDPBroadcastEndpointFactory().setGroupAddress(groupAddress).setGroupPort(groupPort));
    ActiveMQConnectionFactory cf = ActiveMQJMSClient.createConnectionFactoryWithoutHA(groupConfiguration, JMSFactoryType.CF);
    assertFactoryParams(cf, null, groupConfiguration, null, ActiveMQClient.DEFAULT_CLIENT_FAILURE_CHECK_PERIOD, ActiveMQClient.DEFAULT_CONNECTION_TTL, ActiveMQClient.DEFAULT_CALL_TIMEOUT, ActiveMQClient.DEFAULT_CALL_FAILOVER_TIMEOUT, ActiveMQClient.DEFAULT_MIN_LARGE_MESSAGE_SIZE, ActiveMQClient.DEFAULT_CONSUMER_WINDOW_SIZE, ActiveMQClient.DEFAULT_CONSUMER_MAX_RATE, ActiveMQClient.DEFAULT_CONFIRMATION_WINDOW_SIZE, ActiveMQClient.DEFAULT_PRODUCER_MAX_RATE, ActiveMQClient.DEFAULT_BLOCK_ON_ACKNOWLEDGE, ActiveMQClient.DEFAULT_BLOCK_ON_DURABLE_SEND, ActiveMQClient.DEFAULT_BLOCK_ON_NON_DURABLE_SEND, ActiveMQClient.DEFAULT_AUTO_GROUP, ActiveMQClient.DEFAULT_PRE_ACKNOWLEDGE, ActiveMQClient.DEFAULT_CONNECTION_LOAD_BALANCING_POLICY_CLASS_NAME, ActiveMQClient.DEFAULT_ACK_BATCH_SIZE, ActiveMQClient.DEFAULT_ACK_BATCH_SIZE, ActiveMQClient.DEFAULT_DISCOVERY_INITIAL_WAIT_TIMEOUT, ActiveMQClient.DEFAULT_USE_GLOBAL_POOLS, ActiveMQClient.DEFAULT_SCHEDULED_THREAD_POOL_MAX_SIZE, ActiveMQClient.DEFAULT_THREAD_POOL_MAX_SIZE, ActiveMQClient.DEFAULT_RETRY_INTERVAL, ActiveMQClient.DEFAULT_RETRY_INTERVAL_MULTIPLIER, ActiveMQClient.DEFAULT_RECONNECT_ATTEMPTS);
    Connection conn = cf.createConnection();
    conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
    testSettersThrowException(cf);
    conn.close();
}
Also used : ActiveMQConnectionFactory(org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory) Connection(javax.jms.Connection) DiscoveryGroupConfiguration(org.apache.activemq.artemis.api.core.DiscoveryGroupConfiguration) UDPBroadcastEndpointFactory(org.apache.activemq.artemis.api.core.UDPBroadcastEndpointFactory) Test(org.junit.Test)

Example 48 with DiscoveryGroupConfiguration

use of org.apache.activemq.artemis.api.core.DiscoveryGroupConfiguration in project activemq-artemis by apache.

the class ConnectionFactorySerializationTest method testConnectionFactoryUDP.

// Public --------------------------------------------------------
@Test
public void testConnectionFactoryUDP() throws Exception {
    createDiscoveryFactoryUDP();
    cf = (ActiveMQConnectionFactory) namingContext.lookup("/MyConnectionFactory");
    // apparently looking up the connection factory with the org.apache.activemq.artemis.jms.tests.tools.container.InVMInitialContextFactory
    // is not enough to actually serialize it so we serialize it manually
    byte[] x = serialize(cf);
    ActiveMQConnectionFactory y = deserialize(x, ActiveMQConnectionFactory.class);
    checkEquals(cf, y);
    DiscoveryGroupConfiguration dgc = y.getDiscoveryGroupConfiguration();
    Assert.assertEquals(dgc.getName(), "dg1");
    Assert.assertEquals(dgc.getDiscoveryInitialWaitTimeout(), 5000);
    Assert.assertEquals(dgc.getRefreshTimeout(), 5000);
    Assert.assertTrue(dgc.getBroadcastEndpointFactory() instanceof UDPBroadcastEndpointFactory);
    UDPBroadcastEndpointFactory befc = (UDPBroadcastEndpointFactory) dgc.getBroadcastEndpointFactory();
    Assert.assertEquals(Integer.parseInt(System.getProperty("org.apache.activemq.artemis.api.core.UDPBroadcastEndpointFactory.localBindPort", "-1")), befc.getLocalBindPort());
    Assert.assertEquals(System.getProperty("org.apache.activemq.artemis.api.core.UDPBroadcastEndpointFactory.localBindAddress"), befc.getLocalBindAddress());
    Assert.assertEquals(getUDPDiscoveryPort(), befc.getGroupPort());
    Assert.assertEquals(getUDPDiscoveryAddress(), befc.getGroupAddress());
}
Also used : ActiveMQConnectionFactory(org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory) DiscoveryGroupConfiguration(org.apache.activemq.artemis.api.core.DiscoveryGroupConfiguration) UDPBroadcastEndpointFactory(org.apache.activemq.artemis.api.core.UDPBroadcastEndpointFactory) Test(org.junit.Test)

Example 49 with DiscoveryGroupConfiguration

use of org.apache.activemq.artemis.api.core.DiscoveryGroupConfiguration in project activemq-artemis by apache.

the class ConnectionFactorySerializationTest method testConnectionFactoryJgroupsFile.

@Test
public void testConnectionFactoryJgroupsFile() throws Exception {
    createDiscoveryFactoryJGroupsFile();
    cf = (ActiveMQConnectionFactory) namingContext.lookup("/MyConnectionFactory");
    // apparently looking up the connection factory with the org.apache.activemq.artemis.jms.tests.tools.container.InVMInitialContextFactory
    // is not enough to actually serialize it so we serialize it manually
    byte[] x = serialize(cf);
    ActiveMQConnectionFactory y = deserialize(x, ActiveMQConnectionFactory.class);
    checkEquals(cf, y);
    DiscoveryGroupConfiguration dgc = y.getDiscoveryGroupConfiguration();
    Assert.assertEquals(dgc.getName(), "dg1");
    Assert.assertEquals(dgc.getDiscoveryInitialWaitTimeout(), 5000);
    Assert.assertEquals(dgc.getRefreshTimeout(), 5000);
    Assert.assertTrue(dgc.getBroadcastEndpointFactory() instanceof JGroupsFileBroadcastEndpointFactory);
    JGroupsFileBroadcastEndpointFactory befc = (JGroupsFileBroadcastEndpointFactory) dgc.getBroadcastEndpointFactory();
    Assert.assertEquals("myChannel", befc.getChannelName());
    Assert.assertEquals("/META-INF/myfile.xml", befc.getFile());
}
Also used : ActiveMQConnectionFactory(org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory) JGroupsFileBroadcastEndpointFactory(org.apache.activemq.artemis.api.core.JGroupsFileBroadcastEndpointFactory) DiscoveryGroupConfiguration(org.apache.activemq.artemis.api.core.DiscoveryGroupConfiguration) Test(org.junit.Test)

Example 50 with DiscoveryGroupConfiguration

use of org.apache.activemq.artemis.api.core.DiscoveryGroupConfiguration in project activemq-artemis by apache.

the class ConnectionFactorySerializationTest method testConnectionFactoryJgroupsProperties.

@Test
public void testConnectionFactoryJgroupsProperties() throws Exception {
    createDiscoveryFactoryJGroupsProperties();
    cf = (ActiveMQConnectionFactory) namingContext.lookup("/MyConnectionFactory");
    // apparently looking up the connection factory with the org.apache.activemq.artemis.jms.tests.tools.container.InVMInitialContextFactory
    // is not enough to actually serialize it so we serialize it manually
    byte[] x = serialize(cf);
    ActiveMQConnectionFactory y = deserialize(x, ActiveMQConnectionFactory.class);
    checkEquals(cf, y);
    DiscoveryGroupConfiguration dgc = y.getDiscoveryGroupConfiguration();
    Assert.assertEquals(dgc.getName(), "dg1");
    Assert.assertEquals(dgc.getDiscoveryInitialWaitTimeout(), 5000);
    Assert.assertEquals(dgc.getRefreshTimeout(), 5000);
    Assert.assertTrue(dgc.getBroadcastEndpointFactory() instanceof JGroupsPropertiesBroadcastEndpointFactory);
    JGroupsPropertiesBroadcastEndpointFactory befc = (JGroupsPropertiesBroadcastEndpointFactory) dgc.getBroadcastEndpointFactory();
    Assert.assertEquals("myChannel", befc.getChannelName());
    Assert.assertEquals("param=1,param2=2", befc.getProperties());
}
Also used : ActiveMQConnectionFactory(org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory) JGroupsPropertiesBroadcastEndpointFactory(org.apache.activemq.artemis.api.core.JGroupsPropertiesBroadcastEndpointFactory) DiscoveryGroupConfiguration(org.apache.activemq.artemis.api.core.DiscoveryGroupConfiguration) Test(org.junit.Test)

Aggregations

DiscoveryGroupConfiguration (org.apache.activemq.artemis.api.core.DiscoveryGroupConfiguration)61 UDPBroadcastEndpointFactory (org.apache.activemq.artemis.api.core.UDPBroadcastEndpointFactory)32 TransportConfiguration (org.apache.activemq.artemis.api.core.TransportConfiguration)19 ActiveMQConnectionFactory (org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory)19 BroadcastEndpointFactory (org.apache.activemq.artemis.api.core.BroadcastEndpointFactory)18 Test (org.junit.Test)16 ArrayList (java.util.ArrayList)14 JGroupsFileBroadcastEndpointFactory (org.apache.activemq.artemis.api.core.JGroupsFileBroadcastEndpointFactory)12 JGroupsPropertiesBroadcastEndpointFactory (org.apache.activemq.artemis.api.core.JGroupsPropertiesBroadcastEndpointFactory)10 HashMap (java.util.HashMap)9 SimpleString (org.apache.activemq.artemis.api.core.SimpleString)9 URI (java.net.URI)7 BroadcastGroupConfiguration (org.apache.activemq.artemis.api.core.BroadcastGroupConfiguration)7 Map (java.util.Map)6 ChannelBroadcastEndpointFactory (org.apache.activemq.artemis.api.core.ChannelBroadcastEndpointFactory)5 ClusterConnectionConfiguration (org.apache.activemq.artemis.core.config.ClusterConnectionConfiguration)5 HashSet (java.util.HashSet)4 ActiveMQServer (org.apache.activemq.artemis.core.server.ActiveMQServer)4 Before (org.junit.Before)4 Hashtable (java.util.Hashtable)3