[prev in list] [next in list] [prev in thread] [next in thread] 

List:       activemq-users
Subject:    Re: Message groups (was: route message to a specific consumer)
From:       Justin Bertram <jbertram () apache ! org>
Date:       2023-12-12 19:46:47
Message-ID: CAF+kE=QuSt-T9q4Pa8z2S7Od=z0wmb2fXEsnvsa3aqAiXO9pww () mail ! gmail ! com
[Download RAW message or body]

[Attachment #2 (multipart/alternative)]


> 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/o \
rg/apache/activemq/artemis/api/core/management/QueueControl.html#resetAllGroups() [4]
https://activemq.apache.org/components/artemis/documentation/javadocs/javadoc-latest/o \
rg/apache/activemq/artemis/api/core/management/QueueControl.html#resetGroup(java.lang.String)


On Mon, Dec 11, 2023 at 8:08 AM John Lilley
<john.lilley@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.lilley@redpointglobal.com
> 
> *From:* Justin Bertram <jbertram@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.lilley@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.lilley@redpointglobal.com
> 
> *From:* Justin Bertram <jbertram@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.lilley@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.lilley@redpointglobal.com
> 
> *From:* John Lilley <john.lilley@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.lilley@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.
> 


[Attachment #5 (text/html)]

<div dir="ltr"><div>&gt; Do message group IDs expire?</div><div><br></div><div>No. \
They do not expire. However, you can deal with this is several \
ways:</div><div><br></div><div>   1) You can &quot;close&quot; the group from the \
producer [1].</div><div>   2) You can use group &quot;buckets&quot; [2] to limit \
memory consumption.</div><div>   3) You can administratively reset the groups using \
the resetAllGroups() [3] or resetGroup(String) [4] management operation on the \
relevant QueueControl.</div><div><br></div><div><br></div><div>Justin</div><div><br></div><div>[1] \
<a href="https://activemq.apache.org/components/artemis/documentation/latest/message-g \
rouping.html#closing-a-message-group">https://activemq.apache.org/components/artemis/d \
ocumentation/latest/message-grouping.html#closing-a-message-group</a></div><div>[2] \
<a href="https://activemq.apache.org/components/artemis/documentation/latest/message-g \
rouping.html#group-buckets">https://activemq.apache.org/components/artemis/documentation/latest/message-grouping.html#group-buckets</a></div><div>[3] \
<a href="https://activemq.apache.org/components/artemis/documentation/javadocs/javadoc \
-latest/org/apache/activemq/artemis/api/core/management/QueueControl.html#resetAllGrou \
ps()">https://activemq.apache.org/components/artemis/documentation/javadocs/javadoc-la \
test/org/apache/activemq/artemis/api/core/management/QueueControl.html#resetAllGroups()</a></div><div>[4] \
<a href="https://activemq.apache.org/components/artemis/documentation/javadocs/javadoc \
-latest/org/apache/activemq/artemis/api/core/management/QueueControl.html#resetGroup(j \
ava.lang.String)">https://activemq.apache.org/components/artemis/documentation/javadoc \
s/javadoc-latest/org/apache/activemq/artemis/api/core/management/QueueControl.html#resetGroup(java.lang.String)</a></div></div><br><div \
class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Dec 11, 2023 at \
8:08 AM John Lilley &lt;john.lilley@redpointglobal.com.invalid&gt; \
wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px \
0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div \
class="msg717914285111794450">





