You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@activemq.apache.org by brock samson <br...@hotmail.com> on 2022/09/23 19:48:42 UTC

sequential requests in a cluster

I am running AMQ 5.15.x in a master/slave cluster setup with several queues. while some queues have multiple consumers, others have only a single consumer since their messages must be processed in the exact order they arrived. using the "exclusive consumer" feature works fine with respect to maintaining the order. the problem with that approach is all sequential messages always being processed by the master, while the slaves are sitting around doing nothing. grouping messages into groups does not seem solve this for me, as all group are also being sent to the master. so is there a way to spread the load among all cluster members while maintaining the processing sequence. perhaps "assigning" each message group to a different cluster member? thank you for your time!

Re: sequential requests in a cluster

Posted by brock samson <br...@hotmail.com>.
after playing around more with the JMSXGroupID values, and noticed that various values seem to send requests to various members of the cluster. as mentioned in my previous post, i was looking for some random approach where AMQ would distribute the processing of message groups among all cluster members the same way it does with non-sequential message. while this does not accomplish that, it is definitely better than having the master handling the full load of all message groups while the slave instances are just twiddling their thumbs.

what i would like to know now is whether there is a doc that explains this cluster-based behavior further. the only ones i have come across talk about the relationship between message groups and consumers. any help would be greatly appreciated. thanks!
________________________________
From: brock samson <br...@hotmail.com>
Sent: Friday, September 23, 2022 11:47 PM
To: users@activemq.apache.org <us...@activemq.apache.org>
Subject: Re: sequential requests in a cluster

thank you for the reply, Matt!

interesting that you mentioned the sorting of the messages by queues, because that is exactly what i am doing. sorry, i should have been more clear in my initial post. each message sequence is grouped and then posted to its own single queue, and no sequence spans more than one queue at any time.

GroupSeq1 --> Queue1
GroupSeq2 --> Queue2
...
GroupSeqN --> QueueN

when i send async (non-sequential) messages to a queue with multiple consumers, all members of the cluster get in on the action, not just the master. so i hoped for the same behavior when sending in several message groups, yet only the master ends up processing all the groups.

thanks!
________________________________
From: Matt Pavlovich <ma...@gmail.com>
Sent: Friday, September 23, 2022 5:12 PM
To: users@activemq.apache.org <us...@activemq.apache.org>
Subject: Re: sequential requests in a cluster

Hello Brock,

A ’slave’ broker in the technical sense does not have active transport connectors, so clients are not able to process messages. The slave is used as a standby instance during a failure scenario for the master broker.

Perhaps you have a different setup? Keep in mind— maintaining message order across multiple brokers to end clients is virtual impossible to guarantee.

If you need strict message ordering AND distribution across multiple brokers (aka partitioning) you may want to considert performing some sort of filtering or sorting of the message groups into separate queues.

Thanks,
Matt Pavlovich

> On Sep 23, 2022, at 2:48 PM, brock samson <br...@hotmail.com> wrote:
>
> I am running AMQ 5.15.x in a master/slave cluster setup with several queues. while some queues have multiple consumers, others have only a single consumer since their messages must be processed in the exact order they arrived. using the "exclusive consumer" feature works fine with respect to maintaining the order. the problem with that approach is all sequential messages always being processed by the master, while the slaves are sitting around doing nothing. grouping messages into groups does not seem solve this for me, as all group are also being sent to the master. so is there a way to spread the load among all cluster members while maintaining the processing sequence. perhaps "assigning" each message group to a different cluster member? thank you for your time!


Re: sequential requests in a cluster

Posted by brock samson <br...@hotmail.com>.
thank you for the reply, Matt!

interesting that you mentioned the sorting of the messages by queues, because that is exactly what i am doing. sorry, i should have been more clear in my initial post. each message sequence is grouped and then posted to its own single queue, and no sequence spans more than one queue at any time.

GroupSeq1 --> Queue1
GroupSeq2 --> Queue2
...
GroupSeqN --> QueueN

