This project leverages Red Hat build of Quarkus 3.8.x, the Supersonic Subatomic Java Framework. More specifically, the project is implemented using Red Hat build of Apache Camel 4.4.x for Quarkus.
It exposes the following RESTful service endpoints using Apache Camel REST DSL and the Apache Camel Quarkus Platform HTTP extension:
/webhook/amqpbridge
:- Webhook ping endpoint through the
GET
HTTP method. - Sends RHOAM Admin/Developer Portal webhook XML event to an AMQP address (
RHOAM.WEBHOOK.EVENTS.QUEUE
) through thePOST
HTTP method.
- Webhook ping endpoint through the
/openapi.json
: returns the OpenAPI 3.0 specification for the service./q/health
: returns the Camel Quarkus MicroProfile health checks/q/metrics
: the Camel Quarkus MicroProfile metrics
Moreover, this project leverages the Quarkus Kubernetes-Config extenstion in order to customize the run-time AMQP broker connection parameters according to your environment through the quarkus-amqpbroker-connection-secret
secret. For instance:
apiVersion: v1
kind: Secret
metadata:
name: quarkus-amqpbroker-connection-secret
stringData:
integrations-broker.url: amqps://amq-ssl-broker-amqp-0-svc.amq7-broker-cluster.svc:5672?transport.trustAll=true&transport.verifyHost=false&amqp.idleTimeout=120000
integrations-broker.username: camel-quarkus-rhoam-webhook-handler-api
integrations-broker.password: P@ssw0rd
integrations-broker.pool-max-connections: "1"
integrations-broker.max-sessions-per-connection: "500"
type: Opaque
- JDK 21 installed with
JAVA_HOME
configured appropriately - Apache Maven 3.8.1+
- An AMQP 1.0 protocol compliant broker should already be installed and running. Red Hat AMQ 7.10 broker on OpenShift with an SSL-enabled AMQP acceptor has been used for testing.
- OPTIONAL: Jaeger, a distributed tracing system for observability (open tracing). 💡 A simple way of starting a Jaeger tracing server is with
docker
orpodman
:- Start the Jaeger tracing server:
podman run --rm -e COLLECTOR_ZIPKIN_HOST_PORT=:9411 -e COLLECTOR_OTLP_ENABLED=true \ -p 6831:6831/udp -p 6832:6832/udp \ -p 5778:5778 -p 16686:16686 -p 4317:4317 -p 4318:4318 -p 14250:14250 -p 14268:14268 -p 14269:14269 -p 9411:9411 \ quay.io/jaegertracing/all-in-one:latest
- While the server is running, browse to http://localhost:16686 to view tracing events.
- Start the Jaeger tracing server:
You can run your application in dev mode that enables live coding using:
./mvnw clean compile quarkus:dev
NOTE: Quarkus now ships with a Dev UI, which is available in dev mode only at http://localhost:8080/q/dev/.
The application can be packaged using:
./mvnw package
It produces the quarkus-run.jar
file in the target/quarkus-app/
directory.
Be aware that it’s not an über-jar as the dependencies are copied into the target/quarkus-app/lib/
directory.
The application is now runnable using:
java -Dquarkus.kubernetes-config.enabled=false -jar target/quarkus-app/quarkus-run.jar
If you want to build an über-jar, execute the following command:
./mvnw package -Dquarkus.package.type=uber-jar
The application, packaged as an über-jar, is now runnable using:
java -Dquarkus.kubernetes-config.enabled=false -jar target/*-runner.jar
According to your environment, you may want to customize:
- The AMQP broker connection parameters by adding the following run-time system properties:
integrations-broker.url
integrations-broker.username
integrations-broker.password
- The Jaeger collector endpoint by adding the following run-time system properties:
quarkus.opentelemetry.tracer.exporter.otlp.endpoint
Example:
java -Dintegrations-broker.url="amqps://amq-ssl-broker-amqp-0-svc-rte-amq7-broker-cluster.apps.ocp4.jnyilimb.eu:443?transport.trustAll=true&transport.verifyHost=false&amqp.idleTimeout=120000" -Dquarkus.opentelemetry.tracer.exporter.otlp.endpoint="http://localhost:4317" -jar target/quarkus-app/quarkus-run.jar
- Access to a Red Hat OpenShift cluster v3 or v4
- User has self-provisioner privilege or has access to a working OpenShift project
- An AMQP 1.0 protocol compliant broker should already be installed and running. Red Hat AMQ 7.10 broker on OpenShift with an SSL-enabled AMQP acceptor has been used for testing.
-
Login to the OpenShift cluster
oc login ...
-
Create an OpenShift project or use your existing OpenShift project. For instance, to create
ceq-services-jvm
oc new-project ceq-services-jvm --display-name="Red Hat build of Apache Camel for Quarkus Apps - JVM Mode"
-
Create an
allInOne
Jaeger instance.- IF NOT ALREADY INSTALLED:
- Install, via OLM, the
Red Hat OpenShift distributed tracing platform
(Jaeger) operator with anAllNamespaces
scope.⚠️ Needscluster-admin
privilegesoc apply -f - <<EOF apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: jaeger-product namespace: openshift-operators spec: channel: stable installPlanApproval: Automatic name: jaeger-product source: redhat-operators sourceNamespace: openshift-marketplace EOF
- Verify the successful installation of the
Red Hat OpenShift distributed tracing platform
operatorwatch oc get sub,csv
- Install, via OLM, the
- Create the
allInOne
Jaeger instance.oc apply -f - <<EOF apiVersion: jaegertracing.io/v1 kind: Jaeger metadata: name: jaeger-all-in-one-inmemory spec: allInOne: options: log-level: info strategy: allInOne EOF
- IF NOT ALREADY INSTALLED:
-
Use either the S2I binary workflow or S2I source workflow to deploy the
camel-quarkus-rhoam-webhook-handler-api
app as described below.
This leverages the Quarkus OpenShift extension and is only recommended for development and testing purposes.
./mvnw clean package -Dquarkus.openshift.deploy=true -Dquarkus.container-image.group=ceq-services-jvm
-
Make sure the latest supported OpenJDK 21 image is imported in OpenShift
oc import-image --confirm openjdk-17-ubi8 \ --from=registry.access.redhat.com/ubi8/openjdk-17:1.11 \ -n openshift
-
Create the
view-secrets
role and bind it, along with theview
cluster role, to thedefault
service account used to run the quarkus application. These permissions allow thedefault
service account to access secrets.oc apply -f <(echo ' --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: view-secrets rules: - apiGroups: - "" resources: - secrets verbs: - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: default:view roleRef: kind: ClusterRole apiGroup: rbac.authorization.k8s.io name: view subjects: - kind: ServiceAccount name: default --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: default:view-secrets roleRef: kind: Role apiGroup: rbac.authorization.k8s.io name: view-secrets subjects: - kind: ServiceAccount name: default ')
-
Create the
camel-quarkus-rhoam-webhook-handler-api
OpenShift application from the git repositoryoc new-app https://github.com/jeannyil-apis-playground/apicurio-generated-projects.git \ --context-dir=camel-quarkus-rhoam-webhook-handler-api \ --name=camel-quarkus-rhoam-webhook-handler-api \ --image-stream="openshift/openjdk-17-ubi8" \ --labels=app.openshift.io/runtime=camel
-
Follow the log of the S2I build
oc logs bc/camel-quarkus-rhoam-webhook-handler-api -f
Cloning "https://github.com/jeannyil-apis-playground/apicurio-generated-projects.git" ... Commit: bcb6e69e2f0285ef1e9dcdb4abb47ede80fb43e1 (Adapted S2I Configuration to RH build of Quarkus v2.2.3.Final-redhat-00013) Author: jeanNyil <[email protected]> Date: Wed Nov 24 13:32:03 2021 +0100 [...] Successfully pushed image-registry.openshift-image-registry.svc:5000/ceq-services-jvm/camel-quarkus-rhoam-webhook-handler-api@sha256:9932efcb67f775fcecef2055892c01ac337f64d7cc55f96197edda537536f424 Push successful
-
Create a non-secure route to expose the
camel-quarkus-rhoam-webhook-handler-api
service outside the OpenShift clusteroc expose svc/camel-quarkus-rhoam-webhook-handler-api
-
Get the OpenShift route hostname
URL="https://$(oc get route camel-quarkus-rhoam-webhook-handler-api -o jsonpath='{.spec.host}')"
-
Test the
/webhook/amqpbridge
endpoint-
GET /webhook/amqpbridge
:http -v $URL/webhook/amqpbridge
[...] HTTP/1.1 200 OK [...] Content-Type: application/json [...] breadcrumbId: 43EB8F0221CD24E-0000000000000001 transfer-encoding: chunked { "status": "OK" }
-
POST /webhook/amqpbridge
:-
OK
response:echo '<?xml version="1.0" encoding="UTF-8"?> <event> <action>updated</action> <type>account</type> <object> <account> <id>6</id> <created_at>2021-05-14T20:22:53Z</created_at> <updated_at>2021-05-14T20:22:53Z</updated_at> <state>approved</state> <org_name>TestAccount</org_name> <extra_fields/> <monthly_billing_enabled>true</monthly_billing_enabled> <monthly_charging_enabled>true</monthly_charging_enabled> <credit_card_stored>false</credit_card_stored> <plans> <plan default="true"> <id>6</id> <name>Default</name> <type>account_plan</type> <state>hidden</state> <approval_required>false</approval_required> <setup_fee>0.0</setup_fee> <cost_per_month>0.0</cost_per_month> <trial_period_days/> <cancellation_period>0</cancellation_period> </plan> </plans> <users> <user> <id>9</id> <created_at>2021-05-14T20:22:53Z</created_at> <updated_at>2021-05-14T20:22:53Z</updated_at> <account_id>6</account_id> <state>pending</state> <role>admin</role> <username>admin</username> <email>[email protected]</email> <extra_fields/> </user> </users> </account> </object> </event>' | http -v POST $URL/webhook/amqpbridge content-type:application/xml
[...] HTTP/1.1 200 OK Access-Control-Allow-Headers: Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers Access-Control-Allow-Methods: GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, CONNECT, PATCH Access-Control-Allow-Origin: * Access-Control-Max-Age: 3600 Content-Type: application/json RHOAM_EVENT_ACTION: updated RHOAM_EVENT_TYPE: account Set-Cookie: 0d5acfcb0ca2b6f2520831b8d4bd4031=f3580c9af577adb49be04813506f5ec6; path=/; HttpOnly breadcrumbId: 43EB8F0221CD24E-0000000000000002 transfer-encoding: chunked { "status": "OK" }
-
KO
response:echo 'PLAIN TEXT' | http -v POST $URL/webhook/amqpbridge content-type:application/xml
[...] HTTP/1.1 400 Bad Request Access-Control-Allow-Headers: Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers Access-Control-Allow-Methods: GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, CONNECT, PATCH Access-Control-Allow-Origin: * Access-Control-Max-Age: 3600 Content-Type: application/json Set-Cookie: 0d5acfcb0ca2b6f2520831b8d4bd4031=f3580c9af577adb49be04813506f5ec6; path=/; HttpOnly breadcrumbId: 43EB8F0221CD24E-0000000000000003 transfer-encoding: chunked { "error": { "code": "400", "description": "Bad Request", "message": "org.apache.camel.TypeConversionException: Error during type conversion from type: java.lang.String to the required type: org.w3c.dom.Document with value PLAIN TEXT\n due to org.xml.sax.SAXParseException: Content is not allowed in prolog." }, "status": "KO" }
-
-
-
Test the
/openapi.json
endpointhttp -v $URL/openapi.json
[...] HTTP/1.1 200 OK Accept: */* [...] Content-Type: application/vnd.oai.openapi+json [...] breadcrumbId: DFB5B53061B9578-0000000000000002 transfer-encoding: chunked { "components": { "schemas": { "ErrorMessageType": { "description": "Error message type ", [...] "info": { "contact": { "name": "Jean Nyilimbibi" }, "description": "API that handles RHOAM Admin/Developer Portals webhook events", "license": { "name": "MIT License", "url": "https://opensource.org/licenses/MIT" }, "title": "RHOAM Webhook Events Handler API", "version": "1.0.0" }, "openapi": "3.0.2", [...] }, "servers": [ { "description": "API Backend URL", "url": "http://rhoam-webhook-events-handler-api.apps.ocp4.jnyilimb.eu" } ] }
-
Test the
/q/health
endpointhttp -v $URL/q/health
HTTP/1.1 200 OK Set-Cookie: 0d5acfcb0ca2b6f2520831b8d4bd4031=2cd3ddf89a39206056fcce59b93f59aa; path=/; HttpOnly cache-control: private content-length: 647 content-type: application/json; charset=UTF-8 set-cookie: 0d5acfcb0ca2b6f2520831b8d4bd4031=2cd3ddf89a39206056fcce59b93f59aa; path=/; HttpOnly { "checks": [ { "name": "camel-liveness-checks", "status": "UP" }, { "data": { "context": "UP", "route:generate-error-response-route": "UP", "route:get-openapi-spec-route": "UP", "route:ping-webhook-route": "UP", "route:send-to-amqp-queue-route": "UP", "route:webhook-amqpbridge-handler-route": "UP", "route:webhook-amqpbridge-ping-route": "UP" }, "name": "camel-readiness-checks", "status": "UP" } ], "status": "UP" }
-
Test the
/q/health/live
endpointhttp -v $URL/q/health/live
HTTP/1.1 200 OK Set-Cookie: 0d5acfcb0ca2b6f2520831b8d4bd4031=a9c4acc377212f7232380c78ddbbf21f; path=/; HttpOnly cache-control: private content-length: 138 content-type: application/json; charset=UTF-8 set-cookie: 0d5acfcb0ca2b6f2520831b8d4bd4031=a9c4acc377212f7232380c78ddbbf21f; path=/; HttpOnly { "checks": [ { "name": "camel-liveness-checks", "status": "UP" } ], "status": "UP" }
-
Test the
/q/health/ready
endpointhttp -v $URL/q/health/ready
HTTP/1.1 200 OK Set-Cookie: 0d5acfcb0ca2b6f2520831b8d4bd4031=a9c4acc377212f7232380c78ddbbf21f; path=/; HttpOnly cache-control: private content-length: 554 content-type: application/json; charset=UTF-8 set-cookie: 0d5acfcb0ca2b6f2520831b8d4bd4031=a9c4acc377212f7232380c78ddbbf21f; path=/; HttpOnly { "checks": [ { "data": { "context": "UP", "route:generate-error-response-route": "UP", "route:get-openapi-spec-route": "UP", "route:ping-webhook-route": "UP", "route:send-to-amqp-queue-route": "UP", "route:webhook-amqpbridge-handler-route": "UP", "route:webhook-amqpbridge-ping-route": "UP" }, "name": "camel-readiness-checks", "status": "UP" } ], "status": "UP" }
-
Test the
/q/metrics
endpointhttp -v $URL/q/metrics
[...] HTTP/1.1 200 OK Access-Control-Allow-Credentials: true Access-Control-Allow-Headers: origin, content-type, accept, authorization Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS, HEAD Access-Control-Allow-Origin: * Access-Control-Max-Age: 1209600 Cache-control: private Content-Type: text/plain Set-Cookie: 0d5acfcb0ca2b6f2520831b8d4bd4031=c1552cc3572cec4462da37f30dd5423d; path=/; HttpOnly content-length: 38276 [...] # HELP application_camel_context_exchanges_total The total number of exchanges for a route or Camel Context # TYPE application_camel_context_exchanges_total counter application_camel_context_exchanges_total{camelContext="camel-1"} 5.0 [...] # HELP application_camel_route_count The count of routes. # TYPE application_camel_route_count gauge application_camel_route_count{camelContext="camel-1"} 6.0 # HELP application_camel_route_exchanges_completed_total The total number of completed exchanges for a route or Camel Context # TYPE application_camel_route_exchanges_completed_total counter application_camel_route_exchanges_completed_total{camelContext="camel-1",routeId="generate-error-response-route"} 0.0 application_camel_route_exchanges_completed_total{camelContext="camel-1",routeId="get-openapi-spec-route"} 1.0 application_camel_route_exchanges_completed_total{camelContext="camel-1",routeId="ping-webhook-route"} 0.0 application_camel_route_exchanges_completed_total{camelContext="camel-1",routeId="send-to-amqp-queue-route"} 1.0 application_camel_route_exchanges_completed_total{camelContext="camel-1",routeId="webhook-amqpbridge-handler-route"} 1.0 application_camel_route_exchanges_completed_total{camelContext="camel-1",routeId="webhook-amqpbridge-ping-route"} 0.0 [...] # HELP application_camel_route_exchanges_total The total number of exchanges for a route or Camel Context # TYPE application_camel_route_exchanges_total counter application_camel_route_exchanges_total{camelContext="camel-1",routeId="generate-error-response-route"} 2.0 application_camel_route_exchanges_total{camelContext="camel-1",routeId="get-openapi-spec-route"} 1.0 application_camel_route_exchanges_total{camelContext="camel-1",routeId="ping-webhook-route"} 1.0 application_camel_route_exchanges_total{camelContext="camel-1",routeId="send-to-amqp-queue-route"} 3.0 application_camel_route_exchanges_total{camelContext="camel-1",routeId="webhook-amqpbridge-handler-route"} 3.0 application_camel_route_exchanges_total{camelContext="camel-1",routeId="webhook-amqpbridge-ping-route"} 1.0 [...]
You can create a native executable using: ./mvnw package -Pnative
.
Or, if you don't have GraalVM installed, you can run the native executable build in a container using: ./mvnw package -Pnative -Dquarkus.native.container-build=true
.
You can then execute your native executable with: ./target/camel-quarkus-rhoam-webhook-handler-api-1.0.0-runner
If you want to learn more about building native executables, please consult https://quarkus.io/guides/building-native-image.
- OpenShift Serverless operator is installed. See Installing the OpenShift Serverless Operator.
- OpenShift Knative Serving is installed and verified. See Installing Knative Serving.
- For native compilation, a Linux X86_64 operating system or an OCI (Open Container Initiative) compatible container runtime, such as Podman or Docker is required.
- User has self-provisioner privilege or has access to a working OpenShift project
- An AMQP 1.0 protocol compliant broker should already be installed and running. Red Hat AMQ 7.10 broker on OpenShift with an SSL-enabled AMQP acceptor has been used for testing.
-
Login to the OpenShift cluster
oc login ...
-
Create an OpenShift project or use your existing OpenShift project. For instance, to create
ceq-services-serverless
oc new-project ceq-services-serverless --display-name="Red Hat build of Apache Camel for Quarkus Apps - Native Mode and Serverless"
-
Create an
allInOne
Jaeger instance.- IF NOT ALREADY INSTALLED:
- Install, via OLM, the
Red Hat OpenShift distributed tracing platform
(Jaeger) operator with anAllNamespaces
scope.⚠️ Needscluster-admin
privilegesoc apply -f - <<EOF apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: jaeger-product namespace: openshift-operators spec: channel: stable installPlanApproval: Automatic name: jaeger-product source: redhat-operators sourceNamespace: openshift-marketplace EOF
- Verify the successful installation of the
Red Hat OpenShift distributed tracing platform
operatorwatch oc get sub,csv
- Install, via OLM, the
- Create the
allInOne
Jaeger instance.oc apply -f - <<EOF apiVersion: jaegertracing.io/v1 kind: Jaeger metadata: name: jaeger-all-in-one-inmemory spec: allInOne: options: log-level: info strategy: allInOne EOF
- IF NOT ALREADY INSTALLED:
-
Package and deploy to OpenShift
- Using podman to build the native binary:
./mvnw clean package -Pnative -Dquarkus.native.container-runtime=podman \ -Dquarkus.native.builder-image=registry.access.redhat.com/quarkus/mandrel-21-jdk17-rhel8:latest \ -Dquarkus.openshift.deploy=true \ -Dquarkus.kubernetes.deployment-target=knative \ -Dquarkus.container-image.group=ceq-services-serverless
- Using docker to build the native binary:
./mvnw clean package -Pnative -Dquarkus.native.container-runtime=docker \ -Dquarkus.native.builder-image=registry.access.redhat.com/quarkus/mandrel-21-jdk17-rhel8:latest \ -Dquarkus.openshift.deploy=true \ -Dquarkus.kubernetes.deployment-target=knative \ -Dquarkus.container-image.group=ceq-services-serverless
- Using podman to build the native binary:
- OpenShift Container Platform 4.11.16 running on AWS
- Compute nodes types: m5a.4xlarge (16 vCPU / 64 GiB Memory)
2022-11-27 20:50:48,033 INFO [org.apa.cam.qua.cor.CamelBootstrapRecorder] (main) Bootstrap runtime: org.apache.camel.quarkus.main.CamelMainRuntime
2022-11-27 20:50:48,076 INFO [org.apa.cam.mai.BaseMainSupport] (main) Auto-configuration summary
2022-11-27 20:50:48,077 INFO [org.apa.cam.mai.BaseMainSupport] (main) camel.context.name=camel-quarkus-rhoam-webhook-handler-api
2022-11-27 20:50:48,278 INFO [org.apa.cam.lan.xpa.XPathBuilder] (main) Created default XPathFactory com.sun.org.apache.xpath.internal.jaxp.XPathFactoryImpl@6d6bff89
2022-11-27 20:50:48,301 INFO [org.mes.poo.jms.JmsPoolConnectionFactory] (main) Provided ConnectionFactory implementation is JMS 2.0+ capable.
2022-11-27 20:50:48,420 INFO [org.apa.cam.imp.eng.AbstractCamelContext] (main) StreamCaching is enabled on CamelContext: camel-quarkus-rhoam-webhook-handler-api
2022-11-27 20:50:48,433 INFO [org.apa.cam.imp.eng.DefaultStreamCachingStrategy] (main) StreamCaching in use with spool directory: /tmp/camel/camel-tmp-7D1C7036D3CC53E-0000000000000000 and rules: [Spool > 128K body size]
2022-11-27 20:50:48,444 INFO [org.apa.cam.imp.eng.AbstractCamelContext] (main) Routes startup (total:6 started:6)
2022-11-27 20:50:48,444 INFO [org.apa.cam.imp.eng.AbstractCamelContext] (main) Started generate-error-response-route (direct://generateErrorResponse)
2022-11-27 20:50:48,444 INFO [org.apa.cam.imp.eng.AbstractCamelContext] (main) Started send-to-amqp-queue-route (direct://sendToAMQPQueue)
2022-11-27 20:50:48,444 INFO [org.apa.cam.imp.eng.AbstractCamelContext] (main) Started ping-webhook-route (direct://pingWebhook)
2022-11-27 20:50:48,444 INFO [org.apa.cam.imp.eng.AbstractCamelContext] (main) Started get-openapi-spec-route (rest://get:/openapi.json)
2022-11-27 20:50:48,445 INFO [org.apa.cam.imp.eng.AbstractCamelContext] (main) Started webhook-amqpbridge-ping-route (rest://get:/webhook/amqpbridge)
2022-11-27 20:50:48,445 INFO [org.apa.cam.imp.eng.AbstractCamelContext] (main) Started webhook-amqpbridge-handler-route (rest://post:/webhook/amqpbridge)
2022-11-27 20:50:48,445 INFO [org.apa.cam.imp.eng.AbstractCamelContext] (main) Apache Camel 3.14.2.redhat-00047 (camel-quarkus-rhoam-webhook-handler-api) started in 292ms (build:0ms init:267ms start:25ms)
2022-11-27 20:50:48,541 INFO [io.quarkus] (main) camel-quarkus-rhoam-webhook-handler-api 1.0.0 on JVM (powered by Quarkus 2.13.7.SP1-redhat-00001) started in 2.594s. Listening on: http://0.0.0.0:8080
2022-11-27 20:50:48,541 INFO [io.quarkus] (main) Profile prod activated.
2022-11-27 20:50:48,541 INFO [io.quarkus] (main) Installed features: [camel-attachments, camel-bean, camel-core, camel-direct, camel-jackson, camel-jms, camel-microprofile-health, camel-microprofile-metrics, camel-openapi-java, camel-opentracing, camel-platform-http, camel-rest, camel-xpath, cdi, config-yaml, jaeger, kubernetes, kubernetes-client, qpid-jms, smallrye-context-propagation, smallrye-health, smallrye-metrics, smallrye-opentracing, vertx]
2022-11-27 21:44:27,061 INFO [org.apa.cam.qua.cor.CamelBootstrapRecorder] (main) Bootstrap runtime: org.apache.camel.quarkus.main.CamelMainRuntime
2022-11-27 21:44:27,064 INFO [org.apa.cam.mai.BaseMainSupport] (main) Auto-configuration summary
2022-11-27 21:44:27,064 INFO [org.apa.cam.mai.BaseMainSupport] (main) camel.context.name=camel-quarkus-rhoam-webhook-handler-api
2022-11-27 21:44:27,067 INFO [org.apa.cam.lan.xpa.XPathBuilder] (main) Created default XPathFactory com.sun.org.apache.xpath.internal.jaxp.XPathFactoryImpl@6e1cf917
2022-11-27 21:44:27,068 INFO [org.mes.poo.jms.JmsPoolConnectionFactory] (main) Provided ConnectionFactory implementation is JMS 2.0+ capable.
2022-11-27 21:44:27,074 INFO [org.apa.cam.imp.eng.AbstractCamelContext] (main) StreamCaching is enabled on CamelContext: camel-quarkus-rhoam-webhook-handler-api
2022-11-27 21:44:27,075 INFO [org.apa.cam.imp.eng.DefaultStreamCachingStrategy] (main) StreamCaching in use with spool directory: /tmp/camel/camel-tmp-DBA2E4F75088EE3-0000000000000000 and rules: [Spool > 128K body size]
2022-11-27 21:44:27,076 INFO [org.apa.cam.imp.eng.AbstractCamelContext] (main) Routes startup (total:6 started:6)
2022-11-27 21:44:27,076 INFO [org.apa.cam.imp.eng.AbstractCamelContext] (main) Started send-to-amqp-queue-route (direct://sendToAMQPQueue)
2022-11-27 21:44:27,076 INFO [org.apa.cam.imp.eng.AbstractCamelContext] (main) Started ping-webhook-route (direct://pingWebhook)
2022-11-27 21:44:27,076 INFO [org.apa.cam.imp.eng.AbstractCamelContext] (main) Started generate-error-response-route (direct://generateErrorResponse)
2022-11-27 21:44:27,076 INFO [org.apa.cam.imp.eng.AbstractCamelContext] (main) Started get-openapi-spec-route (rest://get:/openapi.json)
2022-11-27 21:44:27,076 INFO [org.apa.cam.imp.eng.AbstractCamelContext] (main) Started webhook-amqpbridge-ping-route (rest://get:/webhook/amqpbridge)
2022-11-27 21:44:27,076 INFO [org.apa.cam.imp.eng.AbstractCamelContext] (main) Started webhook-amqpbridge-handler-route (rest://post:/webhook/amqpbridge)
2022-11-27 21:44:27,076 INFO [org.apa.cam.imp.eng.AbstractCamelContext] (main) Apache Camel 3.14.2.redhat-00047 (camel-quarkus-rhoam-webhook-handler-api) started in 11ms (build:0ms init:9ms start:2ms)
2022-11-27 21:44:27,078 INFO [io.quarkus] (main) camel-quarkus-rhoam-webhook-handler-api 1.0.0 native (powered by Quarkus 2.13.7.SP1-redhat-00001) started in 0.162s. Listening on: http://0.0.0.0:8080
2022-11-27 21:44:27,078 INFO [io.quarkus] (main) Profile prod activated.
2022-11-27 21:44:27,078 INFO [io.quarkus] (main) Installed features: [camel-attachments, camel-bean, camel-core, camel-direct, camel-jackson, camel-jms, camel-microprofile-health, camel-microprofile-metrics, camel-openapi-java, camel-opentracing, camel-platform-http, camel-rest, camel-xpath, cdi, config-yaml, jaeger, kubernetes, kubernetes-client, qpid-jms, smallrye-context-propagation, smallrye-health, smallrye-metrics, smallrye-opentracing, vertx]
- AMQP 1.0 JMS client - Apache Qpid JMS (guide): Use JMS APIs with AMQP 1.0 servers such as ActiveMQ Artemis, ActiveMQ 5, Qpid Broker-J, Qpid Dispatch router, Azure Service Bus, and more
- OpenShift (guide): Generate OpenShift resources from annotations
- Camel Platform HTTP (guide): Expose HTTP endpoints using the HTTP server available in the current platform
- Camel Direct (guide): Call another endpoint from the same Camel Context synchronously
- Camel Jackson (guide): Marshal POJOs to JSON and back using Jackson
- YAML Configuration (guide): Use YAML to configure your Quarkus application
- Camel Bean (guide): Invoke methods of Java beans
- Camel OpenTelemetry (guide): Distributed tracing using OpenTelemetry
- Camel XPath (guide): Evaluates an XPath expression against an XML payload
- Camel OpenAPI Java (guide): Expose OpenAPI resources defined in Camel REST DSL
- Camel MicroProfile Health (guide): Expose Camel health checks via MicroProfile Health
- Camel MicroProfile Metrics (guide): Expose metrics from Camel routes
- Kubernetes Config (guide): Read runtime configuration from Kubernetes ConfigMaps and Secrets
- Camel JMS (guide): Sent and receive messages to/from a JMS Queue or Topic
- Camel Rest (guide): Expose REST services and their OpenAPI Specification or call external REST services
Configure your application with YAML
The Quarkus application configuration is located in src/main/resources/application.yml
.