Search in sources :

Example 41 with Topic

use of org.fusesource.mqtt.client.Topic in project activemq-artemis by apache.

the class MqttClusterWildcardTest method loadBalanceRequests.

@Test
public void loadBalanceRequests() throws Exception {
    final String TOPIC = "test/+/some/#";
    WildcardConfiguration wildcardConfiguration = new WildcardConfiguration();
    wildcardConfiguration.setAnyWords('#');
    wildcardConfiguration.setDelimiter('/');
    wildcardConfiguration.setRoutingEnabled(true);
    wildcardConfiguration.setSingleWord('+');
    setupServer(0, false, isNetty());
    servers[0].getConfiguration().setWildCardConfiguration(wildcardConfiguration);
    setupServer(1, false, isNetty());
    servers[1].getConfiguration().setWildCardConfiguration(wildcardConfiguration);
    setupClusterConnection("cluster0", "", MessageLoadBalancingType.ON_DEMAND, 1, isNetty(), 0, 1);
    setupClusterConnection("cluster1", "", MessageLoadBalancingType.ON_DEMAND, 1, isNetty(), 1, 0);
    startServers(0, 1);
    BlockingConnection connection1 = null;
    BlockingConnection connection2 = null;
    try {
        connection1 = retrieveMQTTConnection("tcp://localhost:61616");
        connection2 = retrieveMQTTConnection("tcp://localhost:61617");
        // Subscribe to topics
        Topic[] topics = { new Topic(TOPIC, QoS.AT_MOST_ONCE) };
        connection1.subscribe(topics);
        connection2.subscribe(topics);
        waitForBindings(0, TOPIC, 1, 1, true);
        waitForBindings(1, TOPIC, 1, 1, true);
        waitForBindings(0, TOPIC, 1, 1, false);
        waitForBindings(1, TOPIC, 1, 1, false);
        // Publish Messages
        String payload1 = "This is message 1";
        String payload2 = "This is message 2";
        String payload3 = "This is message 3";
        connection1.publish("test/1/some/la", payload1.getBytes(), QoS.AT_LEAST_ONCE, false);
        connection1.publish("test/1/some/la", payload2.getBytes(), QoS.AT_MOST_ONCE, false);
        connection1.publish("test/1/some/la", payload3.getBytes(), QoS.AT_MOST_ONCE, false);
        Message message1 = connection1.receive(5, TimeUnit.SECONDS);
        Message message2 = connection1.receive(5, TimeUnit.SECONDS);
        Message message3 = connection1.receive(5, TimeUnit.SECONDS);
        Message message4 = connection2.receive(5, TimeUnit.SECONDS);
        Message message5 = connection2.receive(5, TimeUnit.SECONDS);
        Message message6 = connection2.receive(5, TimeUnit.SECONDS);
        assertEquals(payload1, new String(message1.getPayload()));
        assertEquals(payload2, new String(message2.getPayload()));
        assertEquals(payload3, new String(message3.getPayload()));
        assertEquals(payload1, new String(message4.getPayload()));
        assertEquals(payload2, new String(message5.getPayload()));
        assertEquals(payload3, new String(message6.getPayload()));
    } finally {
        String[] topics = new String[] { TOPIC };
        if (connection1 != null) {
            connection1.unsubscribe(topics);
            connection1.disconnect();
        }
        if (connection2 != null) {
            connection2.unsubscribe(topics);
            connection2.disconnect();
        }
    }
}
Also used : Message(org.fusesource.mqtt.client.Message) WildcardConfiguration(org.apache.activemq.artemis.core.config.WildcardConfiguration) BlockingConnection(org.fusesource.mqtt.client.BlockingConnection) Topic(org.fusesource.mqtt.client.Topic) Test(org.junit.Test)

Example 42 with Topic

use of org.fusesource.mqtt.client.Topic in project activemq-artemis by apache.

the class MqttClusterWildcardTest method wildcardsWithBroker1Disconnected.

