This is an automated email from the ASF dual-hosted git repository. zbendhiba pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel-quarkus-examples.git
commit 4e7e9ea25ec1762c4b947a71273cb7cebb017d87 Author: Lukas Lowinger <[email protected]> AuthorDate: Tue Aug 9 11:54:17 2022 +0200 Support for running on Kubernetes and OCP + possibility to run two separete connected apps --- observability/README.adoc | 9 +---- observability/pom.xml | 38 +++++++++++++++++++++- .../main/java/org/acme/observability/Routes.java | 8 ++--- .../observability/{Routes.java => TimerRoute.java} | 10 ++---- .../tracing/LoggingSpanExporterProducer.java | 2 +- .../src/main/resources/application.properties | 10 ++++-- .../org/acme/observability/ObservabilityTest.java | 7 ++++ 7 files changed, 60 insertions(+), 24 deletions(-) diff --git a/observability/README.adoc b/observability/README.adoc index 5a697a9..2f2aee7 100644 --- a/observability/README.adoc +++ b/observability/README.adoc @@ -31,13 +31,6 @@ To view all Camel metrics do: $ curl localhost:8080/q/metrics/application ---- -To retrieve metrics in JSON format, pass the `Accept` HTTP header in the request: - -[source,shell] ----- -$ curl -s -H"Accept: application/json" localhost:8080/q/metrics/application ----- - === Health endpoint Camel provides some out of the box liveness and readiness checks. To see this working, interrogate the `/q/health/live` and `/q/health/ready` endpoints: @@ -92,7 +85,7 @@ $ docker-compose up -d With the server running, browse to http://localhost:16686. Then choose 'camel-quarkus-observability' from the 'Service' drop down and click the 'Find Traces' button. -The `netty-http` consumer route introduces a random delay to simulate latency, hence the overall time of each trace should be different. When viewing a trace, you should see +The `platform-http` consumer route introduces a random delay to simulate latency, hence the overall time of each trace should be different. When viewing a trace, you should see a hierarchy of 3 spans showing the progression of the message exchange through each endpoint. For convenience, tracing events are also logged to the application console. diff --git a/observability/pom.xml b/observability/pom.xml index d71bf78..5657123 100644 --- a/observability/pom.xml +++ b/observability/pom.xml @@ -80,7 +80,11 @@ </dependency> <dependency> <groupId>org.apache.camel.quarkus</groupId> - <artifactId>camel-quarkus-netty-http</artifactId> + <artifactId>camel-quarkus-platform-http</artifactId> + </dependency> + <dependency> + <groupId>org.apache.camel.quarkus</groupId> + <artifactId>camel-quarkus-http</artifactId> </dependency> <dependency> <groupId>org.apache.camel.quarkus</groupId> @@ -392,6 +396,38 @@ </plugins> </build> </profile> + <profile> + <id>kubernetes</id> + <activation> + <property> + <name>kubernetes</name> + </property> + </activation> + <dependencies> + <dependency> + <groupId>io.quarkus</groupId> + <artifactId>quarkus-kubernetes</artifactId> + </dependency> + <dependency> + <groupId>io.quarkus</groupId> + <artifactId>quarkus-container-image-jib</artifactId> + </dependency> + </dependencies> + </profile> + <profile> + <id>openshift</id> + <activation> + <property> + <name>openshift</name> + </property> + </activation> + <dependencies> + <dependency> + <groupId>io.quarkus</groupId> + <artifactId>quarkus-openshift</artifactId> + </dependency> + </dependencies> + </profile> </profiles> </project> diff --git a/observability/src/main/java/org/acme/observability/Routes.java b/observability/src/main/java/org/acme/observability/Routes.java index 8f1be8f..27bf12d 100644 --- a/observability/src/main/java/org/acme/observability/Routes.java +++ b/observability/src/main/java/org/acme/observability/Routes.java @@ -22,11 +22,11 @@ public class Routes extends RouteBuilder { @Override public void configure() throws Exception { - // Invokes a simple greeting endpoint every 10 seconds - from("timer:greeting?period=10000") - .to("netty-http:http://localhost:8099/greeting"); + from("platform-http:/greeting") + .removeHeaders("*") + .to("http://localhost:{{greeting-provider-app.service.port}}/greeting-provider"); - from("netty-http:0.0.0.0:8099/greeting") + from("platform-http:/greeting-provider") // Random delay to simulate latency .delay(simple("${random(1000, 5000)}")) .setBody(constant("Hello From Camel Quarkus!")); diff --git a/observability/src/main/java/org/acme/observability/Routes.java b/observability/src/main/java/org/acme/observability/TimerRoute.java similarity index 71% copy from observability/src/main/java/org/acme/observability/Routes.java copy to observability/src/main/java/org/acme/observability/TimerRoute.java index 8f1be8f..0b8fd0f 100644 --- a/observability/src/main/java/org/acme/observability/Routes.java +++ b/observability/src/main/java/org/acme/observability/TimerRoute.java @@ -18,17 +18,11 @@ package org.acme.observability; import org.apache.camel.builder.RouteBuilder; -public class Routes extends RouteBuilder { +public class TimerRoute extends RouteBuilder { @Override public void configure() throws Exception { - // Invokes a simple greeting endpoint every 10 seconds from("timer:greeting?period=10000") - .to("netty-http:http://localhost:8099/greeting"); - - from("netty-http:0.0.0.0:8099/greeting") - // Random delay to simulate latency - .delay(simple("${random(1000, 5000)}")) - .setBody(constant("Hello From Camel Quarkus!")); + .to("http://{{greeting-app.service.host}}:{{greeting-app.service.port}}/greeting"); } } diff --git a/observability/src/main/java/org/acme/observability/tracing/LoggingSpanExporterProducer.java b/observability/src/main/java/org/acme/observability/tracing/LoggingSpanExporterProducer.java index e3ccd2d..d9fed66 100644 --- a/observability/src/main/java/org/acme/observability/tracing/LoggingSpanExporterProducer.java +++ b/observability/src/main/java/org/acme/observability/tracing/LoggingSpanExporterProducer.java @@ -30,6 +30,6 @@ public class LoggingSpanExporterProducer { @Produces public SpanExporter loggingSpanExporter() { - return LoggingSpanExporter.create(); + return new LoggingSpanExporter(); } } diff --git a/observability/src/main/resources/application.properties b/observability/src/main/resources/application.properties index d604261..66fde5c 100644 --- a/observability/src/main/resources/application.properties +++ b/observability/src/main/resources/application.properties @@ -24,9 +24,9 @@ quarkus.banner.enabled = false quarkus.application.name=camel-quarkus-observability # For OTLP -quarkus.opentelemetry.tracer.exporter.otlp.endpoint=http://localhost:4317 +quarkus.opentelemetry.tracer.exporter.otlp.endpoint=http://${TELEMETRY_COLLECTOR_COLLECTOR_SERVICE_HOST:localhost}:4317 # For Jaeger -# quarkus.opentelemetry.tracer.exporter.jaeger.endpoint=http://localhost:14250 +# quarkus.opentelemetry.tracer.exporter.jaeger.endpoint=http://${MY_JAEGER_COLLECTOR_SERVICE_HOST:localhost}:14250 # Allow metrics to be exported as JSON. Not strictly required and is disabled by default quarkus.micrometer.export.json.enabled = true @@ -35,3 +35,9 @@ quarkus.micrometer.export.json.enabled = true # Camel # camel.context.name = camel-quarkus-observability +greeting-app.service.host=${CAMEL_QUARKUS_OBSERVABILITY_SERVICE_HOST:localhost} +greeting-app.service.port=${CAMEL_QUARKUS_OBSERVABILITY_SERVICE_PORT_HTTP:${quarkus.http.port}} +%test.greeting-app.service.port=${quarkus.http.test-port} +greeting-provider-app.service.host=localhost +greeting-provider-app.service.port=${quarkus.http.port} +%test.greeting-provider-app.service.port=${quarkus.http.test-port} diff --git a/observability/src/test/java/org/acme/observability/ObservabilityTest.java b/observability/src/test/java/org/acme/observability/ObservabilityTest.java index e87b19a..319ac86 100644 --- a/observability/src/test/java/org/acme/observability/ObservabilityTest.java +++ b/observability/src/test/java/org/acme/observability/ObservabilityTest.java @@ -30,6 +30,13 @@ import static org.junit.jupiter.api.Assertions.assertTrue; @QuarkusTest public class ObservabilityTest { + @Test + public void greeting() { + RestAssured.get("/greeting") + .then() + .statusCode(200); + } + @Test public void metrics() { // Verify Camel metrics are available