<div lang="EN-US" style="overflow-wrap: break-word;">
<div class="m_717914285111794450WordSection1">
<p class="MsoNormal">Justin,<u></u><u></u></p>
<p class="MsoNormal"><u></u>  <u></u></p>
<p class="MsoNormal">Thanks again for your attention to this.   I have verified many \
times now that message groups work in our test harness -- <u></u><u></u></p>
<p class="MsoNormal">When I enable message groups the test succeeds, and when I \
disable message groups the test fails.   <u></u><u></u></p>
<p class="MsoNormal"><u></u>  <u></u></p>
<p class="MsoNormal">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."<u></u><u></u></p>
<p class="MsoNormal"><u></u>  <u></u></p>
<p class="MsoNormal">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:<u></u><u></u></p> <p class="MsoNormal"><u></u>  <u></u></p>
<p class="MsoNormal">REQUEST: {&quot;request&quot;: &quot;start_long_thing&quot;, \
&quot;message_group&quot;:&quot;123456&quot;}<u></u><u></u></p> <p \
class="MsoNormal">RESPONSE: {&quot;task_id&quot;:&quot;1&quot;}<u></u><u></u></p> <p \
class="MsoNormal">REQUEST: {&quot;request&quot;: &quot;is_long_thing_finished&quot;, \
&quot;task_id&quot;:&quot;1&quot;, \
&quot;message_group&quot;:&quot;123456&quot;}<u></u><u></u></p> <p \
class="MsoNormal">RESPONSE: \
{&quot;finished&quot;:&quot;false&quot;}<u></u><u></u></p> <p \
class="MsoNormal">REQUEST: {&quot;request&quot;: &quot;is_long_thing_finished&quot;, \
&quot;task_id&quot;:&quot;1&quot;, \
&quot;message_group&quot;:&quot;123456&quot;}<u></u><u></u></p> <p \
class="MsoNormal">RESPONSE: \
{&quot;finished&quot;:&quot;false&quot;}<u></u><u></u></p> <p \
class="MsoNormal">...<u></u><u></u></p> <p class="MsoNormal">REQUEST: \
{&quot;request&quot;: &quot;is_long_thing_finished&quot;, \
&quot;task_id&quot;:&quot;1&quot;, \
&quot;message_group&quot;:&quot;123456&quot;}<u></u><u></u></p> <p \
class="MsoNormal">RESPONSE: {&quot;finished&quot;:&quot;true&quot;}<u></u><u></u></p> \
<p class="MsoNormal">REQUEST: {&quot;request&quot;: \
&quot;get_long_thing_result&quot;, &quot;task_id&quot;:&quot;1&quot;, \
&quot;message_group&quot;:&quot;123456&quot;}<u></u><u></u></p> <p \
class="MsoNormal">RESPONSE: {&quot;result&quot;:{...}}<u></u><u></u></p> <p \
class="MsoNormal"><u></u>  <u></u></p> <p class="MsoNormal">All of the \
&quot;is_long_thing_finished&quot; requests are polling at a rate of, let's say, once \
per second.<u></u><u></u></p> <p class="MsoNormal"><u></u>  <u></u></p>
<p class="MsoNormal">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.<u></u><u></u></p>
<p class="MsoNormal"><u></u>  <u></u></p>
<p class="MsoNormal">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.<u></u><u></u></p> <p \
class="MsoNormal"><u></u>  <u></u></p> <p class="MsoNormal">My fundamental question \
is: <b>Do message group IDs expire?<u></u><u></u></b></p> <p class="MsoNormal">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.<u></u><u></u></p> <p \
class="MsoNormal"><u></u>  <u></u></p> <p class="MsoNormal">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?<u></u><u></u></p> \
<p class="MsoNormal"><u></u>  <u></u></p> <p class="MsoNormal">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?<u></u><u></u></p> <p class="MsoNormal"><u></u>  <u></u></p>
<p class="MsoNormal">Thanks<u></u><u></u></p>
<p class="MsoNormal">John<u></u><u></u></p>
<p class="MsoNormal"><u></u>  <u></u></p>
<p class="MsoNormal"><u></u>  <u></u></p>
<div><br>
<br>
<table cellpadding="0" cellspacing="0" border="0" \
style="font-family:sans-serif;box-sizing:initial;max-width:580px;color:rgb(54,54,54);border-collapse:collapse;line-height:1.5">
 <tbody>
<tr>
<td valign="top">
<table width="500" cellpadding="0" cellspacing="0" border="0" \
style="font-family:sans-serif;border-collapse:collapse;color:rgb(50,50,50);width:480px;line-height:16px">
 <tbody>
<tr>
<td valign="middle" width="95" style="padding-right:10px">
<p style="margin:0.75pt;line-height:0px"><a href="https://www.redpointglobal.com/" \
target="_blank"><img alt="rg" style="border: 0px; display: block; border-radius: \
0px;" height="67" src="cid:7c2d8d305acbc453d115748a1e32ab985d536270" width="67"> \
</a></p> </td>
<td valign="middle" width="600">
<table cellpadding="0" cellspacing="0" border="0" width="600" \
style="font-family:sans-serif;border-collapse:collapse;color:rgb(50,50,50);width:600px;line-height:16px">
 <tbody>
<tr>
<td valign="top">
<p style="margin:0.75pt;color:rgb(165,36,24);font-size:14px;font-family:Arial,sans-serif;font-weight:bold">
 John Lilley </p>
</td>
</tr>
<tr>
<td valign="top">
<p style="margin:0.75pt;font-size:13px;font-family:Arial,sans-serif;color:rgb(0,0,0);font-weight:bold">
 <span>Data Management Chief Architect, Redpoint Global Inc.</span> </p>
</td>
</tr>
<tr>
<td valign="top">
<p style="margin:0.75pt;font-size:13px;font-family:Arial,sans-serif;color:rgb(97,97,97)">
 <span>34 Washington Street, Suite 205 Wellesley Hills, MA 02481</span> </p>