@Test
public void wildcardsWithBroker1Disconnected() throws Exception {
    BlockingConnection connection1 = null;
    BlockingConnection connection2 = null;
    BlockingConnection connection3 = null;
    final String TOPIC = "test/+/some/#";
    try {
        WildcardConfiguration wildcardConfiguration = new WildcardConfiguration();
        wildcardConfiguration.setAnyWords('#');
        wildcardConfiguration.setDelimiter('/');
        wildcardConfiguration.setRoutingEnabled(true);
        wildcardConfiguration.setSingleWord('+');
        setupServer(0, false, isNetty());
        servers[0].getConfiguration().setWildCardConfiguration(wildcardConfiguration);
        setupClusterConnection("cluster0", "", MessageLoadBalancingType.ON_DEMAND, 1, isNetty(), 0, 1);
        startServers(0);
        connection1 = retrieveMQTTConnection("tcp://localhost:61616");
        // Subscribe to topics
        Topic[] topics = { new Topic(TOPIC, QoS.AT_MOST_ONCE) };
        connection1.subscribe(topics);
        waitForBindings(0, TOPIC, 1, 1, true);
        waitForBindings(0, TOPIC, 0, 0, false);
        // Publish Messages
        String payload1 = "This is message 1";
        String payload2 = "This is message 2";
        String payload3 = "This is message 3";
        connection1.publish("test/1/some/la", payload1.getBytes(), QoS.AT_LEAST_ONCE, false);
        connection1.publish("test/1/some/la", payload2.getBytes(), QoS.AT_MOST_ONCE, false);
        connection1.publish("test/1/some/la", payload3.getBytes(), QoS.AT_MOST_ONCE, false);
        Message message1 = connection1.receive(5, TimeUnit.SECONDS);
        setupServer(1, false, isNetty());
        servers[1].getConfiguration().setWildCardConfiguration(wildcardConfiguration);
        setupClusterConnection("cluster1", "", MessageLoadBalancingType.ON_DEMAND, 1, isNetty(), 1, 0);
        startServers(1);
        connection2 = retrieveMQTTConnection("tcp://localhost:61617");
        connection3 = retrieveMQTTConnection("tcp://localhost:61617");
        connection2.subscribe(topics);
        connection3.subscribe(new Topic[] { new Topic("teste/1/some/1", QoS.AT_MOST_ONCE) });
        waitForBindings(1, TOPIC, 1, 1, false);
        waitForBindings(1, TOPIC, 1, 1, true);
        waitForBindings(0, TOPIC, 1, 1, true);
        connection1.publish("test/1/some/la", payload1.getBytes(), QoS.AT_LEAST_ONCE, false);
        connection1.publish("test/1/some/la", payload2.getBytes(), QoS.AT_MOST_ONCE, false);
        connection1.publish("test/1/some/la", payload3.getBytes(), QoS.AT_MOST_ONCE, false);
        Message message2 = connection1.receive(5, TimeUnit.SECONDS);
        Message message3 = connection1.receive(5, TimeUnit.SECONDS);
        Message message4 = connection2.receive(5, TimeUnit.SECONDS);
        Message message5 = connection2.receive(5, TimeUnit.SECONDS);
        Message message6 = connection2.receive(5, TimeUnit.SECONDS);
        assertEquals(payload1, new String(message1.getPayload()));
        assertEquals(payload2, new String(message2.getPayload()));
        assertEquals(payload3, new String(message3.getPayload()));
        assertEquals(payload1, new String(message4.getPayload()));
        assertEquals(payload2, new String(message5.getPayload()));
        assertEquals(payload3, new String(message6.getPayload()));
    } finally {
        String[] topics = new String[] { TOPIC };
        if (connection1 != null) {
            connection1.unsubscribe(topics);
            connection1.disconnect();
        }
        if (connection2 != null) {
            connection2.unsubscribe(topics);
            connection2.disconnect();
        }
        if (connection3 != null) {
            connection3.unsubscribe(new String[] { "teste/1/some/1" });
            connection3.disconnect();
        }
    }
}
Also used : Message(org.fusesource.mqtt.client.Message) WildcardConfiguration(org.apache.activemq.artemis.core.config.WildcardConfiguration) BlockingConnection(org.fusesource.mqtt.client.BlockingConnection) Topic(org.fusesource.mqtt.client.Topic) Test(org.junit.Test)

Example 43 with Topic

use of org.fusesource.mqtt.client.Topic in project activemq-artemis by apache.

the class MqttClusterRemoteSubscribeTest method unsubscribeRemoteQueueMultipleSubscriptions.

