A couple things to look into-- 1. Set a message expiration. You'll set this when producing the message. 2. gcInactiveDestinations (this will garbage collect a destination if a consumer hasn't come around for X period of time)
http://activemq.apache.org/delete-inactive-destinations.html Hope this helps! On Oct 10, 2013, at 9:51 PM, HellKnight <hellkni...@foxmail.com> wrote: > I am using virtual topics but I've encountered a problem and I could not come > up with a perfect solution , so I decide to post it and I believe you guys > could help me . > > My use case is something like this : > a producer is monitoring a database.Once the database is updated, the > producer will send a message to anyone who is concerned about data updating > in that database, which means every message could be sent to one or more > consumers.However, don't assume that different messages will be sent to same > consumer groups. > I am using virtual topics ,so the producer just sends message to a topic > called "VirtualTopic.AlertTopic". And as I have mentioned , there are > multiple users in my system just like ActiveMQ forum. Every user could run a > client program and login to the system , and the client program includes a > consumer to receive messages. Messages sent to the virtual topic will be > dispatched to every queue, which means every message is actually sent to > every consumer, I have to use a message selector in the consumer side to > filter messages. > I have created a queue named as "Consumer.UserID.VirtualTopic.AlertTopic" > for every system user. However, users will be add and removed dynamicly , > and I should create a queue when adding a user and removing that queue when > removing the user from my system. If add a queue to ActiveMQ broker failed > due to exceptions, network failures etc.Then the user himself will find that > no message is received and he will just tell me ,so that is not a serious > problem. > However, if removing the user queue from activemq broker failed , there > will be some trouble. The user queue still exists, and since every message > sent to a virtual topic will be copied to every consumer queue , messages > will accumulating in the queue that should be removed because the system > user who will consume that queue is removed from system managing database > and will never login again. > I've come up with two solutions: > 1. Delete any user queue that has no active consumer for a long time , say , > 3 months. But this is imperfect, because it's possible that system user > would not login for months in our system , we consider that a normal > behaviour. > > 2. Purge a queue when it reach storage limits. This is good ,after all the > user won't like too many messages appear on his screen after a long offline > time.However, some users may hate this behaviour , they don't wonna miss any > notification messages > > I think there is an ideal way to deal with my problem. The message should > only be dispatched to the queues of its receivers, not all the queues. Is it > possible to do that? > > > > > > -- > View this message in context: > http://activemq.2283324.n4.nabble.com/Is-it-possible-to-dispatch-a-message-in-the-topic-to-only-a-certain-queues-while-using-virtual-topic-tp4672622.html > Sent from the ActiveMQ - User mailing list archive at Nabble.com.