</td>
</tr>
<tr>
<td valign="top">
<p style="margin:0.75pt;font-size:13px;font-family:Arial,sans-serif;color:rgb(97,97,97)">
 <b>M: </b><a href="tel:+1%207209385761" \
style="text-decoration:none;color:rgb(97,97,97)" target="_blank">+1 7209385761</a> \
<span style="color:rgb(165,36,24)">|</span> <a \
href="mailto:john.lilley@redpointglobal.com" \
style="text-decoration:underline;color:rgb(45,98,187)" target="_blank"> \
john.lilley@redpointglobal.com</a> </p> </td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>

<div style="border-width:1pt medium medium;border-style:solid none \
none;border-color:rgb(225,225,225) currentcolor currentcolor;padding:3pt 0in 0in"> <p \
class="MsoNormal"><b>From:</b> Justin Bertram &lt;<a \
href="mailto:jbertram@apache.org" target="_blank">jbertram@apache.org</a>&gt; <br> \
<b>Sent:</b> Saturday, December 9, 2023 10:49 PM<br> <b>To:</b> <a \
href="mailto:users@activemq.apache.org" \
target="_blank">users@activemq.apache.org</a><br> <b>Subject:</b> Re: Is it possible \
to route message to a specific consumer?<u></u><u></u></p> </div>
</div>
<p class="MsoNormal"><u></u>  <u></u></p>
<div style="border:1pt solid rgb(156,101,0);padding:2pt">
<p class="MsoNormal" style="line-height:11pt;background:rgb(236,135,114)">
<em><span style="font-family:&quot;Arial&quot;,sans-serif;color:black">*** [Caution] \
This email is from an external source. Please use caution responding, opening \
attachments or clicking embedded links. ***</span></em><u></u><u></u></p> </div>
<p class="MsoNormal">  <u></u><u></u></p>
<div>
<div>
<div>
<p class="MsoNormal">I wouldn&#39;t expect message grouping to help given the \
information about your use-case that you&#39;ve provided so far. I outlined the \
reasons for this in my previous email. However, if you say that it&#39;s working for \
you then there&#39;s almost certainly  something about your use-case that I don&#39;t \
understand.<u></u><u></u></p> </div>
<div>
<p class="MsoNormal"><u></u>  <u></u></p>
</div>
<div>
<p class="MsoNormal">Typically in request/response use-cases the requester specifies \
a &quot;correlation ID&quot; to allow it to keep track of the exchange of messages. \
Also, in cases with multiple brokers it&#39;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 &quot;shard&quot; 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&#39;re using something \
like this already, but if not it may be worth looking into.<u></u><u></u></p> </div>
<div>
<p class="MsoNormal"><u></u>  <u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u>  <u></u></p>
</div>
<div>
<p class="MsoNormal">Justin<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u>  <u></u></p>
</div>
<div>
<p class="MsoNormal">[1] <a \
href="https://activemq.apache.org/components/artemis/documentation/latest/connection-routers.html#connection-routers" \
target="_blank"> https://activemq.apache.org/components/artemis/documentation/latest/connection-routers.html#connection-routers</a><u></u><u></u></p>
 </div>
