Hi,

we are planning to adopt Artemis in our software solution as substitute of the 
current message broker (RabbitMQ).
We are especially interested in 2 features it offers:

  *
message grouping
  *
automatic rebalancing of message groups.

We need message grouping because our consumers must ensure that certain groups 
of messages are processed serially.
We need rebalancing because we deploy our solution in an elastic environment 
and we want to be able to scale the application horizontally.

Ideally, we would like to use a cluster of Artemis brokers for load balancing, 
so we read the clustered grouping chapter of the documentation 
(https://activemq.apache.org/components/artemis/documentation/latest/message-grouping.html#clustered-grouping)
 and we are aware of the potential pitfalls in this choice.

To simplify let's say we have a single address to which we publish messages 
(each message with groupId set), and multiple shared durable subcriptions that 
load balance consumption of those messages.
Given that we will scale the application horizontally, we can assume that each 
node of the Artemis cluster will eventually have a queue bound to that address 
with some groupIds sticked to it.
We know that we must make sure that each of these queues must have at least one 
consumer attached, or we might find ourselves in a situation where a message is 
routed (because of message grouping) to a queue that has no consumers attached, 
and hence that message will never get a chance to be consumed.

We can make sure (properly tuning autoscaling of our consumer pods) that the 
minimum number of consumers is always equals or greater than the number of 
broker nodes (a.k.a. number of queues), but even doing so it might happen that 
multiple consumers register on the same queue on the same broker node, leaving 
therefore queues without consumers.
Is there a way to specify some kind of policy by which client should preferably 
first connect to queues without consumers, so that consumers are distributed 
evenly and we can guarantee that no queue will remain without consumer (given 
of course that we make sure to have at least a number of consumers equal to the 
broker nodes)?

Thanks


Reply via email to