How does a Consumer Priority affect the message group load balancing algorithm? The the message group load balancing algorithm take into consideration the consumer priority?
Thanks, Sanjiv On 6/19/06, James Strachan <[EMAIL PROTECTED]> wrote:
BTW if you configure a small prefetch value - or use a large number of message group values, you'll probably have fairer load balancing... http://incubator.apache.org/activemq/what-is-the-prefetch-limit-for.html On 6/19/06, Hiram Chirino <[EMAIL PROTECTED]> wrote: > On 6/19/06, Sanjiv Jivan <[EMAIL PROTECTED]> wrote: > > On 6/19/06, James Strachan <[EMAIL PROTECTED]> wrote: > > > > > > On 6/17/06, Sanjiv Jivan <[EMAIL PROTECTED]> wrote: > > > > The Message Group functionality of Active MQ 4.0 is really neat. I have > > > a > > > > couple of questions regarding this > > > > > > > > 1. Is this feature fully supported/tested with the P2P discovery style > > > > broker topology? Are they any test cases or samples I can try. I looked > > > for > > > > them in the source but wasn't able to locate them. And when I tried > > > running > > > > such a scenario, I did not see a proper load balancing (even round robin > > > > style) of message groups across available brokers. When messages > > > belonging > > > > to different message groups are sent, oftentimes only one or a small > > > > percentage of running brokers are chosen as recipients. As a result I > > > end up > > > > with some brokers that are overloaded while others are sitting idle. > > > > > > Generally Message Groups only apply to the broker which you are using; > > > there is no global cross-broker load balancing. So its intended when > > > using a traditional client-broker topology rather than a peer based > > > network. > > > > > > Though I'm surprised that you are finding on a single broker it is not > > > load balancing requests across multiple brokers. Are you sure there > > > are suitable consumers on those brokers? > > > > > > Consider a scenario where there are two servers, each of which have an > > embedded broker. What I'm seeing is that when clients send messages using > > Message Groups "MG1", "MG2", "MG3" and "MG4" etc, the messages with these > > different message groups aren't load balanced as expected. For example, MG1 > > and MG2 (and sometimes even MG3) might be received by SERVER1. I was > > expected MG1 to go to SERVER1, MG2 to SERVER2, MG3 to SERVER1, MG4 to > > SERVER2 and so on.. The sample app that I uploaded with issue AMQ-760 > > demonstrates this. Is this the expected behaviour? What is the message group > > based load balancing algorithm used? > > This is a bit complex. So the first message in a group chooses who > the owner for the group is and that algorithm is the same that we use > in normal queue message dispatching. So, it's round robin until a > consumer's pre-fetch is full, and then he gets skipped. The complex > bit is that we don't keep a separate round robin list for message > groups, we are using the same round robin list that's used during > normal message dispatching. And ownership of messages is tied to > order of dispatching. > > So you can a a situations where if I have 3 consumers and then have > the following order of sends: > 1) send message 1, group 1 -> dispatch to consumer 1 first, it obtains > ownership of message and group > 2) send message 2, group 1 -> dispatch to consumer 2 first, but > consumer retains ownership since it's in a group that it owns. > 3) send message 3, without a group -> dispatch to consumer 3 first, > and that consumer gets ownership of the message > 4) send message 1, group2 -> dispatch to consumer 1 first, it obtains > ownership of message and group. > > So.. I guess you can see now who message groups could protentialy get > unbalanced if the right sequence of messages come in. > > > > > > 2. Is there a way to detach a message group affinity to a particular > > broker. > > > > >Just set JMSXGroupSeq to zero on the last message which 'closes' the > > >message group so if another message is sent in the future with the > > >same group ID it will be reassigned to a new consumer. > > > > >message.setIntProperty("JMSXGroupSeq", 0); > > > > This would reset all the affinity of all the message groups, right? This > > does not help with my use case where a message group represents a > > conversation and there can be several "conversations" taking place at the > > same time. I would like the ability to end conversations on a per message > > group basis and not globally. For example messages from MG1 might be > > directed to SERVER1 and MG2 to SERVER2. After a sequence of operations, I > > would like to end the conversation for MG1 but do not want to end the > > conversation for MG2 and this might result in some MG2 messages going to > > SERVER1 which has no knowledge of MG2's prior conversation. > > > > > > Thanks, > > Sanjiv > > > > > > > -- > Regards, > Hiram > > Blog: http://hiramchirino.com > -- James ------- http://radio.weblogs.com/0112098/
