[
https://issues.apache.org/activemq/browse/AMQ-1509?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=42456#action_42456
]
Howard Orner commented on AMQ-1509:
-----------------------------------
Here's a description of how to fix it. Sorry, I don't have the source
available to me right now to upload it, but it's pretty straight forward. I'm
also doing this from memory so you may have to look at the code a bit and make
sure I'm not missing anything.
The ideal solution would actually apply an 'or' of all selectors before
forwarding message between brokers. However that appears very difficult to do
because of all the classes involved and the fact that the selector is parsed
and cached where its used in other places. So instead, the
org.apache.activemq.network.ConduitBridge and DurableConduitBridge were
modified to change all incoming subscription selectors to null before adding
the subscription to the list of interested consumers. This results in excess
network traffic because all messages get forwarded regardless of whether the
'other' brokers will actually deliver them after they apply individual
selectors. But it works.
In ConduitBridge.addToAlreadyInterestedConsumers() remove the lines that check
for a selector. Then put in a line that sets the selector to null before
doCreateDemandSubscrition is called in createDemandSubcription. Do basically
the same in DurableConduitBridge.
Rob - If this hasn't really been fixed (it appears not to be), I and I'm sure
others would appreciate it if you would incorporate this into the code. It
would be better to take my original suggestion of 'or'ing selectors together,
but that looks like a lot of code changes, so this at least fixes the bug with
just a few lines of code.
> Duplicate topic messages received with network of brokers and selectors
> -----------------------------------------------------------------------
>
> Key: AMQ-1509
> URL: https://issues.apache.org/activemq/browse/AMQ-1509
> Project: ActiveMQ
> Issue Type: Bug
> Components: Broker, Transport
> Affects Versions: 4.1.1
> Reporter: Howard Orner
> Assignee: Rob Davies
> Fix For: 5.1.0
>
>
> If you create a network of two brokers, A and B, one publisher publishing to
> A, and n (where n is > 1) receivers with selectors, each receiver recieves n
> messages for every 1 message sent. The key here is to have a selector. It
> would appear that the conduitSubscriptions flag does not work when using
> selectors. The conduit does not properly reconcile consumers if they have
> selectors. A suggested soltuion would be that ather than process each
> selector independantly, each selector should be or'ed together and if any
> selector results in true then a single message should be sent to the other
> broker.
> In doing research, it would appear that this problem was introduced with bug
> fix AMQ-810. Another user reported it via email back to the assignee of
> AMQ-810 and a short dialog transpired. See
> http://www.mail-archive.com/[EMAIL PROTECTED]/msg05198.html.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.