Configure the HTTP client

Quarkus Flow supports calling external services over HTTP and OpenAPI. All HTTP and OpenAPI tasks share a common, tunable HTTP client layer powered by RESTEasy Reactive and Vert.x.

This guide shows how to:

  • Configure the default HTTP client.

  • Define named HTTP clients for specific external services.

  • Route specific workflows or tasks to a named client.

  • Configure static headers, logging, proxies, and TLS.

For retry and circuit breaker configurations, see Fault tolerance and resilience. For correlation headers, see Enable tracing.

Prerequisites

1. Understand the HTTP client model

All Flow HTTP and OpenAPI tasks use a jakarta.ws.rs.client.Client managed by Quarkus Flow.

At runtime, Quarkus Flow: * Builds a default client from quarkus.flow.http.client.. * Optionally builds *named clients from quarkus.flow.http.client.named.<name>.. * Resolves *which client to use for a given workflow or task using quarkus.flow.http.client.workflow.* routing. * Reuses and closes these clients automatically at the end of the application lifecycle.

2. Configure the default HTTP client

The default HTTP client is used when no routing is configured for a workflow or task.

# Basic timeouts (milliseconds)
quarkus.flow.http.client.connect-timeout=5000
quarkus.flow.http.client.read-timeout=10000

# HTTP connection pool and keep-alive
quarkus.flow.http.client.connection-pool-size=50
quarkus.flow.http.client.keep-alive-enabled=true
quarkus.flow.http.client.connection-ttl=60

# User agent
quarkus.flow.http.client.user-agent=quarkus-flow/1.0

3. Create named HTTP clients

You can declare as many named HTTP clients as you need, each with its own tuning.

# "secureA" – external API with strict timeouts and custom UA
quarkus.flow.http.client.named.secureA.connect-timeout=3000
quarkus.flow.http.client.named.secureA.read-timeout=8000
quarkus.flow.http.client.named.secureA.user-agent=MyCompanyBot/1.0

# "internal" – internal service with a larger pool and relaxed timeouts
quarkus.flow.http.client.named.internal.connect-timeout=1000
quarkus.flow.http.client.named.internal.read-timeout=20000
quarkus.flow.http.client.named.internal.connection-pool-size=100

4. Route workflows and tasks to clients

Routing is configured under the workflow section:

# Use "secureA" for all HTTP/OpenAPI tasks in the workflow "order-flow"
quarkus.flow.http.client.workflow.order-flow.name=secureA

# Override only the "fetchCustomers" task within "order-flow" to use "internal"
quarkus.flow.http.client.workflow.order-flow.task.fetchCustomers.name=internal

Resolution order for a call: . Task-level override. . Workflow-level default. . Fallback to the global default client.

It is highly recommended that you keep HTTP-related task names unique within your workflow to avoid routing conflicts.

5. Configure static headers

Use static-headers to attach headers to every request sent by a client (comma-separated):

# Default client
quarkus.flow.http.client.static-headers=X-Env=prod,X-Tenant=acme

# Named client
quarkus.flow.http.client.named.secureA.static-headers=X-Env=prod,X-Region=us-east-1

6. Logging and debugging HTTP requests

Enable the RESTEasy Reactive client logger to see the exact payloads on the wire:

# Log both request and response line + headers (+ body, up to limit)
quarkus.flow.http.client.logging.scope=request-response
quarkus.flow.http.client.logging.body-limit=1024

# Enable the REST client logger
quarkus.log.category."org.jboss.resteasy.reactive.client.logging".level=DEBUG

7. HTTP/2 and ALPN

quarkus.flow.http.client.http2=true
quarkus.flow.http.client.alpn=true

8. Proxy support

Quarkus Flow integrates with the Quarkus Proxy Registry.

# 1. Configure the Proxy Registry
quarkus.proxy.registry.host=proxy.mycorp.internal
quarkus.proxy.registry.port=3128

# 2. Tell the default client to use it
quarkus.flow.http.client.proxy-configuration-name=none

# Or configure a named client to use a specific named proxy
quarkus.proxy.my-proxy.registry.host=proxy.mycorp.internal
quarkus.flow.http.client.named.secureA.proxy-configuration-name=my-proxy

9. Redirects, compression and chunk size

quarkus.flow.http.client.max-redirects=5
quarkus.flow.http.client.follow-redirects=true
quarkus.flow.http.client.enable-compression=true
quarkus.flow.http.client.max-chunk-size=16384

10. Multi-valued query parameters

# See MultiQueryParamMode enum in RESTEasy Reactive
quarkus.flow.http.client.multi-query-param-mode=multi

11. TLS, trust and host verification

# Trust all certificates (including self-signed)
quarkus.flow.http.client.trust-all=true

# Disable hostname verification
quarkus.flow.http.client.verify-host=false
Only enable trust-all or disable verify-host in controlled environments like local development.

See also