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)