You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@activemq.apache.org by "ASF GitHub Bot (Jira)" <ji...@apache.org> on 2022/12/05 11:54:00 UTC

[jira] [Work logged] (ARTEMIS-3875) Improve consumer/producer metrics

     [ https://issues.apache.org/jira/browse/ARTEMIS-3875?focusedWorklogId=830999&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-830999 ]

ASF GitHub Bot logged work on ARTEMIS-3875:
-------------------------------------------

                Author: ASF GitHub Bot
            Created on: 05/Dec/22 11:53
            Start Date: 05/Dec/22 11:53
    Worklog Time Spent: 10m 
      Work Description: andytaylor commented on code in PR #4183:
URL: https://github.com/apache/activemq-artemis/pull/4183#discussion_r1039498722


##########
artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ServerSessionImpl.java:
##########
@@ -2340,10 +2318,24 @@ public Pair<SimpleString, EnumSet<RoutingType>> getAddressAndRoutingTypes(Simple
    }
 
    @Override
-   public void addProducer(ServerProducer serverProducer) {
+   public void addProducer(ServerProducer serverProducer, String address) {
+      if (address == null) {
+         //this is ok as it will be an anonymous producer which we dont track
+         return;
+      }
       serverProducer.setSessionID(getName());
-      serverProducer.setConnectionID(getConnectionID().toString());
-      producers.put(serverProducer.getID(), serverProducer);
+      serverProducer.setConnectionID(getConnectionID() != null ? getConnectionID().toString() : null);
+      producers.put(address, serverProducer);

Review Comment:
   I agree, using the address makes things problematic, the reason for doing this was because core has no notion of server side producers. AMQP has a hook when the receiver is created to add one and adds the producer id to each message. Openwire does something similar so I think we need to this into the core protocol. so this would entail;
   
   1. Creating a non blocking call when the client side producers are created and destroyed to create on the server.
   2. Add the producer id to each message sent.
   
   I will however need to address legacy clients so will continue to use the address for these when core is used. 





Issue Time Tracking
-------------------

    Worklog Id:     (was: 830999)
    Time Spent: 6h 50m  (was: 6h 40m)

> Improve consumer/producer metrics
> ---------------------------------
>
>                 Key: ARTEMIS-3875
>                 URL: https://issues.apache.org/jira/browse/ARTEMIS-3875
>             Project: ActiveMQ Artemis
>          Issue Type: Improvement
>            Reporter: Andy Taylor
>            Assignee: Andy Taylor
>            Priority: Major
>          Time Spent: 6h 50m
>  Remaining Estimate: 0h
>
> adding the following metrics:
>  
> for the Consumer and the methods listAllConsumersAsJSON on server and queue mbeans:
> messagesInTransit - number of Messages out for delivery which have not yet been acknowledged
> messagesInTransitSize - The total size of Messages out for delivery which have not yet been acknowledged
> messagesDelivered - Number of messages delivered
> messagesDeliveredSize' - total  size of messages delivered
> messagesAcknowledged - total number of Messages Acknowledged
> messagesAcknowledgedAwaitingCommit - Total number of messages in a transaction that are acknowledged but awaiting a commit
> lastDeliveredTime - The time in milliseconds of the last message delivered
> lastAcknowledgedTime - The time in milliseconds of the last message acknowledged
>  
> for the Producer add to the listProducers and listproducersasJSON mbean methods
> msgSent - The number of messages sent by a producer
> msgSizeSent - The total size of messages sent by a producer
> lastUUIDSent - The UUID of the last message sent
>  
> The producer views are currently quite broken, different protocols show different producer info and number of producers, this is because in core we add a single producer per session which means you get 2 for ecey core session. Im changing this to be a producer for every address sent to. For normal producers this will now show s single producer for every protocol, for anon producers this will show a producer for every address sent to. For DOS protection this will max on 100 producers and they will also be torn down when the session is closed.
>  
> Ive also move the use of targetAddressInfos into the server producer for consistencey.
>  
> Other improvements
>  * Consolidate the names used by the different methods to be more consistent and referenced by static variables.
>  * use statics in all the tests
>  * add tests for different message count scenarios



--
This message was sent by Atlassian Jira
(v8.20.10#820010)