[[threadpoolfactory-vertx-other]]
= ThreadPoolFactory Vert.x Component
:docTitle: ThreadPoolFactory Vert.x
:artifactId: camel-threadpoolfactory-vertx
:description: ThreadPoolFactory for camel-core using Vert.x
:since: 3.5
:supportLevel: Preview
include::{cq-version}@camel-quarkus:ROOT:partial$reference/others/threadpoolfactory-vertx.adoc[opts=optional]

*Since Camel {since}*

The camel-threadpoolfactory-vertx is a VertX based implementation of the `ThreadPoolFactory` SPI.

By default Camel will use its own thread pool for EIPs that can use parallel processing (such as splitter, aggregator).
You can plugin different engines via a SPI interface. This is a VertX based plugin that uses the VertX worker thread pool
(executeBlocking).

== Restrictions

This implementation has been designed to use VertX worker threads for EIPs where concurrency has been enabled (using default settings).
However this is limited to only apply when the EIP are not configured with a specific thread pool. For example the first example
below will use VertX worker threads, and the 2nd below will not:

[source,java]
----
from("direct:start")
    .to("log:foo")
    .split(body()).parallelProcessing()
        .to("mock:split")
    .end()
    .to("mock:result");
----

The following Split EIP will refer to a custom thread pool, and therefore VertX is not in use, and Camel will
use the custom thread pool:

[source,java]
----
// register a custom thread pool profile with id myLowPool
context.getExecutorServiceManager().registerThreadPoolProfile(
    new ThreadPoolProfileBuilder("myLowPool").poolSize(2).maxPoolSize(10).build()
);

from("direct:start")
    .to("log:foo")
    .split(body()).executorServiceRef("myLowPool")
        .to("mock:split")
    .end()
    .to("mock:result");
----

== VertX instance

This implementation will first lookup in the registry for an existing `io.vertx.core.Vertx` to be used.
However you can configure an existing instance using the getter/setter on the `VertXThreadPoolFactory` class.

== Auto detection from classpath

To use this implementation all you need to do is to add the `camel-threadpoolfactory-vertx` dependency to the classpath,
and Camel should auto-detect this on startup and log as follows:

[source,text]
----
Using ThreadPoolFactory: camel-threadpoolfactory-vertx
----
