I finally understand where the conduit should happen. I was of the impression that the conduit happens in broker B (hub) when subscriptions come from C and D. But that can't happen because there are two bridges (B-C and B-D) and conduit needs to happen within one bridge. The conduit needs to happen in the bridge A-B. The reason it does not happen is that the two ConsumerInfos that come (over one transport connection) have isNetworkSubscription() returning true.
I suspect the networkSubscription is true because the subscription passed through two brokers (B, C or B, D). Moreover, if I skip the embedded broker in C and D then networkSubscription is false and conduit happens within the A-B bridge and there is no message duplication. Moreover, if I don't use the embedded broker in A and use it in C and D, then there is no conduit but also no duplication. So this topology: spoke [broker] -> hub [broker] <- spoke [broker] <- spoke [broker] Leads to message duplication, But those two don't: spoke -> hub [broker] <- spoke [broker] <- spoke [broker] spoke [broker] -> hub [broker] <- spoke <- spoke -- View this message in context: http://activemq.2283324.n4.nabble.com/Duplicate-messages-received-with-ActiveMQ-5-13-2-tp4728627p4729096.html Sent from the ActiveMQ - User mailing list archive at Nabble.com.