Hi!

Thanks for the positive feedback!

>From the issue AMQ-8463, I do not quite understand the terminology.

The original name I came up with for this property was
"headMessageBrokerInTime", to indicate that it was the "message at head of
queue", and the *amqMessage.getBrokerInTime()* of that message.
However, when looking at corresponding functionality in QueueControl(Impl)
in Artemis, I found that the existing functionality there was called
"firstMessageTimestamp", and thought that it would make sense to align the
names when it is a new feature anyway.
For comparison, in RabbitMQ, the corresponding feature's name is a mix of
those two, "headMessageTimestamp" -
https://www.rabbitmq.com/rabbitmqctl.8.html#head_message_timestamp, but you
evidently want to install a small plugin to get it on all messages:
https://github.com/rabbitmq/rabbitmq-message-timestamp, as there is
something with small messages not hitting the message store and thus not
actually getting the timestamp set in default config:
https://github.com/deadtrickster/prometheus_rabbitmq_exporter/issues/15#issuecomment-376684478

(From that last issue comment, this sentence resonates: *"The timestamp of
the head message is the best metric available to evaluate the entire
system's ability to keep up with demand."*
.. but I would also add the queue length, which already is present in the
Destination info from StatisticsBroker(Plugin) as 'size'. Thus, with these
two properties available, it is possible to make a remote monitoring system
for all destinations on ActiveMQ, which is ideal for what I want to
accomplish!)

So, back to the AMQ-8463, I am not sure what these two lines means:

*> "firstMessageTimestamp - the timestamp of the first message to traverse
the destination" > "lastMessageTimestamp - the timestamp of the most recent
message to traverse the destination (aka 'message age' for messages still
on the queue)"*

If you by the first line mean "the timestamp of the first message to *ever
traverse the destination in the lifetime of this ActiveMQ instance*", I
believe one ends up with a different concept here than those other two
brokers, and it does not accomplish any of my goals of knowing the
liveliness of the queues.

The second concept I would rather give an even more specific name, like
"mostRecentDequeuedMessageTimestamp" or something like that, if I
understood you correctly.

HOWEVER: The big point of the property that I need and have implemented, is
that you basically get two monitoring features in one go: If a message at
the head of the queue is *old*, then it *either* means that the consumer(s)
is stuck or slow, OR it means that there is a substantial queue, where the
messages get old *while waiting on the queue*. By also getting the queue
length, you can distinguish between those two cases.

But crucially: If there *is no message at the head of the queue*, then from
a monitoring perspective wrt. asserting that there is progress/liveliness
on the queue (wrt. consumers), you are actually in the clear! (If you want
to monitor that there is actually messages flowing at all, one may consider
the already existing properties enqueueCount, dequeueCount, and/or
dispatchCount.)


*> "One side benefit of this approach is that you’d have the timestamp
values to work with even when the queue is empty."*

This means that - assuming that I understood the concept of your two
suggested timestamps and that comment above - neither of those two values
will actually accomplish what I need: I *do not want* a timestamp if there
are no messages on the queue, as the queue is then empty, and evidently
consumers are keeping up! Getting a timestamp of the last message to
traverse would undermine the functionality, as I could then not use this
value alone. Just consider a situation where a message traversed and was
consumed properly, but then there was no new message for 2 hours.

Kind regards,
Endre Stølsvik


On Tue, Jan 25, 2022 at 4:42 PM Matt Pavlovich <mattr...@gmail.com> wrote:

> Endre-
>
> Thank you for the contribution! I think this is a good metric to track on
> the _destination_ itself.. along w/ the lastMessageTimestamp. Other
> products have it and it provides good observability feedback as to the
> traffic progressing over the destinations.
>
> One side benefit of this approach is that you’d have the timestamp values
> to work with even when the queue is empty.
>
> I’ve created JIRA AMQ-8463 <https://issues.apache.org/jira/browse/AMQ-8463>
> to track this and will target it for 5.17.0 and 5.16.5. If you have other
> use cases or scenarios, please add your notes to the JIRA.
>
> Thanks!
> Matt Pavlovich
>
> > On Jan 24, 2022, at 6:13 PM, Endre Stølsvik <en...@stolsvik.com> wrote:
> >
> > Hi!
> >
> > I have a small contribution I was hoping that you would consider.
> >
> > The feature is in the StatisticsBroker(Plugin), where I have added an
> > optional request property, which if present will on the reply message
> > include the "BrokerInTime" for the first message in the destination, as a
> > field "firstMessageTimestamp".
> >
> > How do you want me to do such a suggestion? Should I first open an issue
> /
> > feature request, and then do a PR for it, or just submit a PR directly?
> >
> > Kind regards,
> > Endre Stølsvik
>
>

Reply via email to