<div>
<p class="MsoNormal"><u></u>  <u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u>  <u></u></p>
</div>
<div>
<p class="MsoNormal">Justin<u></u><u></u></p>
</div>
</div>
<p class="MsoNormal"><u></u>  <u></u></p>
<div>
<div>
<p class="MsoNormal">On Fri, Dec 8, 2023 at 5:26 PM John Lilley &lt;<a \
href="mailto:john.lilley@redpointglobal.com.invalid" \
target="_blank">john.lilley@redpointglobal.com.invalid</a>&gt; \
wrote:<u></u><u></u></p> </div>
<blockquote style="border-width:medium medium medium 1pt;border-style:none none none \
solid;border-color:currentcolor currentcolor currentcolor \
rgb(204,204,204);padding:0in 0in 0in 6pt;margin-left:4.8pt;margin-right:0in"> <div>
<div>
<div>
<p class="MsoNormal">Hi Justin,<u></u><u></u></p>
<p class="MsoNormal">  <u></u><u></u></p>
<p class="MsoNormal">Thanks for the response!<u></u><u></u></p>
<p class="MsoNormal">  <u></u><u></u></p>
<p class="MsoNormal">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":<u></u><u></u></p> <p class="MsoNormal">  \
<u></u><u></u></p> <p class="MsoNormal">String taskID = \
client.startLongThing();<u></u><u></u></p> <p class="MsoNormal">while \
(!client.isLongThingFinished(taskID)) { wait, or print progress… \
}<u></u><u></u></p> <p \
class="MsoNormal">client.getLongThingResult(taskID);<u></u><u></u></p> <p \
class="MsoNormal">  <u></u><u></u></p> <p class="MsoNormal">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.<u></u><u></u></p> <p class="MsoNormal">  \
<u></u><u></u></p> <p class="MsoNormal">Do you think that the "message group" \
attribute is a reasonable approach?   In JMS:<u></u><u></u></p> <p class="MsoNormal" \
style="background:rgb(247,247,247)"> <span \
style="font-size:10pt;font-family:Consolas;color:rgb(51,51,51);border:1pt \
windowtext;padding:0in">message.setStringProperty(&quot;JMSXGroupID&quot;, \
&quot;grouplabel&quot;);</span><u></u><u></u></p> <p class="MsoNormal">  \
<u></u><u></u></p> <p class="MsoNormal">I've implemented and tested this and it does \
seem to work.   Do you know of any caveats or cautions?<u></u><u></u></p> <p \
class="MsoNormal">  <u></u><u></u></p> <p class="MsoNormal">Thanks<u></u><u></u></p>
<p class="MsoNormal">John<u></u><u></u></p>
<p class="MsoNormal">  <u></u><u></u></p>
<p class="MsoNormal">  <u></u><u></u></p>
<div>
<p class="MsoNormal" style="margin-bottom:12pt"><u></u>  <u></u></p>
<table border="0" cellspacing="0" cellpadding="0" \
style="max-width:435pt;border-collapse:collapse;box-sizing:initial"> <tbody>
<tr>
<td valign="top" style="padding:0in">
<table border="0" cellspacing="0" cellpadding="0" width="480" \
style="width:5in;border-collapse:collapse"> <tbody>
<tr>
<td width="95" style="width:71.25pt;padding:0in 7.5pt 0in 0in">
<p style="margin:0.75pt"><a \
href="https://linkprotect.cudasvc.com/url?a=https%3a%2f%2fwww.redpointglobal.com%2f&am \
p;c=E,1,MiJvWl9nWaaSsiJBFyc7CGAQMRDxVHUdDSfPqakKAOm_SablTwk4IQKKszbYlDIh5j4aSqYxuECDLsDRtkQVkoSrqFbw7DnV0Oi9x8uMfXhoDTfu1yRjKFO_DpM,&amp;typo=1" \
target="_blank"><span \
style="font-family:&quot;Arial&quot;,sans-serif;text-decoration:none"><img border="0" \
width="67" height="67" style="width: 0.6979in; height: 0.6979in;" \
id="m_717914285111794450_x0000_i1026" \
src="cid:7c2d8d305acbc453d115748a1e32ab985d536270" alt="rg"></span></a><span \
style="font-family:&quot;Arial&quot;,sans-serif;color:rgb(50,50,50)"><u></u><u></u></span></p>
 </td>
<td width="600" style="width:6.25in;padding:0in">
<table border="0" cellspacing="0" cellpadding="0" width="600" \
style="width:6.25in;border-collapse:collapse"> <tbody>
<tr>
<td valign="top" style="padding:0in">
<p style="margin:0.75pt;line-height:12pt"><b><span \
style="font-size:10.5pt;font-family:&quot;Arial&quot;,sans-serif;color:rgb(165,36,24)">John \
Lilley <u></u><u></u></span></b></p>
</td>
</tr>
<tr>
<td valign="top" style="padding:0in">
<p style="margin:0.75pt;line-height:12pt"><b><span \
style="font-size:10pt;font-family:&quot;Arial&quot;,sans-serif;color:black">Data \
Management Chief Architect, Redpoint Global Inc. <u></u><u></u></span></b></p>
</td>
</tr>
<tr>
<td valign="top" style="padding:0in">
<p style="margin:0.75pt;line-height:12pt"><span \
style="font-size:10pt;font-family:&quot;Arial&quot;,sans-serif;color:rgb(97,97,97)">34 \
Washington Street, Suite 205 Wellesley Hills, MA 02481 <u></u><u></u></span></p>
</td>
</tr>
<tr>
<td valign="top" style="padding:0in">
<p style="margin:0.75pt;line-height:12pt"><b><span \
style="font-size:10pt;font-family:&quot;Arial&quot;,sans-serif;color:rgb(97,97,97)">M:
 </span></b><span style="font-size:10pt;font-family:&quot;Arial&quot;,sans-serif;color:rgb(97,97,97)"><a \
