This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-jbang-examples.git


The following commit(s) were added to refs/heads/main by this push:
     new b8849a1  CAMEL-23617: Add message size example
b8849a1 is described below

commit b8849a1a9a69489e65392b5700c2f41031362fa7
Author: Claus Ibsen <[email protected]>
AuthorDate: Tue May 26 16:33:54 2026 +0200

    CAMEL-23617: Add message size example
---
 camel-jbang-example-catalog.json     | 64 ++++++++++++++++++---------
 message-size/README.md               | 57 ++++++++++++++++++++++++
 message-size/message-size.camel.yaml | 85 ++++++++++++++++++++++++++++++++++++
 message-size/metadata.json           | 11 +++++
 4 files changed, 196 insertions(+), 21 deletions(-)

diff --git a/camel-jbang-example-catalog.json b/camel-jbang-example-catalog.json
index a45a48e..fca58c3 100644
--- a/camel-jbang-example-catalog.json
+++ b/camel-jbang-example-catalog.json
@@ -13,7 +13,7 @@
         "requiresDocker": false,
         "hasCitrusTests": false,
         "files": [
-            "README.adoc",
+            "README.md",
             "application.properties",
             "consumer.camel.yaml",
             "producer.camel.yaml"
@@ -35,7 +35,7 @@
         "requiresDocker": false,
         "hasCitrusTests": true,
         "files": [
-            "README.adoc",
+            "README.md",
             "application.properties",
             "aws-s3-cdc-log.camel.yaml",
             "example-file.txt",
@@ -58,7 +58,7 @@
         "requiresDocker": false,
         "hasCitrusTests": true,
         "files": [
-            "README.adoc",
+            "README.md",
             "application.properties",
             "http-to-aws-sqs.camel.yaml"
         ]
@@ -76,7 +76,7 @@
         "requiresDocker": false,
         "hasCitrusTests": false,
         "files": [
-            "README.adoc",
+            "README.md",
             "route.camel.yaml"
         ]
     },
@@ -95,7 +95,8 @@
         "requiresDocker": false,
         "hasCitrusTests": false,
         "files": [
-            "README.adoc",
+            "README.md",
+            "application.properties",
             "cron-log.camel.yaml"
         ]
     },
