What is Quarkus really used for?
Let's be Real. Quarkus in
the wild.
Markus Eisele
@myfear
1
Markus Eisele
Developer Adoption Lead EMEA
15 years developer and architect with Enterprise Java (Automotive, Finance,
Insurance)
6 years Developer Relations
150+ presentations, 200+ articles
twitter.com/myfear
markus@redhat.com
4
code.quarkus.io
5
6
Lufthansa Technik - AVIATAR
7
https://www.redhat.com/en/engage/quarkus-day-by-red-hat/on-demand
8
Main Use Cases
▸ Master complexity in a microservices system
▸ Wrap complex APIs
・ Notification API (encapsulation of external systems)
・ User API
・ Integrate SaaS offerings
▸ Resource usage reduction.
APICURIO Registry - All things APIs
9
APICURIO Registry - All things APIs and Schemas
10
https://www.apicur.io/
Main Use Cases
▸ There is one common Quarkus-based app
・ REST, rules, metrics, …
・ In-memory storage by default
・ Each (non In-memory) Storage is its own application
▸ Small footprint, no deps conflicts, …
▸ Single set of tests running against all storage types
▸ Common REST interfaces
▸ Server-side endpoints
▸ Trivial to build Java REST Client
11
https://github.com/Apicurio/apicurio-registry/tree/master/storage
APICURIO Registry
Storage Implementations
Kafka
Broker
Kafka
Broker
Kafka
Broker
Kafka Cluster
Storage Storage Storage Storage
Request
Response
Produce Consume
Registry Cluster
Reg.
app
Reg.
app
Reg.
app
Reg.
app
gRPC
gRPC
gRPC
(create / update / delete)
12 Physical Virtual Private cloud Public cloud
Kafka
Bridge
MQTT
Broker
Eclipse
Hono
AMQP
Router
AMQ Online
API
GATEWAY
Apache
Kafka
Edge Layer
Car simulation /
Bobbycar pods IoT Ingest Gateway / Messaging Integration Tier Application Tier
Bobby Car Demo
Dashboard
Service
Kafka
Streams
Service
mqtt2Kafka
Service
Caching
Service
Knative Eventing
Real time
Dashboard
Datagrid
Kafka
MirrorMaker
kafka2dg
Service
kafka2S3
Service
3scale API Management RH SSO Prometheus
InfluxDB
Approval
Audit
Validation
Bobbycar
Zone CR
Rules
Service
Tekton
Code Ready
Workspaces
ArgoCD
Optional
Bobbycar Core Concepts
13
https://github.com/sa-mw-dach/bobbycar
Bobbycar
BobbycarZone
● A vehicle simulator implemented in Quarkus
○ Reactive messaging, Health, Metrics, RestClient, Resteasy
○ One Thread = One Bobbycar
● Represents the edge tier / layer
● Selects a random route (gpx format) at startup and drives from
start to end
● Sends telemetry to the IoT Cloud Gateway
○ GPS position, speed, rpm, fuel consumption, CO2 emission,
gear
● Configurable gear ratio from real cars, different driving strategies
● A geographical zone with a certain type/shape (circle, polygon … )
● Implemented as a Kubernetes Custom Resource
○ Enables declarative config of business apps, GitOps approach
● Defines a location based configuration (i.e. max speed, max. fuel
consumption … )
● (Priority / Rule based decision when overlapping)
Quarkus Car Simulator
14
https://github.com/sa-mw-dach/bobbycar/tree/master/components/car-simulator
Route route = getRouteSelectionStrategy().selectRoute();
EngineMetrics engineMetrics = new EngineMetrics(registry, id, route.getName());
TimedEngine engine = TimedEngine.builder()
.withSpeedVariationInKmH(5)
.withStartingPoint(route.getPoints()
.findFirst()
.orElse(null))
.withConfig(new JsonEngineConfiguration())
.withMetrics(engineMetrics).build();
Car car = Car.builder().withModel("M3 Coupe").withManufacturer("BMW")
.withEngine(engine).withDriverId(id)
.build();
DXL Architecture
15
Vodafone Greece - Digital eXperience Layer
16
https://www.youtube.com/watch?v=RYGvDtMM95I
Main Use Cases
▸ Abstracting away complexity behind REST APIs
▸ Speeding up data retrieval for Digital Services
▸ Kubernetes-based middleware - currently 120 Microservices
▸ Kafka, MongoDB, Apigee Gateway.
・ TMForum-compliant REST APIs
17
https://quarkus.io/blog/tag/user-story/
18
Things you didn't know
about Quarkus!
19
https://www.youtube.com/watch?v=A7AbQ79-bjc
Dev Console
20
https://quarkus.io/guides/deploying-to-openshift
OpenShift Integration
mvn quarkus:add-extension -Dextensions="openshift"
mvn clean package -Dquarkus.container-image.build=true
oc get is
oc new-app --name=greeting <project>/openshift-quickstart:1.0.0-SNAPSHOT
oc get svc
oc expose svc/greeting
oc get routes
curl http://<route>/greeting
21
https://blog.sebastian-daschner.com/entries/quarkus-remote-dev-in-containers-update
Quarkus Remote Development
mvn quarkus:remote-dev -Ddebug=false 
-Dquarkus.package.type=mutable-jar 
-Dquarkus.live-reload.url=http://localhost:8080 
-Dquarkus.live-reload.password=123
22
https://quarkus.io/guides/security-customization#bouncycastle
Bouncy Castle Security Provider
quarkus.security.security-providers=BCJSSE
quarkus.http.ssl.client-auth=REQUIRED
quarkus.http.ssl.certificate.key-store-file=server-keystore.jks
quarkus.http.ssl.certificate.key-store-password=password
quarkus.http.ssl.certificate.trust-store-file=server-truststore.jks
quarkus.http.ssl.certificate.trust-store-password=password
23
https://quarkus.io/guides/scripting
Quarkus Command Lines with JBang
//DEPS io.quarkus:quarkus-bom:1.11.0.Final@pom
//DEPS io.quarkus:quarkus-resteasy
//DEPS io.quarkus:quarkus-smallrye-openapi
//DEPS io.quarkus:quarkus-swagger-ui
jbang init scripting/quarkusapp.java
cd scripting
jbang quarkusapp.java
24
https://developers.redhat.com/ebooks
25
Developer adoption initiatives
developers.redhat.com
A monthly webinar series for developers.
#OpenShift #Microservices #Knative #Quarkus #Kafka
#Cloudnative #Container
https://red.ht/OpenDevHour
#WearAMask

Let's be real. Quarkus in the wild.