Hi Justin,

Thanks for the response!

Our use case is something like this.  Suppose we have a nice RPC client wrapped 
around message queues and their services.  Some methods take a long time, and 
we want to report status along the way, so we’ve arranged for such methods to 
return a “task ID”:

String taskID = client.startLongThing();
while (!client.isLongThingFinished(taskID)) { wait, or print progress… }
client.getLongThingResult(taskID);

The problem we hit is that the long-running tasks are not stateless.  They 
start, execute and finish within the same server process.  So the calls to 
startLongThing(), isLongThingFinished(), and getLongThingResult() must all be 
serviced by the same process.  If we have multiple HA instances of a service 
running in a Kubernetes cluster, the isLongThingFinished() requests will be 
handle by a random server that may not know about the task.

Do you think that the “message group” attribute is a reasonable approach?  In 
JMS:
message.setStringProperty("JMSXGroupID", "grouplabel");

I’ve implemented and tested this and it does seem to work.  Do you know of any 
caveats or cautions?

Thanks
John





[rg] <https://www.redpointglobal.com/>

John Lilley

Data Management Chief Architect, Redpoint Global Inc.

34 Washington Street, Suite 205 Wellesley Hills, MA 02481

M: +1 7209385761<tel:+1%207209385761> | 
john.lil...@redpointglobal.com<mailto:john.lil...@redpointglobal.com>
From: Justin Bertram <jbert...@apache.org>
Sent: Thursday, December 7, 2023 10:56 PM
To: users@activemq.apache.org
Subject: Re: Is it possible to route message to a specific consumer?

*** [Caution] This email is from an external source. Please use caution 
responding, opening attachments or clicking embedded links. ***

> Is there any kind of “consumer affinity” that can be attached to a message, 
> which directs the broker to select a specific consumer?

I may be forgetting something, but I believe the answer to this question is no. 
The broker is broadly designed to support decoupled, asynchronous messaging 
where consumers and producers know essentially nothing about each other and the 
broker just receives messages and makes them available for consumption. Message 
consumption is fundamentally consumer-driven. The broker itself doesn't choose 
where the messages go except in some limited sense in particular use-cases. 
Even in the case of message grouping, the messages are not directed to a 
specific consumer as much as they are just directed at _just one consumer (i.e. 
any consumer) at a time_ since the goal is just for the messages to be 
processed in order.

You can add specific properties to specific messages and then JMS consumers can 
use selectors to either ignore or choose those messages for consumption and in 
this way you can ensure that certain consumers get certain messages, but both 
the producer and consumer need to know about the properties. Furthermore, if 
all the applications use a single queue then they can start interfering with 
each other. For example, if one application fails to consume its messages then 
messages will begin accumulating and may prevent other applications from 
getting their messages since queues are by nature first-in-first-out data 
structures.

I'd need to know more about the specifics of your use-case before I could make 
further recommendations.


Justin

On Thu, Dec 7, 2023 at 1:26 PM John Lilley 
<john.lil...@redpointglobal.com.invalid<mailto:john.lil...@redpointglobal.com.invalid>>
 wrote:
Oooh, maybe I answered my own question:
https://activemq.apache.org/components/artemis/documentation/1.0.0/message-grouping.html
This looks like what I’m after.  Any advice around its use?

John




[rg]<https://linkprotect.cudasvc.com/url?a=https%3a%2f%2fwww.redpointglobal.com%2f&c=E,1,RLCz7uLdUVWU-4PdO0mzCFR75gph7wgFAJpvnoG5yg55RbBDZxZfAUVZs-ERB9VGZHVUZK6w6h0r3FI5bjkHA50Th_z9pS5huRB5AZIUhxN5nTIQlTbVa2sLLA,,&typo=1>

John Lilley

Data Management Chief Architect, Redpoint Global Inc.

34 Washington Street, Suite 205 Wellesley Hills, MA 02481

M: +1 7209385761<tel:+1%207209385761> | 
john.lil...@redpointglobal.com<mailto:john.lil...@redpointglobal.com>
From: John Lilley 
<john.lil...@redpointglobal.com.INVALID<mailto:john.lil...@redpointglobal.com.INVALID>>
Sent: Thursday, December 7, 2023 11:58 AM
To: users@activemq.apache.org<mailto:users@activemq.apache.org>
Subject: Is it possible to route message to a specific consumer?

*** [Caution] This email is from an external source. Please use caution 
responding, opening attachments or clicking embedded links. ***

Greetings,

We are in the process of transforming our Java-based services into 
Kubernetes-based microservice swarms with HA topology.  So every service will 
have multiple instances.  The good news is, AMQ supports this splendidly, 
because the message broker is very good about load-balancing between consumers 
and handling failed consumers.

However, we have a few cases of “long running tasks” that a single service 
instance is responsible for.  In those cases, we need to be able to route a 
request to a specific consumer instance.  We could use specially-named queues 
for each consumer instance, but this seems awkward and hopefully not necessary.

