How Quarkus works with OpenTelemetry on OpenShift

Published with Pavol Loffay at the Red Hat Developers Blog.


The Quarkus is an open source framework designed to help software developers build efficient cloud-native applications tailored to their architectural preferences, while ensuring development joy. Efficient resource utilization, particularly in terms of memory and CPU, has been a key requirement since its creation, allowing fast startup and response times with low memory consumption. This article briefly explains how Quarkus works with  OpenTelemetry and the steps to deploy an observable service on OpenShift…

Full article: https://developers.redhat.com/articles/2025/07/07/how-quarkus-works-opentelemetry-openshift

Observability in Quarkus 3

Observability on a software system can be described as the capability to allow a human to ask and answer questions. To enable developers and support engineers in understanding how their applications behave, Quarkus 3.3 includes many improvements to its main observability related extensions:

For the full article please see the Quarkus Blog

Simple HTTP load generator with Hyperfoil

Hyperfoil is a microservice-oriented distributed benchmark framework that can be used as a simple load generating tool.

Let’s say you have nothing and want to bombard an endpoint with 1000 simultaneous requests. This is what you need to do if you need to hit: http://localhost:8080/legumes:

Create request file

name: requests
http:
  - host: http://localhost:8080
    sharedConnections: 1000
phases:
- example:
    atOnce:
      users: 1000
      scenario:
      - test:
        - httpRequest:
            GET: /legumes
            sync: true

Create a file with this contents at /somewhere/requests.hf.yaml

Install Hyperfoil

Download latest and extract somewhere: https://github.com/Hyperfoil/Hyperfoil/releases

Run Hyperfoil

This will start the cli where you will execute the next commands:

> bin/cli.sh
...
[hyperfoil]$ start-local

Upload request to Hyperfoil

[hyperfoil@in-vm]$ upload /somewhere/requests.hf.yaml

Run it

[hyperfoil@in-vm]$ run requests

There you have the load…

If you need the benchmarks, you just need to:

[hyperfoil@in-vm]$ stats

You can have multiple request profiles and create really complex scenarios if needed. Some examples are running the benchmarks across multiple machines and multiple microservices at the same time.

Checkout the oficial quickstart and this blogpost series to dive deeper into the tool.

Links:

https://hyperfoil.io/

https://github.com/Hyperfoil

Upgrade from Quarkus 1.2.1 to 1.4.1

Stormy Clouds – Coimbra, PT by myself.

Background

Sometimes it’s not easy to find time to update libraries. Quarkus fast pace, requires frequent attention and upgrades. You should allocate time for that…

This particular upgrade was triggered by a Quartz integration bug, which was quickly fixed, btw. By now, 1.5.1 is already out with less pain than the 1.3.x series, where most of the described issues came from. This post tells you the upgrade adventures and I hope it’s useful to you.

Changes

Tests

On Quarkus 1.3.0 the classloading was totally re-implemented, fixing some test issues. Unfortunately some problems were introduced on test scenarios using Mockito and other JUnit 5 extensions. One easy fix was just not to use the JUnit extension and make de setup using the @BeforeAll and @AfterAll hooks. The Quarkus team, in the meantime, has been creating a few integrations to tackle this problem. One of them is this quarkus mockito extension:

 <dependency>
     <groupId>io.quarkus</groupId>
     <artifactId>quarkus-junit5-mockito</artifactId>
     <scope>test</scope>
 </dependency>

You will be able to use @InjectMock instead of @Mock on integration tests. No need for @InjectMocks. You should remove mockito-core dependency, it comes included. Please take a look at this help page for more.

New way to inject MP REST clients on tests:

@InjectMock 
@RestClient 
WonderfulClient wonderfulClient;

The MicroProfile REST client definition must also be annotated with @ApplicationScoped.

JWT

The smallrye-jwt upgrade broke property compatibility. You cannot define multiple Algorithms anymore and your authentication might start to fail.

Use new for runtime code:

smallrye.jwt.verify.algorithm=RS256 #Instead of:

smallrye.jwt.whitelist.algorithms=RS256,...

Check this page for the current details.

Docker

  • There was this Quarkus bug affecting our docker images. Build worked locally, but failed inside the docker container because the path is simply /app and when trying to search for the parent pom.xml, we get a null pointer exception. Should have been fixed on version 1.5.0 already.
  • You must use Maven 3.6.2+. Please update your docker base images.

Datasources

Use the new properties for datasources that are not backwards compatible:

quarkus.datasource.db-kind=postgresql #Mandatory! 

quarkus.datasource.jdbc.url=jdbc:postgresql://localhost:5432/my_db?current_schema=public

The db-kind property from above will autodetect the driver. It’s not mandatory to use the driver property any longer.

The URL property has changed as well. They’ve done this to support multiple datasources and reactive drivers.

Additional notes

  • Use localhost instead of 0.0.0.0 for local addresses.
  • If you use Quarkus-Camel, please upgrade to 1.0.0-M6

Hope this was useful to you!