@@ -114,7 +115,7 @@
         "requiresDocker": true,
         "hasCitrusTests": false,
         "files": [
-            "README.adoc",
+            "README.md",
             "application.properties",
             "compose.yaml",
             "docling-langchain4j-rag.yaml",
@@ -136,7 +137,7 @@
         "requiresDocker": false,
         "hasCitrusTests": false,
         "files": [
-            "README.adoc",
+            "README.md",
             "application.properties",
             "examples/banking-sector-brief.pdf",
             "examples/magnificent-seven-update.pdf",
@@ -159,7 +160,7 @@
         "requiresDocker": true,
         "hasCitrusTests": true,
         "files": [
-            "README.adoc",
+            "README.md",
             "application.properties",
             "compose.yaml",
             "ftp.camel.yaml",
@@ -180,7 +181,7 @@
         "requiresDocker": false,
         "hasCitrusTests": false,
         "files": [
-            "README.adoc",
+            "README.md",
             "application.properties",
             "groovy.camel.yaml"
         ]
@@ -200,7 +201,7 @@
         "requiresDocker": false,
         "hasCitrusTests": false,
         "files": [
-            "README.adoc",
+            "README.md",
             "application.properties",
             "rest-api.camel.yaml"
         ]
@@ -220,11 +221,29 @@
         "requiresDocker": false,
         "hasCitrusTests": false,
         "files": [
-            "README.adoc",
+            "README.md",
             "application.properties",
             "rest-api.camel.yaml"
         ]
     },
+    {
+        "name": "message-size",
+        "title": "Message Size",
+        "description": "Track message body and header sizes per endpoint",
+        "level": "beginner",
+        "tags": [
+            "observability",
+            "monitoring",
+            "seda"
+        ],
+        "bundled": true,
+        "requiresDocker": false,
+        "hasCitrusTests": false,
+        "files": [
+            "README.md",
+            "message-size.camel.yaml"
+        ]
+    },
     {
         "name": "mqtt",
         "title": "MQTT",
@@ -239,7 +258,7 @@
         "requiresDocker": true,
         "hasCitrusTests": true,
         "files": [
-            "README.adoc",
+            "README.md",
             "application.properties",
             "compose.yaml",
             "infra/mosquitto.conf",
@@ -262,7 +281,7 @@
         "requiresDocker": false,
         "hasCitrusTests": false,
         "files": [
-            "README.adoc",
+            "README.md",
             "application.properties",
             "pii-redaction.camel.yaml",
             "pii.schema.json"
@@ -282,7 +301,7 @@
         "requiresDocker": false,
         "hasCitrusTests": true,
         "files": [
-            "README.adoc",
+            "README.md",
             "application.properties",
             "examples/1001.json",
             "petstore-api.json",
@@ -303,7 +322,7 @@
         "requiresDocker": false,
         "hasCitrusTests": true,
         "files": [
-            "README.adoc",
+            "README.md",
             "application.properties",
             "examples/pet/1000.json",
             "petstore-api.json",
@@ -324,7 +343,8 @@
         "requiresDocker": false,
         "hasCitrusTests": false,
         "files": [
-            "README.adoc",
+            "README.md",
+            "application.properties",
             "rest-api.camel.yaml"
         ]
     },
@@ -343,7 +363,8 @@
         "hasCitrusTests": false,
         "files": [
             "Greeter.java",
-            "README.adoc",
+            "README.md",
+            "application.properties",
             "beans.yaml",
             "routes.camel.yaml"
         ]
@@ -363,7 +384,7 @@
         "requiresDocker": false,
         "hasCitrusTests": true,
         "files": [
-            "README.adoc",
+            "README.md",
             "analyzer/application-dev.properties",
             "analyzer/error-analyzer.camel.yaml",
             "containers/caches/infinispan-events-config.json",
@@ -410,7 +431,7 @@
         "requiresDocker": true,
         "hasCitrusTests": false,
         "files": [
-            "README.adoc",
+            "README.md",
             "application.properties",
             "compose.yaml",
             "sql.camel.yaml"
@@ -430,7 +451,8 @@
         "requiresDocker": false,
         "hasCitrusTests": false,
         "files": [
-            "README.adoc",
+            "README.md",
+            "application.properties",
             "timer-log.camel.yaml"
         ]
     },
@@ -448,7 +470,7 @@
         "requiresDocker": false,
         "hasCitrusTests": false,
         "files": [
-            "README.adoc",
+            "README.md",
             "consumer.camel.yaml",
             "input/account.xml",
             "stylesheet.xsl"
diff --git a/message-size/README.md b/message-size/README.md
new file mode 100644
index 0000000..5332bdf
--- /dev/null
+++ b/message-size/README.md
@@ -0,0 +1,57 @@
+## Message Size
+
+This example demonstrates Camel's message size tracking feature, which captures
+body and header sizes per endpoint for both incoming (IN) and outgoing (OUT) 
directions.
+
+Three timer-driven producers simulate messages of different sizes (small, 
medium, large)
+using the `Content-Length` header and send them to separate SEDA endpoints.
+The size statistics (min, max, mean) are tracked per endpoint and can be 
viewed via the CLI.
+
+### How to run
+
+```sh
+$ camel run *
+```
+
+### Viewing message size statistics
+
+While the integration is running, open another terminal and use the `camel` CLI
+to view endpoint statistics including message sizes:
+
+```sh
+$ camel get endpoint
+```
+
+To see detailed min/max statistics:
+
+```sh
+$ camel get endpoint --verbose
+```
+
+To sort endpoints by body size (largest first):
+
+```sh
+$ camel get endpoint --sort -size
+```
+
+### How it works
+
+Message size tracking is automatically enabled when running with `camel run`
+which uses the dev profile. This sets:
+
+- `camel.main.messageSizeEnabled = true`
+- `camel.main.jmxManagementStatisticsLevel = Extended`
+
+Sizes are tracked per endpoint in the runtime endpoint registry. For incoming 
messages,
+the body and headers sizes are also available as exchange properties
+(`CamelMessageBodySize` and `CamelMessageHeadersSize`) during routing.
+
+### Help and contributions
+
+If you hit any problem using Camel or have some feedback, then please
+[let us know](https://camel.apache.org/community/support/).
+
+We also love contributors, so
+[get involved](https://camel.apache.org/community/contributing/) :-)
+
+The Camel riders!
diff --git a/message-size/message-size.camel.yaml 
b/message-size/message-size.camel.yaml
new file mode 100644
index 0000000..1093006
--- /dev/null
+++ b/message-size/message-size.camel.yaml
@@ -0,0 +1,85 @@
+# Producers: simulate different payload sizes using Content-Length header
+- route:
+    id: small-producer
+    from:
+      uri: timer:small
+      parameters:
+        period: 2000
+      steps:
+        - setHeader:
+            name: Content-Length
+            simple: "${random(100,1023)}"
+        - setHeader:
+            name: source
+            simple: small-producer
+        - to:
+            uri: seda:small
+
+- route:
+    id: medium-producer
+    from:
+      uri: timer:medium
+      parameters:
+        period: 3000
+      steps:
+        - setHeader:
+            name: Content-Length
+            simple: "${random(8192,18432)}"
+        - setHeader:
+            name: source
+            simple: medium-producer
+        - setHeader:
+            name: tracking-id
+            simple: "TRK-${random(10000,99999)}"
+        - to:
+            uri: seda:medium
+
+- route:
+    id: large-producer
+    from:
+      uri: timer:large
+      parameters:
+        period: 5000
+      steps:
+        - setHeader:
+            name: Content-Length
+            simple: "${random(10485760,20971520)}"
+        - setHeader:
+            name: source
+            simple: large-producer
+        - setHeader:
+            name: tracking-id
+            simple: "TRK-${random(10000,99999)}"
+        - setHeader:
+            name: batch-id
+            simple: "BATCH-${random(100,999)}"
+        - setHeader:
+            name: priority
+            simple: "${random(1,5)}"
+        - to:
+            uri: seda:large
+
+# Consumers: process messages from each seda endpoint
+- route:
+    id: process-small
+    from:
+      uri: seda:small
+      steps:
+        - log:
+            message: "Small: Content-Length=${header.Content-Length}"
+
+- route:
+    id: process-medium
+    from:
+      uri: seda:medium
+      steps:
+        - log:
+            message: "Medium: Content-Length=${header.Content-Length}"
+
+- route:
+    id: process-large
+    from:
+      uri: seda:large
+      steps:
+        - log:
+            message: "Large: Content-Length=${header.Content-Length}"
diff --git a/message-size/metadata.json b/message-size/metadata.json
new file mode 100644
index 0000000..ab71017
--- /dev/null
+++ b/message-size/metadata.json
@@ -0,0 +1,11 @@
+{
+    "title": "Message Size",
+    "description": "Track message body and header sizes per endpoint",
+    "tags": [
+        "observability",
+        "monitoring",
+        "seda"
+    ],
+    "bundled": true,
+    "level": "beginner"
+}

Reply via email to