Hi, I get stats like this:
ManagedCamelContext managed = context.getCamelContextExtension().getContextPlugin(ManagedCamelContext.class); ManagedRouteMBean route = managed.getManagedRoute(routeId); totalMessages = route.getExchangesTotal(); completedMessages = route.getExchangesCompleted(); failedMessages = route.getExchangesFailed(); inflightMessages = route.getExchangesInflight(); Hope this helps. Raymond On Mon, Apr 28, 2025 at 6:40 PM Mitch Trachtenberg <mjt...@gmail.com> wrote: > I am using Apache Camel 4.10.0 with Spring Boot. I'm able to retrieve route > statistics via jconsole and via a prometheus endpoint, but not by the > managed bean functions. I've tried a variety of approaches. My pom > includes camel-management at 4.10.0 and camel-micrometer-starter and > micrometer-registry-prometheus. Any and all suggestions welcome, and if > this is a known issue please let me know. > > This call, which is basically from ChatGPT and Gemini after some back and > forth insisting that certain proposed methods were not present in 4.10, > always returns zero. Please forgive my added System.out.printlns: > public long getCompletedExchanges(Route r) { > try { > ManagementStrategy managementStrategy = > camelContext.getManagementStrategy(); > ManagementObjectStrategy objectStrategy = > managementStrategy.getManagementObjectStrategy(); > System.out.println(managementStrategy); > System.out.println(objectStrategy); > ManagedRouteMBean routeMBean = (ManagedRouteMBean) > objectStrategy.getManagedObjectForRoute(camelContext, r); > System.out.println(routeMBean); > System.out.println(routeMBean.getExchangesTotal()); > if (routeMBean != null) { > return routeMBean.getExchangesTotal(); > } else { > return -1; > } > } catch (Exception e) { > e.printStackTrace(); > return -1; > } > } > Stdout gets: > org.apache.camel.management.JmxManagementStrategy@7f68ba0 > org.apache.camel.management.DefaultManagementObjectStrategy@42f4153a > org.apache.camel.management.mbean.ManagedSuspendableRoute@765776bf > 0 > > My /actuator/prometheus shows: > > > camel_exchanges_total{camelContext="MyCamel",eventType="context",kind="CamelRoute",routeId="",} > 68.0 > > camel_exchanges_total{camelContext="MyCamel",eventType="route",kind="CamelRoute",routeId="log-routename-every-two-seconds",} > 68.0 > > Jconsole also shows the count(s) properly. > > I call the method immediately prior to stopping a route about to be > stopped, and the route is successfully stopped after the function returns > 0: > LOG.warn("In stopRoute via /routes/.../stop"); > > LOG.warn(String.valueOf(ris.getCompletedExchanges(camelContext.getRoute(routeId)))); > try { > camelContext.getRouteController().stopRoute(routeId); > > Relevant parts of my application's yaml configuration: > > management: > endpoints: > web: > exposure: > include: > - "prometheus" > - "camelroutes" > - "metrics" > metrics: > enabled: true > camel: > main: > routes-builder-loader-ignore-loading-error: false > management: > enabled: true > jmxAgent: true > jmx: > statistic-enabled: true > statistics-enabled: true > # micrometer: > # enabled: false #true > # route-metrics: false #true >