href="tel:+1%207209385761" target="_blank"><span \
style="color:rgb(97,97,97);text-decoration:none">+1 7209385761</span></a> \
</span><span style="font-size:10pt;font-family:&quot;Arial&quot;,sans-serif;color:rgb(165,36,24)">|</span><span \
style="font-size:10pt;font-family:&quot;Arial&quot;,sans-serif;color:rgb(97,97,97)"> \
<a href="mailto:john.lilley@redpointglobal.com" target="_blank"><span \
style="color:rgb(45,98,187)">john.lilley@redpointglobal.com</span></a> \
<u></u><u></u></span></p> </td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<div style="border-width:1pt medium medium;border-style:solid none none;padding:3pt \
0in 0in;border-color:currentcolor"> <p class="MsoNormal"><b>From:</b> Justin Bertram \
&lt;<a href="mailto:jbertram@apache.org" target="_blank">jbertram@apache.org</a>&gt; \
<br> <b>Sent:</b> Thursday, December 7, 2023 10:56 PM<br>
<b>To:</b> <a href="mailto:users@activemq.apache.org" \
target="_blank">users@activemq.apache.org</a><br> <b>Subject:</b> Re: Is it possible \
to route message to a specific consumer?<u></u><u></u></p> </div>
</div>
<p class="MsoNormal">  <u></u><u></u></p>
<div style="border:1pt solid rgb(156,101,0);padding:2pt">
<p class="MsoNormal" style="line-height:11pt;background:rgb(236,135,114)">
<em><span style="font-family:&quot;Arial&quot;,sans-serif;color:black">*** [Caution] \
This email is from an external source. Please use caution responding, opening \
attachments or clicking embedded links. ***</span></em><u></u><u></u></p> </div>
<p class="MsoNormal">  <u></u><u></u></p>
<div>
<div>
<div>
<p class="MsoNormal">&gt; Is there any kind of "consumer affinity" that can be \
attached to a message, which directs the broker to select a specific \
consumer?<u></u><u></u></p> </div>
<div>
<p class="MsoNormal">  <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">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&#39;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.<u></u><u></u></p> </div>
<div>
<p class="MsoNormal">  <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">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.<u></u><u></u></p> </div>
<div>
<p class="MsoNormal">  <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">I&#39;d need to know more about the specifics of your use-case \
before I could make further recommendations.<u></u><u></u></p> </div>
<div>
<p class="MsoNormal">  <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Justin
<u></u><u></u></p>
</div>
</div>
<p class="MsoNormal">  <u></u><u></u></p>
<div>
<div>
<p class="MsoNormal">On Thu, Dec 7, 2023 at 1:26 PM John Lilley &lt;<a \
href="mailto:john.lilley@redpointglobal.com.invalid" \
target="_blank">john.lilley@redpointglobal.com.invalid</a>&gt; \
wrote:<u></u><u></u></p> </div>
<blockquote style="border-width:medium medium medium 1pt;border-style:none none none \
solid;padding:0in 0in 0in 6pt;margin:5pt 0in 5pt 4.8pt;border-color:currentcolor \
currentcolor currentcolor rgb(204,204,204)"> <div>
<div>
<div>
<p class="MsoNormal">Oooh, maybe I answered my own question:<u></u><u></u></p>
<p class="MsoNormal"><a \
href="https://activemq.apache.org/components/artemis/documentation/1.0.0/message-grouping.html" \
target="_blank">https://activemq.apache.org/components/artemis/documentation/1.0.0/message-grouping.html</a><u></u><u></u></p>
 <p class="MsoNormal">This