Is there any kind of “consumer affinity” that can be attached to a message, 
which directs the broker to select a specific consumer?
If not, other ideas are certainly welcome.

We are using OpenJDK 17

This is our maven dependency
<dependency>
    <groupId>org.apache.activemq</groupId>
    <artifactId>artemis-jms-client-all</artifactId>
    <version>2.30.0</version>
</dependency>


Thanks
John



<https://linkprotect.cudasvc.com/url?a=https%3a%2f%2fwww.redpointglobal.com%2f&c=E,1,PCllWqn1FN806xiChO-uNijPVawTv9Y3krF28r_sBUJsVHuM4SlcKCNVMTp_Qq94AnDC39XAs-pcWHhVnAPvZZRJbL8kXpIdP0TQ85wOYAroxX0px-0h_pKn&typo=1>

John Lilley 
<https://linkprotect.cudasvc.com/url?a=https%3a%2f%2fwww.redpointglobal.com%2f&c=E,1,PCllWqn1FN806xiChO-uNijPVawTv9Y3krF28r_sBUJsVHuM4SlcKCNVMTp_Qq94AnDC39XAs-pcWHhVnAPvZZRJbL8kXpIdP0TQ85wOYAroxX0px-0h_pKn&typo=1>

Data Management Chief Architect, Redpoint Global Inc. 
<https://linkprotect.cudasvc.com/url?a=https%3a%2f%2fwww.redpointglobal.com%2f&c=E,1,PCllWqn1FN806xiChO-uNijPVawTv9Y3krF28r_sBUJsVHuM4SlcKCNVMTp_Qq94AnDC39XAs-pcWHhVnAPvZZRJbL8kXpIdP0TQ85wOYAroxX0px-0h_pKn&typo=1>

34 Washington Street, Suite 205 Wellesley Hills, MA 02481 
<https://linkprotect.cudasvc.com/url?a=https%3a%2f%2fwww.redpointglobal.com%2f&c=E,1,PCllWqn1FN806xiChO-uNijPVawTv9Y3krF28r_sBUJsVHuM4SlcKCNVMTp_Qq94AnDC39XAs-pcWHhVnAPvZZRJbL8kXpIdP0TQ85wOYAroxX0px-0h_pKn&typo=1>

M: +1 7209385761 | john.lil...@redpointglobal.com 
<https://linkprotect.cudasvc.com/url?a=https%3a%2f%2fwww.redpointglobal.com%2f&c=E,1,PCllWqn1FN806xiChO-uNijPVawTv9Y3krF28r_sBUJsVHuM4SlcKCNVMTp_Qq94AnDC39XAs-pcWHhVnAPvZZRJbL8kXpIdP0TQ85wOYAroxX0px-0h_pKn&typo=1>

PLEASE NOTE: This e-mail from Redpoint Global Inc. (“Redpoint”) is confidential 
and is intended solely for the use of the individual(s) to whom it is 
addressed. If you believe you received this e-mail in error, please notify the 
sender immediately, delete the e-mail from your computer and do not copy, print 
or disclose it to anyone else. If you properly received this e-mail as a 
customer, partner or vendor of Redpoint, you should maintain its contents in 
confidence subject to the terms and conditions of your agreement(s) with 
Redpoint. 
<https://linkprotect.cudasvc.com/url?a=https%3a%2f%2fwww.redpointglobal.com%2f&c=E,1,PCllWqn1FN806xiChO-uNijPVawTv9Y3krF28r_sBUJsVHuM4SlcKCNVMTp_Qq94AnDC39XAs-pcWHhVnAPvZZRJbL8kXpIdP0TQ85wOYAroxX0px-0h_pKn&typo=1>

PLEASE NOTE: This e-mail from Redpoint Global Inc. (“Redpoint”) is confidential 
and is intended solely for the use of the individual(s) to whom it is 
addressed. If you believe you received this e-mail in error, please notify the 
sender immediately, delete the e-mail from your computer and do not copy, print 
or disclose it to anyone else. If you properly received this e-mail as a 
customer, partner or vendor of Redpoint, you should maintain its contents in 
confidence subject to the terms and conditions of your agreement(s) with 
Redpoint. 
<https://linkprotect.cudasvc.com/url?a=https%3a%2f%2fwww.redpointglobal.com%2f&c=E,1,PCllWqn1FN806xiChO-uNijPVawTv9Y3krF28r_sBUJsVHuM4SlcKCNVMTp_Qq94AnDC39XAs-pcWHhVnAPvZZRJbL8kXpIdP0TQ85wOYAroxX0px-0h_pKn&typo=1>

PLEASE NOTE: This e-mail from Redpoint Global Inc. (“Redpoint”) is confidential 
and is intended solely for the use of the individual(s) to whom it is 
addressed. If you believe you received this e-mail in error, please notify the 
sender immediately, delete the e-mail from your computer and do not copy, print 
or disclose it to anyone else. If you properly received this e-mail as a 
customer, partner or vendor of Redpoint, you should maintain its contents in 
confidence subject to the terms and conditions of your agreement(s) with 
Redpoint.

Reply via email to