> Do message group IDs expire? No. They do not expire. However, you can deal with this is several ways:
1) You can "close" the group from the producer [1]. 2) You can use group "buckets" [2] to limit memory consumption. 3) You can administratively reset the groups using the resetAllGroups() [3] or resetGroup(String) [4] management operation on the relevant QueueControl. Justin [1] https://activemq.apache.org/components/artemis/documentation/latest/message-grouping.html#closing-a-message-group [2] https://activemq.apache.org/components/artemis/documentation/latest/message-grouping.html#group-buckets [3] https://activemq.apache.org/components/artemis/documentation/javadocs/javadoc-latest/org/apache/activemq/artemis/api/core/management/QueueControl.html#resetAllGroups() [4] https://activemq.apache.org/components/artemis/documentation/javadocs/javadoc-latest/org/apache/activemq/artemis/api/core/management/QueueControl.html#resetGroup(java.lang.String) On Mon, Dec 11, 2023 at 8:08 AM John Lilley <john.lil...@redpointglobal.com.invalid> wrote: > Justin, > > > > Thanks again for your attention to this. I have verified many times now > that message groups work in our test harness -- > > When I enable message groups the test succeeds, and when I disable message > groups the test fails. > > > > Your concern about message groups was: “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.” > > > > In our case, all three types of RPC request messages for a given task > (startLongThing, isLongThingFinished, and getLongThingResult) get the same > message group ID. Logically the RPC message stream would look like: > > > > REQUEST: {"request": "start_long_thing", "message_group":"123456"} > > RESPONSE: {"task_id":"1"} > > REQUEST: {"request": "is_long_thing_finished", "task_id":"1", > "message_group":"123456"} > > RESPONSE: {"finished":"false"} > > REQUEST: {"request": "is_long_thing_finished", "task_id":"1", > "message_group":"123456"} > > RESPONSE: {"finished":"false"} > > ... > > REQUEST: {"request": "is_long_thing_finished", "task_id":"1", > "message_group":"123456"} > > RESPONSE: {"finished":"true"} > > REQUEST: {"request": "get_long_thing_result", "task_id":"1", > "message_group":"123456"} > > RESPONSE: {"result":{...}} > > > > All of the "is_long_thing_finished" requests are polling at a rate of, > let’s say, once per second. > > > > As far as our application is concerned, the important thing is that all of > these messages with the same message group Id are deliver to the same > consumer. It doesn’t matter which one. I believe that your description of > how message groups work does indeed match our needs. > > > > However, there are some things that concern me about the behavior of > message groups which are not documented, and I’m hoping you or someone on > the group can fill in the blanks for me. > > > > My fundamental question is: *Do message group IDs expire?* > > Every task that we create gets a unique message group ID. Over the course > of time, the cumulative set of unique message group IDs is unbounded. > > > > This leads to the first question – if the broker tracks message group IDs > “forever”, will this cause a memory leak in the broker as the tracking of > these IDs accumulates? > > > > The flip side of that question: if the broker expires message group IDs > and eventually forgets about them, how much time is a message group ID > available before it expires? Does the tracking of the message group > continue to get renewed so long as it is used periodically? > > > > Thanks > > John > > > > > > > [image: 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 <+1%207209385761> | john.lil...@redpointglobal.com > > *From:* Justin Bertram <jbert...@apache.org> > *Sent:* Saturday, December 9, 2023 10:49 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. **** > > > > I wouldn't expect message grouping to help given the information about > your use-case that you've provided so far. I outlined the reasons for this > in my previous email. However, if you say that it's working for you then > there's almost certainly something about your use-case that I don't > understand. > > > > Typically in request/response use-cases the requester specifies a > "correlation ID" to allow it to keep track of the exchange of messages. > Also, in cases with multiple brokers it's typical to cluster those brokers > together so that messages can be shared transparently across the different > brokers or perhaps to use connection routers [1] to "shard" applications to > particular brokers or sets of brokers so that the applications can get > reconnected back to the proper broker(s) in case they get disconnected > assuming that the brokers contain application-related state information. I > assume you're using something like this already, but if not it may be worth > looking into. > > > > > > Justin > > > > [1] > https://activemq.apache.org/components/artemis/documentation/latest/connection-routers.html#connection-routers > > > > > > Justin > > > > On Fri, Dec 8, 2023 at 5:26 PM John Lilley < > john.lil...@redpointglobal.com.invalid> wrote: > > 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 > > > > > > > > [image: rg] > <https://linkprotect.cudasvc.com/url?a=https%3a%2f%2fwww.redpointglobal.com%2f&c=E,1,MiJvWl9nWaaSsiJBFyc7CGAQMRDxVHUdDSfPqakKAOm_SablTwk4IQKKszbYlDIh5j4aSqYxuECDLsDRtkQVkoSrqFbw7DnV0Oi9x8uMfXhoDTfu1yRjKFO_DpM,&typo=1> > > *John Lilley * > > *Data Management Chief Architect, Redpoint Global Inc. * > > 34 Washington Street, Suite 205 Wellesley Hills, MA 02481 > > *M: *+1 7209385761 <+1%207209385761> | 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> 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 > > > > > > > > [image: 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 <+1%207209385761> | john.lil...@redpointglobal.com > > *From:* John Lilley <john.lil...@redpointglobal.com.INVALID> > *Sent:* Thursday, December 7, 2023 11:58 AM > *To:* 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 > > > > > > *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. > > > 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. >