<i>looks</i> like what I'm after.   Any advice around its use?<u></u><u></u></p>
<p class="MsoNormal">  <u></u><u></u></p>
<p class="MsoNormal">John<u></u><u></u></p>
<p class="MsoNormal">  <u></u><u></u></p>
<p class="MsoNormal">  <u></u><u></u></p>
<div>
<p class="MsoNormal" style="margin-bottom:12pt">  <u></u><u></u></p>
<table border="0" cellspacing="0" cellpadding="0" \
style="max-width:435pt;border-collapse:collapse;box-sizing:initial"> <tbody>
<tr>
<td valign="top" style="padding:0in">
<table border="0" cellspacing="0" cellpadding="0" width="480" \
style="width:5in;border-collapse:collapse"> <tbody>
<tr>
<td width="95" style="width:71.25pt;padding:0in 7.5pt 0in 0in">
<p style="margin:0.75pt"><a \
href="https://linkprotect.cudasvc.com/url?a=https%3a%2f%2fwww.redpointglobal.com%2f&am \
p;c=E,1,RLCz7uLdUVWU-4PdO0mzCFR75gph7wgFAJpvnoG5yg55RbBDZxZfAUVZs-ERB9VGZHVUZK6w6h0r3FI5bjkHA50Th_z9pS5huRB5AZIUhxN5nTIQlTbVa2sLLA,,&amp;typo=1" \
target="_blank"><span \
style="font-family:&quot;Arial&quot;,sans-serif;text-decoration:none"><img border="0" \
width="67" height="67" style="width: 0.6979in; height: 0.6979in;" \
id="m_717914285111794450_x0000_i1025" \
src="cid:7c2d8d305acbc453d115748a1e32ab985d536270" \
alt="rg"></span></a><u></u><u></u></p> </td>
<td width="600" style="width:6.25in;padding:0in">
<table border="0" cellspacing="0" cellpadding="0" width="600" \
style="width:6.25in;border-collapse:collapse"> <tbody>
<tr>
<td valign="top" style="padding:0in">
<p style="margin:0.75pt;line-height:12pt"><b><span \
style="font-size:10.5pt;font-family:&quot;Arial&quot;,sans-serif;color:rgb(165,36,24)">John \
Lilley </span></b><u></u><u></u></p>
</td>
</tr>
<tr>
<td valign="top" style="padding:0in">
<p style="margin:0.75pt;line-height:12pt"><b><span \
style="font-size:10pt;font-family:&quot;Arial&quot;,sans-serif;color:black">Data \
Management Chief Architect, Redpoint Global Inc. </span></b><u></u><u></u></p>
</td>
</tr>
<tr>
<td valign="top" style="padding:0in">
<p style="margin:0.75pt;line-height:12pt"><span \
style="font-size:10pt;font-family:&quot;Arial&quot;,sans-serif;color:rgb(97,97,97)">34 \
Washington Street, Suite 205 Wellesley Hills, MA 02481 </span><u></u><u></u></p>
</td>
</tr>
<tr>
<td valign="top" style="padding:0in">
<p style="margin:0.75pt;line-height:12pt"><b><span \
style="font-size:10pt;font-family:&quot;Arial&quot;,sans-serif;color:rgb(97,97,97)">M:
 </span></b><span style="font-size:10pt;font-family:&quot;Arial&quot;,sans-serif;color:rgb(97,97,97)"><a \
