[
https://issues.apache.org/jira/browse/AMQ-8247?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Rob Ambalu closed AMQ-8247.
---------------------------
Resolution: Invalid
moved to AMQCPP Project
> Consumer performance issues with many topics
> --------------------------------------------
>
> Key: AMQ-8247
> URL: https://issues.apache.org/jira/browse/AMQ-8247
> Project: ActiveMQ
> Issue Type: Improvement
> Reporter: Rob Ambalu
> Priority: Major
> Attachments: diff.txt
>
>
> activemq-cpp has a performance issue when subscribing to many topics. When I
> try to subscribe to market data by ticker, with 1 topic per ticker, it starts
> to bog down as I add more Consumers. Digging into it, I see the issue is in
> how consumers are managed in ActiveMQSessionKernel.cpp. It maintains all
> consumers in a linked list, and then for *every message* that is received, it
> does a linear O(n) scan to find the matching consumer to call back into.
> My application has close to 10k topics subscribed, every message does up to
> 10k scan. This is completely unusable.
> The fix is simple, maintain consumers by HashMap not a LinkedList. I dont
> have access to create a pull-request in github, but I already have the diffs
> and will attach it to this PR.
>
> Some notes:
> * adding an identical consumer will silently fail, but this is the same
> behavior as it is today ( duplicates will add to the LinkedList of consumers,
> but upon lookup only the first one will be returned... )
> * Added slight optim to ConsumerId::getHashCode() because it was too
> unnecessarily inefficient to bare
> * I removed the ActiveMQSessionKernel::deliverAcks() because its not used
> anywhere, and it does a full iteration so I want to make sure it never gets
> used
> * I tested this on my use case and my application can easily keep up without
> issue now
--
This message was sent by Atlassian Jira
(v8.3.4#803005)