[
https://issues.apache.org/jira/browse/AMQ-5382?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14197477#comment-14197477
]
AR commented on AMQ-5382:
-------------------------
What requirements in MQTT are you referring to specifically that require
retroactive subs? Pubs with retain=1 ?
> MQTT messages published after unsubscribe on a durable topic are received
> -------------------------------------------------------------------------
>
> Key: AMQ-5382
> URL: https://issues.apache.org/jira/browse/AMQ-5382
> Project: ActiveMQ
> Issue Type: Bug
> Components: MQTT
> Affects Versions: 5.11.0
> Reporter: AR
> Labels: MQTT
>
> Test procedure:
> Create a durable subscription to topic "durableunsubtest" with clientid
> "durableUnsub".
> Publish a message with client2 to topic "durableunsubtest". Make sure
> "retain" flag is not set.
> Verify that the message is received (confirming creation of durable
> subscription).
> Unsubscribe from topic "durableunsubtest" from clientid "durableUnsub".
> Disconnect client.
> Publish another message with client2. Make sure "retain" flag is not set.
> Connect "durableUnsub" and subscribe to the topic again.
> Verify that no messages are received.
> JUnit Test Case code:
> {noformat}
> /*
> * Test unsubscribe on a durable subscription topic
> */
> @Test(timeout = 60 * 1000)
> public void testDurableUnsubscribe() throws Exception {
> // Create connection1
> final String clientId = "durableUnsub";
> MQTT mqtt1 = createMQTTConnection(clientId, false);
> mqtt1.setKeepAlive((short) 60);
> final BlockingConnection connection1 = mqtt1.blockingConnection();
> connection1.connect();
>
> // create a durable subscription for client "durableUnsub"
> final String TOPICNAME = "durableunsubtest";
> final String payload = "durable unsub test";
> Topic[] topic = { new Topic(TOPICNAME, QoS.AT_LEAST_ONCE) };
> connection1.subscribe(topic);
> // Create connection2 and publish a message on the topic
> MQTT mqtt2 = createMQTTConnection(null, true);
> mqtt2.setKeepAlive((short) 60);
> final BlockingConnection connection2 = mqtt2.blockingConnection();
> connection2.connect();
> connection2.publish(TOPICNAME, payload.getBytes(), QoS.EXACTLY_ONCE,
> false);
> // Verify that the durable subscription was created by receiving the
> message
> // on connection1
> Message message = connection1.receive(10, TimeUnit.SECONDS);
> assertNotNull(message);
> message.ack();
> assertEquals("Unexpected String received", payload, new
> String(message.getPayload()));
> // Unsubscribe the topic on connection1
> connection1.unsubscribe(new String[]{TOPICNAME});
> // Disconnect connection1
> connection1.disconnect();
>
> // Publish another message on connection2 for the same topic
> MQTT mqtt2a = createMQTTConnection(null, true);
> mqtt2a.setKeepAlive((short) 60);
> final BlockingConnection connection2a = mqtt2a.blockingConnection();
> connection2a.connect();
> connection2a.publish(TOPICNAME, payload.getBytes(), QoS.EXACTLY_ONCE,
> false);
>
> // Create connection3 with the same clientid "durableUnsub"
> // and subscribe to the topic
> MQTT mqtt3 = createMQTTConnection(clientId, false);
> mqtt3.setKeepAlive((short) 60);
> BlockingConnection connection3 = mqtt3.blockingConnection();
> connection3.connect();
> connection3.subscribe(topic);
> message = connection3.receive(10, TimeUnit.SECONDS);
> // Since we have unsubscribed before the publish, we should not
> receive
> // any message (retain flag was also not set during publish)
> assertNull(message);
> }
> {noformat}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)