href="tel:+1%207209385761" target="_blank"><span \
style="color:rgb(97,97,97);text-decoration:none">+1 7209385761</span></a> \
</span><span style="font-size:10pt;font-family:&quot;Arial&quot;,sans-serif;color:rgb(165,36,24)">|</span><span \
style="font-size:10pt;font-family:&quot;Arial&quot;,sans-serif;color:rgb(97,97,97)"> \
<a href="mailto:john.lilley@redpointglobal.com" target="_blank"><span \
style="color:rgb(45,98,187)">john.lilley@redpointglobal.com</span></a> \
</span><u></u><u></u></p> </td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<div style="border-width:1pt medium medium;border-style:solid none none;padding:3pt \
0in 0in;border-color:currentcolor"> <p class="MsoNormal"><b>From:</b> John Lilley \
&lt;<a href="mailto:john.lilley@redpointglobal.com.INVALID" \
target="_blank">john.lilley@redpointglobal.com.INVALID</a>&gt; <br>
<b>Sent:</b> Thursday, December 7, 2023 11:58 AM<br>
<b>To:</b> <a href="mailto:users@activemq.apache.org" \
target="_blank">users@activemq.apache.org</a><br> <b>Subject:</b> Is it possible to \
route message to a specific consumer?<u></u><u></u></p> </div>
</div>
<p class="MsoNormal">  <u></u><u></u></p>
<div style="border:1pt solid rgb(156,101,0);padding:2pt">
<p class="MsoNormal" style="line-height:11pt;background:rgb(236,135,114)">
<em><span style="font-family:&quot;Arial&quot;,sans-serif;color:black">*** [Caution] \
This email is from an external source. Please use caution responding, opening \
attachments or clicking embedded links. ***</span></em><u></u><u></u></p> </div>
<p class="MsoNormal">  <u></u><u></u></p>
<div>
<p class="MsoNormal">Greetings,<u></u><u></u></p>
<p class="MsoNormal">  <u></u><u></u></p>
<p class="MsoNormal">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.<u></u><u></u></p> <p class="MsoNormal">  <u></u><u></u></p>
<p class="MsoNormal">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.<u></u><u></u></p> <p class="MsoNormal">  <u></u><u></u></p>
<p class="MsoNormal">Is there any kind of "consumer affinity" that can be attached to \
a message, which directs the broker to select a specific consumer?   \
<u></u><u></u></p> <p class="MsoNormal">If not, other ideas are certainly \
welcome.<u></u><u></u></p> <p class="MsoNormal">  <u></u><u></u></p>
<p class="MsoNormal">We are using OpenJDK 17
<u></u><u></u></p>
<p class="MsoNormal">  <u></u><u></u></p>
<p class="MsoNormal">This is our maven dependency<u></u><u></u></p>
<p class="MsoNormal" style="background:white">
<span style="font-size:10pt;font-family:&quot;JetBrains \
Mono&quot;;color:rgb(8,8,8)">&lt;</span><span \
style="font-size:10pt;font-family:&quot;JetBrains \
Mono&quot;;color:rgb(0,51,179)">dependency</span><span \
style="font-size:10pt;font-family:&quot;JetBrains \
Mono&quot;;color:rgb(8,8,8)">&gt;<br>  &lt;</span><span \
style="font-size:10pt;font-family:&quot;JetBrains \
Mono&quot;;color:rgb(0,51,179)">groupId</span><span \
style="font-size:10pt;font-family:&quot;JetBrains \
Mono&quot;;color:rgb(8,8,8)">&gt;org.apache.activemq&lt;/</span><span \
style="font-size:10pt;font-family:&quot;JetBrains \
Mono&quot;;color:rgb(0,51,179)">groupId</span><span \
style="font-size:10pt;font-family:&quot;JetBrains \
Mono&quot;;color:rgb(8,8,8)">&gt;<br>  &lt;</span><span \
style="font-size:10pt;font-family:&quot;JetBrains \
Mono&quot;;color:rgb(0,51,179)">artifactId</span><span \
style="font-size:10pt;font-family:&quot;JetBrains \
Mono&quot;;color:rgb(8,8,8)">&gt;artemis-jms-client-all&lt;/</span><span \
style="font-size:10pt;font-family:&quot;JetBrains \
Mono&quot;;color:rgb(0,51,179)">artifactId</span><span \
style="font-size:10pt;font-family:&quot;JetBrains \
Mono&quot;;color:rgb(8,8,8)">&gt;<br>  &lt;</span><span \
style="font-size:10pt;font-family:&quot;JetBrains \
Mono&quot;;color:rgb(0,51,179)">version</span><span \
style="font-size:10pt;font-family:&quot;JetBrains \
Mono&quot;;color:rgb(8,8,8)">&gt;2.30.0&lt;/</span><span \
style="font-size:10pt;font-family:&quot;JetBrains \
Mono&quot;;color:rgb(0,51,179)">version</span><span \
style="font-size:10pt;font-family:&quot;JetBrains \
Mono&quot;;color:rgb(8,8,8)">&gt;<br> &lt;/</span><span \
style="font-size:10pt;font-family:&quot;JetBrains \
Mono&quot;;color:rgb(0,51,179)">dependency</span><span \
style="font-size:10pt;font-family:&quot;JetBrains \
Mono&quot;;color:rgb(8,8,8)">&gt;</span><u></u><u></u></p> <p class="MsoNormal">  \
<u></u><u></u></p> <p class="MsoNormal">  <u></u><u></u></p>
<p class="MsoNormal">Thanks<u></u><u></u></p>
<p class="MsoNormal">John<u></u><u></u></p>
<p class="MsoNormal">  <u></u><u></u></p>
<p class="MsoNormal">  <u></u><u></u></p>
<table border="0" cellspacing="0" cellpadding="0" \
style="max-width:435pt;border-collapse:collapse;box-sizing:initial"> <tbody>
<tr>
<td valign="top" style="padding:0in">
<table border="0" cellspacing="0" cellpadding="0" width="480" \
style="width:5in;border-collapse:collapse"> <tbody>
<tr>
<td width="95" style="width:71.25pt;padding:0in 7.5pt 0in 0in"></td>
<td width="600" style="width:6.25in;padding:0in">
<table border="0" cellspacing="0" cellpadding="0" width="600" \
style="width:6.25in;border-collapse:collapse"> <tbody>
<tr>
<td valign="top" style="padding:0in">
<p style="margin:0.75pt;line-height:12pt"><b><span \
style="font-size:10.5pt;font-family:&quot;Arial&quot;,sans-serif;color:rgb(165,36,24)"><a \
href="https://linkprotect.cudasvc.com/url?a=https%3a%2f%2fwww.redpointglobal.com%2f&am \
p;c=E,1,PCllWqn1FN806xiChO-uNijPVawTv9Y3krF28r_sBUJsVHuM4SlcKCNVMTp_Qq94AnDC39XAs-pcWHhVnAPvZZRJbL8kXpIdP0TQ85wOYAroxX0px-0h_pKn&amp;typo=1" \
target="_blank"><span style="color:rgb(165,36,24);text-decoration:none">John  Lilley \
</span></a></span></b><u></u><u></u></p> </td>
</tr>
<tr>
<td valign="top" style="padding:0in">
<p style="margin:0.75pt;line-height:12pt"><b><span \
style="font-size:10pt;font-family:&quot;Arial&quot;,sans-serif;color:black"><a \
href="https://linkprotect.cudasvc.com/url?a=https%3a%2f%2fwww.redpointglobal.com%2f&am \
p;c=E,1,PCllWqn1FN806xiChO-uNijPVawTv9Y3krF28r_sBUJsVHuM4SlcKCNVMTp_Qq94AnDC39XAs-pcWHhVnAPvZZRJbL8kXpIdP0TQ85wOYAroxX0px-0h_pKn&amp;typo=1" \
target="_blank"><span style="color:black;text-decoration:none">Data  Management Chief \
Architect, Redpoint Global Inc. </span></a></span></b><u></u><u></u></p> </td>
</tr>
<tr>
<td valign="top" style="padding:0in">
<p style="margin:0.75pt;line-height:12pt"><span \
style="font-size:10pt;font-family:&quot;Arial&quot;,sans-serif;color:rgb(97,97,97)"><a \
href="https://linkprotect.cudasvc.com/url?a=https%3a%2f%2fwww.redpointglobal.com%2f&am \
p;c=E,1,PCllWqn1FN806xiChO-uNijPVawTv9Y3krF28r_sBUJsVHuM4SlcKCNVMTp_Qq94AnDC39XAs-pcWHhVnAPvZZRJbL8kXpIdP0TQ85wOYAroxX0px-0h_pKn&amp;typo=1" \
target="_blank"><span style="color:rgb(97,97,97);text-decoration:none">34  Washington \
Street, Suite 205 Wellesley Hills, MA 02481 </span></a></span><u></u><u></u></p> \
</td> </tr>
<tr>
<td valign="top" style="padding:0in">
<p style="margin:0.75pt;line-height:12pt"><b><span \
style="font-size:10pt;font-family:&quot;Arial&quot;,sans-serif;color:rgb(97,97,97)"><a \
href="https://linkprotect.cudasvc.com/url?a=https%3a%2f%2fwww.redpointglobal.com%2f&am \
p;c=E,1,PCllWqn1FN806xiChO-uNijPVawTv9Y3krF28r_sBUJsVHuM4SlcKCNVMTp_Qq94AnDC39XAs-pcWHhVnAPvZZRJbL8kXpIdP0TQ85wOYAroxX0px-0h_pKn&amp;typo=1" \
target="_blank"><span style="color:rgb(97,97,97);text-decoration:none">M: \
</span><span style="color:rgb(97,97,97);font-weight:normal;text-decoration:none">+1 \
7209385761 </span><span \
style="color:rgb(165,36,24);font-weight:normal;text-decoration:none">|</span><span \
style="color:rgb(97,97,97);font-weight:normal;text-decoration:none"> </span><span \
style="color:rgb(45,98,187);font-weight:normal">john.lilley@redpointglobal.com</span><span \
style="color:rgb(97,97,97);font-weight:normal;text-decoration:none"> \
</span></a></span></b><u></u><u></u></p> </td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<p class="MsoNormal"><a \
href="https://linkprotect.cudasvc.com/url?a=https%3a%2f%2fwww.redpointglobal.com%2f&am \
p;c=E,1,PCllWqn1FN806xiChO-uNijPVawTv9Y3krF28r_sBUJsVHuM4SlcKCNVMTp_Qq94AnDC39XAs-pcWHhVnAPvZZRJbL8kXpIdP0TQ85wOYAroxX0px-0h_pKn&amp;typo=1" \
target="_blank"><br> <span style="color:windowtext;text-decoration:none">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. </span></a><u></u><u></u></p> </div>
</div>
<p class="MsoNormal"><a \
href="https://linkprotect.cudasvc.com/url?a=https%3a%2f%2fwww.redpointglobal.com%2f&am \
p;c=E,1,PCllWqn1FN806xiChO-uNijPVawTv9Y3krF28r_sBUJsVHuM4SlcKCNVMTp_Qq94AnDC39XAs-pcWHhVnAPvZZRJbL8kXpIdP0TQ85wOYAroxX0px-0h_pKn&amp;typo=1" \
target="_blank"><br> <span style="color:windowtext;text-decoration:none">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. </span></a><u></u><u></u></p> </div>
</div>
</blockquote>
</div>
</div>
</div>
<p class="MsoNormal"><br>
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. <u></u><u></u></p>
</div>
</div>
</blockquote>
</div>
</div>
</div>
<br>
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.
</div>

</div></blockquote></div>

--0000000000003d0236060c555184--



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic