activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Rob Davies <rajdav...@gmail.com>
Subject Re: Why is MemoryMessageStore a map and not a queue… Re-implementing with a PriorityBlockingQueue
Date Wed, 01 Apr 2015 20:24:42 GMT
Its historical - probably at least 10 years old in origin. Only warning I would give is that
ConcurrentHashMap can be slow and a memory hog for lots of inserts deletes - synchronisation
around a HashMap may perform better - would be worth validating that though 



> On 1 Apr 2015, at 20:57, Kevin Burton <burton@spinn3r.com> wrote:
> 
> I’m curious why MemoryMessageStore is backed by a LinkedHashMap and not a
> queue data structure.
> 
> Does anyone know?  It might be just do to the age.
> 
> The one thing that could break it is:
> 
>    public void updateMessage(Message message)
> 
> .. which updates the message by ID.  But make we could keep two indexes, a
> queue and a concurrent map.  but I think updateMessage is only called for
> persistent messages.
> 
> I’m asking because I’m investigating implementing JMS priority in the
> memory store.  If it was backed by a priority queue (lower case, not
> necessarily proposing the PriorityQueue but more of
> java.util.concurrent.PriorityBlockingQueue or maybe even something from
> disruptor.)
> 
> It would be trivial to implement JMS priority at that point I think.
> Messages would just be returned based on their JMS priority then FIFO order.
> 
> Also, this class uses a lot of synchronization which would be removed if it
> was refactored this way.
> 
> I’m still experimenting with this idea.  I still have to fix the 5.11.x
> regressions we’ve found.
> 
> thoughts?
> 
> Kevin
> 
> -- 
> 
> Founder/CEO Spinn3r.com
> Location: *San Francisco, CA*
> blog: http://burtonator.wordpress.com
> … or check out my Google+ profile
> <https://plus.google.com/102718274791889610666/posts>
> <http://spinn3r.com>

Mime
View raw message