Claus Ibsen created CAMEL-25237:
-----------------------------------
Summary: camel-core - Switch EIP should count the messages per case
Key: CAMEL-25237
URL: https://issues.apache.org/jira/browse/CAMEL-25237
Project: Camel
Issue Type: Improvement
Components: camel-core
Reporter: Claus Ibsen
Fix For: 4.23.0
The Switch EIP (CAMEL-24988) is a decision table: a selector, then {{value ->
uri}} cases and an otherwise. At runtime only the switch itself and its
otherwise are managed processors with statistics. The cases have none, so there
is no way to see how many messages each case received.
*Reproduce*
{code:yaml}
- route:
id: specialist-dispatch
from:
uri: direct:dispatch
steps:
- switch:
selector:
exchangeProperty:
expression: specialist
case:
- value: reservation
uri: "a2a:{{agents.reservation.url}}"
- value: weather
uri: "a2a:{{agents.weather.url}}"
otherwise:
uri: direct:unsupported-specialist
{code}
Send some messages, then run {{camel get processor}}: it lists {{switch1}} (109
messages) and {{switch1-otherwise}} (22), but no {{case1}}, {{case2}}, ... The
route structure dump ({{camel cmd route-structure --json}}) has statistics for
{{switch1}} and {{switch1-otherwise}}, and none for the {{case}} nodes. So the
87 messages that went to the cases cannot be told apart.
*Where*
{{JmxManagementLifecycleStrategy.registerPerformanceCounters}} already prepares
the case sends ({{SwitchCaseDefinition.prepareToDefinition()}}) and registers
counters for them, as it does for the otherwise. Yet no managed processor ends
up registered for a case. A likely cause is the ids:
* The otherwise send takes its id from the switch ({{switch1-otherwise}}),
which already has one when management runs.
* A case gets its id later, in {{SwitchReifier}} ({{c.idOrCreate(ids)}}), after
management has prepared its send without one.
This needs to be confirmed.
*Expected*
Each case send is a managed processor with the case's id ({{case1}}, ... or a
custom id), like the otherwise. Then:
* {{camel get processor}} lists every case;
* the route structure has statistics for each case node;
* the JMX MBeans and the dev consoles count each case;
* the counts of the cases and the otherwise add up to the switch's total.
The route diagram in camel-jbang draws a Switch as a decision table with a
count per row and shows it as soon as the cases have statistics
(apache/camel#27228).
_Claude Code on behalf of davsclaus_
--
This message was sent by Atlassian Jira
(v8.20.10#820010)