[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>> 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 "close" the group from the \
producer [1].</div><div> 2) You can use group "buckets" [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 <john.lilley@redpointglobal.com.invalid> \
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: {"request": "start_long_thing", \
"message_group":"123456"}<u></u><u></u></p> <p \
class="MsoNormal">RESPONSE: {"task_id":"1"}<u></u><u></u></p> <p \
class="MsoNormal">REQUEST: {"request": "is_long_thing_finished", \
"task_id":"1", \
"message_group":"123456"}<u></u><u></u></p> <p \
class="MsoNormal">RESPONSE: \
{"finished":"false"}<u></u><u></u></p> <p \
class="MsoNormal">REQUEST: {"request": "is_long_thing_finished", \
"task_id":"1", \
"message_group":"123456"}<u></u><u></u></p> <p \
class="MsoNormal">RESPONSE: \
{"finished":"false"}<u></u><u></u></p> <p \
class="MsoNormal">...<u></u><u></u></p> <p class="MsoNormal">REQUEST: \
{"request": "is_long_thing_finished", \
"task_id":"1", \
"message_group":"123456"}<u></u><u></u></p> <p \
class="MsoNormal">RESPONSE: {"finished":"true"}<u></u><u></u></p> \
<p class="MsoNormal">REQUEST: {"request": \
"get_long_thing_result", "task_id":"1", \
"message_group":"123456"}<u></u><u></u></p> <p \
class="MsoNormal">RESPONSE: {"result":{...}}<u></u><u></u></p> <p \
class="MsoNormal"><u></u> <u></u></p> <p class="MsoNormal">All of the \
"is_long_thing_finished" 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 <<a \
href="mailto:jbertram@apache.org" target="_blank">jbertram@apache.org</a>> <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:"Arial",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'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.<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 "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.<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 <<a \
href="mailto:john.lilley@redpointglobal.com.invalid" \
target="_blank">john.lilley@redpointglobal.com.invalid</a>> \
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("JMSXGroupID", \
"grouplabel");</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,&typo=1" \
target="_blank"><span \
style="font-family:"Arial",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:"Arial",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:"Arial",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:"Arial",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:"Arial",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:"Arial",sans-serif;color:rgb(97,97,97)">M:
</span></b><span style="font-size:10pt;font-family:"Arial",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:"Arial",sans-serif;color:rgb(165,36,24)">|</span><span \
style="font-size:10pt;font-family:"Arial",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 \
<<a href="mailto:jbertram@apache.org" target="_blank">jbertram@apache.org</a>> \
<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:"Arial",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">> 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'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'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 <<a \
href="mailto:john.lilley@redpointglobal.com.invalid" \
target="_blank">john.lilley@redpointglobal.com.invalid</a>> \
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,,&typo=1" \
target="_blank"><span \
style="font-family:"Arial",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:"Arial",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:"Arial",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:"Arial",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:"Arial",sans-serif;color:rgb(97,97,97)">M:
</span></b><span style="font-size:10pt;font-family:"Arial",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:"Arial",sans-serif;color:rgb(165,36,24)">|</span><span \
style="font-size:10pt;font-family:"Arial",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 \
<<a href="mailto:john.lilley@redpointglobal.com.INVALID" \
target="_blank">john.lilley@redpointglobal.com.INVALID</a>> <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:"Arial",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:"JetBrains \
Mono";color:rgb(8,8,8)"><</span><span \
style="font-size:10pt;font-family:"JetBrains \
Mono";color:rgb(0,51,179)">dependency</span><span \
style="font-size:10pt;font-family:"JetBrains \
Mono";color:rgb(8,8,8)">><br> <</span><span \
style="font-size:10pt;font-family:"JetBrains \
Mono";color:rgb(0,51,179)">groupId</span><span \
style="font-size:10pt;font-family:"JetBrains \
Mono";color:rgb(8,8,8)">>org.apache.activemq</</span><span \
style="font-size:10pt;font-family:"JetBrains \
Mono";color:rgb(0,51,179)">groupId</span><span \
style="font-size:10pt;font-family:"JetBrains \
Mono";color:rgb(8,8,8)">><br> <</span><span \
style="font-size:10pt;font-family:"JetBrains \
Mono";color:rgb(0,51,179)">artifactId</span><span \
style="font-size:10pt;font-family:"JetBrains \
Mono";color:rgb(8,8,8)">>artemis-jms-client-all</</span><span \
style="font-size:10pt;font-family:"JetBrains \
Mono";color:rgb(0,51,179)">artifactId</span><span \
style="font-size:10pt;font-family:"JetBrains \
Mono";color:rgb(8,8,8)">><br> <</span><span \
style="font-size:10pt;font-family:"JetBrains \
Mono";color:rgb(0,51,179)">version</span><span \
style="font-size:10pt;font-family:"JetBrains \
Mono";color:rgb(8,8,8)">>2.30.0</</span><span \
style="font-size:10pt;font-family:"JetBrains \
Mono";color:rgb(0,51,179)">version</span><span \
style="font-size:10pt;font-family:"JetBrains \
Mono";color:rgb(8,8,8)">><br> </</span><span \
style="font-size:10pt;font-family:"JetBrains \
Mono";color:rgb(0,51,179)">dependency</span><span \
style="font-size:10pt;font-family:"JetBrains \
Mono";color:rgb(8,8,8)">></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:"Arial",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&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:"Arial",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&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:"Arial",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&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:"Arial",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&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&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&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