@Test
public void unsubscribeRemoteQueueMultipleSubscriptions() throws Exception {
    final String TOPIC = "test/1/some/la";
    final String TOPIC2 = "sample";
    setupServers(TOPIC);
    startServers(0, 1);
    BlockingConnection connection1 = null;
    BlockingConnection connection2 = null;
    try {
        connection1 = retrieveMQTTConnection("tcp://localhost:61616");
        connection2 = retrieveMQTTConnection("tcp://localhost:61617");
        // Subscribe to topics
        connection1.subscribe(new Topic[] { new Topic(TOPIC, QoS.AT_MOST_ONCE) });
        connection2.subscribe(new Topic[] { new Topic(TOPIC, QoS.AT_MOST_ONCE), new Topic(TOPIC2, QoS.AT_MOST_ONCE) });
        waitForBindings(0, TOPIC, 1, 1, true);
        waitForBindings(1, TOPIC, 1, 1, true);
        waitForBindings(0, TOPIC, 1, 1, false);
        waitForBindings(1, TOPIC, 1, 1, false);
        // Publish Messages
        String payload1 = "This is message 1";
        String payload2 = "This is message 2";
        String payload3 = "This is message 3";
        String payload4 = "This is message 4";
        connection1.publish(TOPIC, payload1.getBytes(), QoS.AT_LEAST_ONCE, false);
        connection1.publish(TOPIC, payload2.getBytes(), QoS.AT_MOST_ONCE, false);
        connection1.publish(TOPIC, payload3.getBytes(), QoS.AT_MOST_ONCE, false);
        connection1.publish(TOPIC2, payload4.getBytes(), QoS.AT_MOST_ONCE, false);
        Message message1 = connection1.receive(5, TimeUnit.SECONDS);
        message1.ack();
        Message message2 = connection2.receive(5, TimeUnit.SECONDS);
        message2.ack();
        Message message3 = connection1.receive(5, TimeUnit.SECONDS);
        message3.ack();
        Message message4 = connection2.receive(5, TimeUnit.SECONDS);
        message4.ack();
        assertEquals(payload1, new String(message1.getPayload()));
        assertEquals(payload2, new String(message2.getPayload()));
        assertEquals(payload3, new String(message3.getPayload()));
        assertEquals(payload4, new String(message4.getPayload()));
        connection2.unsubscribe(new String[] { TOPIC });
        connection1.publish(TOPIC, payload1.getBytes(), QoS.AT_LEAST_ONCE, false);
        connection1.publish(TOPIC, payload2.getBytes(), QoS.AT_MOST_ONCE, false);
        connection1.publish(TOPIC, payload3.getBytes(), QoS.AT_MOST_ONCE, false);
        connection1.publish(TOPIC2, payload4.getBytes(), QoS.AT_MOST_ONCE, false);
        Message message11 = connection1.receive(5, TimeUnit.SECONDS);
        message11.ack();
        Message message21 = connection1.receive(5, TimeUnit.SECONDS);
        message21.ack();
        Message message31 = connection1.receive(5, TimeUnit.SECONDS);
        message31.ack();
        Message message41 = connection2.receive(5, TimeUnit.SECONDS);
        message41.ack();
        String message11String = new String(message31.getPayload());
        String message21String = new String(message21.getPayload());
        String message31String = new String(message11.getPayload());
        assertTrue(payload1.equals(message11String) || payload1.equals(message21String) || payload1.equals(message31String));
        assertTrue(payload2.equals(message11String) || payload2.equals(message21String) || payload2.equals(message31String));
        assertTrue(payload3.equals(message11String) || payload3.equals(message21String) || payload3.equals(message31String));
        assertEquals(payload4, new String(message41.getPayload()));
    } finally {
        if (connection1 != null) {
            connection1.unsubscribe(new String[] { TOPIC });
            connection1.disconnect();
        }
        if (connection2 != null) {
            connection2.unsubscribe(new String[] { TOPIC, TOPIC2 });
            connection2.disconnect();
        }
    }
}
Also used : Message(org.fusesource.mqtt.client.Message) BlockingConnection(org.fusesource.mqtt.client.BlockingConnection) Topic(org.fusesource.mqtt.client.Topic) Test(org.junit.Test)

Example 44 with Topic

use of org.fusesource.mqtt.client.Topic in project activemq-artemis by apache.

the class MqttClusterRemoteSubscribeTest method unsubscribeRemoteQueue.

@Test
public void unsubscribeRemoteQueue() throws Exception {
    final String TOPIC = "test/1/some/la";
    setupServers(TOPIC);
    startServers(0, 1);
    BlockingConnection connection1 = null;
    BlockingConnection connection2 = null;
    try {
        connection1 = retrieveMQTTConnection("tcp://localhost:61616");
        connection2 = retrieveMQTTConnection("tcp://localhost:61617");
        // Subscribe to topics
        Topic[] topics = { new Topic(TOPIC, QoS.AT_MOST_ONCE) };
        connection1.subscribe(topics);
        connection2.subscribe(topics);
        waitForBindings(0, TOPIC, 1, 1, true);
        waitForBindings(1, TOPIC, 1, 1, true);
        waitForBindings(0, TOPIC, 1, 1, false);
        waitForBindings(1, TOPIC, 1, 1, false);
        // Publish Messages
        String payload1 = "This is message 1";
        String payload2 = "This is message 2";
        String payload3 = "This is message 3";
        connection1.publish(TOPIC, payload1.getBytes(), QoS.AT_LEAST_ONCE, false);
        connection1.publish(TOPIC, payload2.getBytes(), QoS.AT_MOST_ONCE, false);
        connection1.publish(TOPIC, payload3.getBytes(), QoS.AT_MOST_ONCE, false);
        Message message1 = connection1.receive(5, TimeUnit.SECONDS);
        message1.ack();
        Message message2 = connection2.receive(5, TimeUnit.SECONDS);
        message2.ack();
        Message message3 = connection1.receive(5, TimeUnit.SECONDS);
        message3.ack();
        assertEquals(payload1, new String(message1.getPayload()));
        assertEquals(payload2, new String(message2.getPayload()));
        assertEquals(payload3, new String(message3.getPayload()));
        connection2.unsubscribe(new String[] { TOPIC });
        connection1.publish(TOPIC, payload1.getBytes(), QoS.AT_LEAST_ONCE, false);
        connection1.publish(TOPIC, payload2.getBytes(), QoS.AT_MOST_ONCE, false);
        connection1.publish(TOPIC, payload3.getBytes(), QoS.AT_MOST_ONCE, false);
        Message message11 = connection1.receive(5, TimeUnit.SECONDS);
        message11.ack();
        Message message21 = connection1.receive(5, TimeUnit.SECONDS);
        message21.ack();
        Message message31 = connection1.receive(5, TimeUnit.SECONDS);
        message31.ack();
        String message11String = new String(message11.getPayload());
        String message21String = new String(message21.getPayload());
        String message31String = new String(message31.getPayload());
        assertTrue(payload1.equals(message11String) || payload1.equals(message21String) || payload1.equals(message31String));
        assertTrue(payload2.equals(message11String) || payload2.equals(message21String) || payload2.equals(message31String));
        assertTrue(payload3.equals(message11String) || payload3.equals(message21String) || payload3.equals(message31String));
    } finally {
        String[] topics = new String[] { TOPIC };
        if (connection1 != null) {
            connection1.unsubscribe(topics);
            connection1.disconnect();
        }
        if (connection2 != null) {
            connection2.unsubscribe(topics);
            connection2.disconnect();
        }
    }
}
Also used : Message(org.fusesource.mqtt.client.Message) BlockingConnection(org.fusesource.mqtt.client.BlockingConnection) Topic(org.fusesource.mqtt.client.Topic) Test(org.junit.Test)

Example 45 with Topic

use of org.fusesource.mqtt.client.Topic in project activemq-artemis by apache.

the class MqttClusterRemoteSubscribeTest method unsubscribeRemoteQueueWildCard.

@Test
public void unsubscribeRemoteQueueWildCard() throws Exception {
    final String TOPIC = "test/+/some/#";
    setupServers(TOPIC);
    startServers(0, 1);
    BlockingConnection connection1 = null;
    BlockingConnection connection2 = null;
    try {
        connection1 = retrieveMQTTConnection("tcp://localhost:61616");
        connection2 = retrieveMQTTConnection("tcp://localhost:61617");
        // Subscribe to topics
        Topic[] topics = { new Topic(TOPIC, QoS.AT_MOST_ONCE) };
        connection1.subscribe(topics);
        connection2.subscribe(topics);
        waitForBindings(0, TOPIC, 1, 1, true);
        waitForBindings(1, TOPIC, 1, 1, true);
        waitForBindings(0, TOPIC, 1, 1, false);
        waitForBindings(1, TOPIC, 1, 1, false);
        // Publish Messages
        String payload1 = "This is message 1";
        String payload2 = "This is message 2";
        String payload3 = "This is message 3";
        connection1.publish("test/1/some/la", payload1.getBytes(), QoS.AT_LEAST_ONCE, false);
        connection1.publish("test/1/some/la", payload2.getBytes(), QoS.AT_MOST_ONCE, false);
        connection1.publish("test/1/some/la", payload3.getBytes(), QoS.AT_MOST_ONCE, false);
        Message message1 = connection1.receive(5, TimeUnit.SECONDS);
        message1.ack();
        Message message2 = connection2.receive(5, TimeUnit.SECONDS);
        message2.ack();
        Message message3 = connection1.receive(5, TimeUnit.SECONDS);
        message3.ack();
        assertEquals(payload1, new String(message1.getPayload()));
        assertEquals(payload2, new String(message2.getPayload()));
        assertEquals(payload3, new String(message3.getPayload()));
        connection2.unsubscribe(new String[] { TOPIC });
        connection1.publish("test/1/some/la", payload1.getBytes(), QoS.AT_LEAST_ONCE, false);
        connection1.publish("test/1/some/la", payload2.getBytes(), QoS.AT_MOST_ONCE, false);
        connection1.publish("test/1/some/la", payload3.getBytes(), QoS.AT_MOST_ONCE, false);
        Message message11 = connection1.receive(5, TimeUnit.SECONDS);
        message11.ack();
        Message message21 = connection1.receive(5, TimeUnit.SECONDS);
        message21.ack();
        Message message31 = connection1.receive(5, TimeUnit.SECONDS);
        message31.ack();
        String message11String = new String(message11.getPayload());
        String message21String = new String(message21.getPayload());
        String message31String = new String(message31.getPayload());
        assertTrue(payload1.equals(message11String) || payload1.equals(message21String) || payload1.equals(message31String));
        assertTrue(payload2.equals(message11String) || payload2.equals(message21String) || payload2.equals(message31String));
        assertTrue(payload3.equals(message11String) || payload3.equals(message21String) || payload3.equals(message31String));
    } finally {
        String[] topics = new String[] { TOPIC };
        if (connection1 != null) {
            connection1.unsubscribe(topics);
            connection1.disconnect();
        }
        if (connection2 != null) {
            connection2.unsubscribe(topics);
            connection2.disconnect();
        }
    }
}
Also used : Message(org.fusesource.mqtt.client.Message) BlockingConnection(org.fusesource.mqtt.client.BlockingConnection) Topic(org.fusesource.mqtt.client.Topic) Test(org.junit.Test)

Aggregations

Topic (org.fusesource.mqtt.client.Topic)52 BlockingConnection (org.fusesource.mqtt.client.BlockingConnection)48 Test (org.junit.Test)41 MQTT (org.fusesource.mqtt.client.MQTT)39 Message (org.fusesource.mqtt.client.Message)36 SimpleString (org.apache.activemq.artemis.api.core.SimpleString)21 AmqpMessage (org.apache.activemq.transport.amqp.client.AmqpMessage)18 BytesMessage (javax.jms.BytesMessage)17 Tracer (org.fusesource.mqtt.client.Tracer)6 MQTTFrame (org.fusesource.mqtt.codec.MQTTFrame)6 ProtocolException (java.net.ProtocolException)5 QoS (org.fusesource.mqtt.client.QoS)4 PUBLISH (org.fusesource.mqtt.codec.PUBLISH)4 Ignore (org.junit.Ignore)4 ArrayList (java.util.ArrayList)3 CountDownLatch (java.util.concurrent.CountDownLatch)3 AddressInfo (org.apache.activemq.artemis.core.server.impl.AddressInfo)3 URI (java.net.URI)2 ConcurrentHashMap (java.util.concurrent.ConcurrentHashMap)2 WildcardConfiguration (org.apache.activemq.artemis.core.config.WildcardConfiguration)2