when i send async (non-sequential) messages to a queue with multiple consumers, all members of the cluster get in on the action, not just the master. so i hoped for the same behavior when sending in several message groups, yet only the master ends up processing all the groups.

thanks!
________________________________
From: Matt Pavlovich <ma...@gmail.com>
Sent: Friday, September 23, 2022 5:12 PM
To: users@activemq.apache.org <us...@activemq.apache.org>
Subject: Re: sequential requests in a cluster

Hello Brock,

A ’slave’ broker in the technical sense does not have active transport connectors, so clients are not able to process messages. The slave is used as a standby instance during a failure scenario for the master broker.

Perhaps you have a different setup? Keep in mind— maintaining message order across multiple brokers to end clients is virtual impossible to guarantee.

If you need strict message ordering AND distribution across multiple brokers (aka partitioning) you may want to considert performing some sort of filtering or sorting of the message groups into separate queues.

Thanks,
Matt Pavlovich

> On Sep 23, 2022, at 2:48 PM, brock samson <br...@hotmail.com> wrote:
>
> I am running AMQ 5.15.x in a master/slave cluster setup with several queues. while some queues have multiple consumers, others have only a single consumer since their messages must be processed in the exact order they arrived. using the "exclusive consumer" feature works fine with respect to maintaining the order. the problem with that approach is all sequential messages always being processed by the master, while the slaves are sitting around doing nothing. grouping messages into groups does not seem solve this for me, as all group are also being sent to the master. so is there a way to spread the load among all cluster members while maintaining the processing sequence. perhaps "assigning" each message group to a different cluster member? thank you for your time!


Re: sequential requests in a cluster

Posted by Matt Pavlovich <ma...@gmail.com>.
Hello Brock,

A ’slave’ broker in the technical sense does not have active transport connectors, so clients are not able to process messages. The slave is used as a standby instance during a failure scenario for the master broker.

Perhaps you have a different setup? Keep in mind— maintaining message order across multiple brokers to end clients is virtual impossible to guarantee. 

If you need strict message ordering AND distribution across multiple brokers (aka partitioning) you may want to considert performing some sort of filtering or sorting of the message groups into separate queues.

Thanks,
Matt Pavlovich

> On Sep 23, 2022, at 2:48 PM, brock samson <br...@hotmail.com> wrote:
> 
> I am running AMQ 5.15.x in a master/slave cluster setup with several queues. while some queues have multiple consumers, others have only a single consumer since their messages must be processed in the exact order they arrived. using the "exclusive consumer" feature works fine with respect to maintaining the order. the problem with that approach is all sequential messages always being processed by the master, while the slaves are sitting around doing nothing. grouping messages into groups does not seem solve this for me, as all group are also being sent to the master. so is there a way to spread the load among all cluster members while maintaining the processing sequence. perhaps "assigning" each message group to a different cluster member? thank you for your time!


Re: sequential requests in a cluster

Posted by Justin Bertram <jb...@apache.org>.
My main question would be, do you really *need* to spread the load among
multiple brokers? If you've got exclusive consumers on a lot of different
queues then you're already drastically limiting performance since you're
eliminating concurrent message consumption from all those queues. Is a
single broker not able to handle the load even with the exclusive
consumers? What numbers are you aiming at and what numbers are you actually
getting?


Justin

On Fri, Sep 23, 2022 at 2:49 PM brock samson <br...@hotmail.com>
wrote:

> I am running AMQ 5.15.x in a master/slave cluster setup with several
> queues. while some queues have multiple consumers, others have only a
> single consumer since their messages must be processed in the exact order
> they arrived. using the "exclusive consumer" feature works fine with
> respect to maintaining the order. the problem with that approach is all
> sequential messages always being processed by the master, while the slaves
> are sitting around doing nothing. grouping messages into groups does not
> seem solve this for me, as all group are also being sent to the master. so
> is there a way to spread the load among all cluster members while
> maintaining the processing sequence. perhaps "assigning" each message group
> to a different cluster member? thank you for your time!
>