git-svn-id: https://svn.apache.org/repos/asf/activemq/trunk@795069 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Bosanac Dejan 2009-07-17 12:43:59 +00:00
parent ed0b08bbd9
commit e5584e6e78
2 changed files with 21 additions and 3 deletions

View File

@ -18,9 +18,11 @@ package org.apache.activemq.network;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import org.apache.activemq.command.BrokerId;
import org.apache.activemq.command.ConsumerId;
import org.apache.activemq.command.ConsumerInfo;
import org.apache.activemq.filter.DestinationFilter;
@ -55,6 +57,18 @@ public class ConduitBridge extends DemandForwardingBridge {
info.setSelector(null);
return doCreateDemandSubscription(info);
}
protected boolean checkPaths(BrokerId[] first, BrokerId[] second) {
if (first == null || second == null)
return true;
if (Arrays.equals(first, second))
return true;
if (first[0].equals(second[0])
&& first[first.length - 1].equals(second[second.length - 1]))
return false;
else
return true;
}
protected boolean addToAlreadyInterestedConsumers(ConsumerInfo info) {
// search through existing subscriptions and see if we have a match
@ -62,6 +76,7 @@ public class ConduitBridge extends DemandForwardingBridge {
DestinationFilter filter = DestinationFilter.parseFilter(info.getDestination());
for (Iterator i = subscriptionMapByLocalId.values().iterator(); i.hasNext();) {
DemandSubscription ds = (DemandSubscription)i.next();
if (filter.matches(ds.getLocalInfo().getDestination())) {
if (LOG.isDebugEnabled()) {
LOG.debug(configuration.getBrokerName() + " matched (add interest) to exsting sub for: " + ds.getRemoteInfo()
@ -69,9 +84,10 @@ public class ConduitBridge extends DemandForwardingBridge {
}
// add the interest in the subscription
// ds.add(ds.getRemoteInfo().getConsumerId());
ds.add(info.getConsumerId());
if (checkPaths(info.getBrokerPath(), ds.getRemoteInfo().getBrokerPath())) {
ds.add(info.getConsumerId());
}
matched = true;
// continue - we want interest to any existing
// DemandSubscriptions
}

View File

@ -553,6 +553,8 @@ public class ThreeBrokerQueueNetworkTest extends JmsMultipleBrokersTestSupport {
public void testDuplicateQueueSubs() throws Exception {
createBroker("BrokerD");
bridgeAllBrokers("default", 3, false);
startAllBrokers();
@ -575,7 +577,7 @@ public class ThreeBrokerQueueNetworkTest extends JmsMultipleBrokersTestSupport {
for (Iterator<BrokerItem> i = brokerList.iterator(); i.hasNext();) {
BrokerService broker = i.next().broker;
if (!brokerName.equals(broker.getBrokerName())) {
verifyConsumerCount(broker, 2, dest);
verifyConsumerCount(broker, 3, dest);
verifyConsumePriority(broker, ConsumerInfo.NORMAL_PRIORITY, dest);
}
}