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"
+}