[[vertx-component]]
= Vert.x Component
:page-source: components/camel-vertx/src/main/docs/vertx-component.adoc

*Available as of Camel version 2.12*

The Vert.x component is for working with the http://vertx.io/[Vertx]
https://vertx.io/docs/vertx-core/java/#event_bus[EventBus].

The vertx https://vertx.io/docs/vertx-core/java/#event_bus[EventBus]
sends and receives JSON events.

NOTE: The version of Vert.x, used by the component, requires at least Java 1.8 at
runtime.

Maven users will need to add the following dependency to their `pom.xml`
for this component:

[source,xml]
------------------------------------------------------------
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-vertx</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>
------------------------------------------------------------

== URI format

[source,java]
---------------------------
vertx:channelName[?options]
---------------------------

== Options



// component options: START
The Vert.x component supports 7 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *vertxFactory* (advanced) | To use a custom VertxFactory implementation |  | VertxFactory
| *host* (common) | Hostname for creating an embedded clustered EventBus |  | String
| *port* (common) | Port for creating an embedded clustered EventBus |  | int
| *vertxOptions* (common) | Options to use for creating vertx |  | VertxOptions
| *vertx* (common) | To use the given vertx EventBus instead of creating a new embedded EventBus |  | Vertx
| *timeout* (common) | Timeout in seconds to wait for clustered Vertx EventBus to be ready. The default value is 60. | 60 | int
| *basicPropertyBinding* (advanced) | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
|===
// component options: END




// endpoint options: START
The Vert.x endpoint is configured using URI syntax:

----
vertx:address
----

with the following path and query parameters:

=== Path Parameters (1 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *address* | *Required* Sets the event bus address used to communicate |  | String
|===


=== Query Parameters (7 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *pubSub* (common) | Whether to use publish/subscribe instead of point to point when sending to a vertx endpoint. |  | Boolean
| *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
| *exceptionHandler* (consumer) | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the consumer will deal with exceptions, that will be logged at WARN or ERROR level and ignored. |  | ExceptionHandler
| *exchangePattern* (consumer) | Sets the exchange pattern when the consumer creates an exchange. |  | ExchangePattern
| *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | boolean
| *basicPropertyBinding* (advanced) | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
| *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
|===
// endpoint options: END
// spring-boot-auto-configure options: START
== Spring Boot Auto-Configuration

When using Spring Boot make sure to use the following Maven dependency to have support for auto configuration:

[source,xml]
----
<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-vertx-starter</artifactId>
  <version>x.x.x</version>
  <!-- use the same version as your Camel core version -->
</dependency>
----


The component supports 8 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *camel.component.vertx.basic-property-binding* | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | Boolean
| *camel.component.vertx.enabled* | Enable vertx component | true | Boolean
| *camel.component.vertx.host* | Hostname for creating an embedded clustered EventBus |  | String
| *camel.component.vertx.port* | Port for creating an embedded clustered EventBus |  | Integer
| *camel.component.vertx.timeout* | Timeout in seconds to wait for clustered Vertx EventBus to be ready. The default value is 60. | 60 | Integer
| *camel.component.vertx.vertx* | To use the given vertx EventBus instead of creating a new embedded EventBus. The option is a io.vertx.core.Vertx type. |  | String
| *camel.component.vertx.vertx-factory* | To use a custom VertxFactory implementation. The option is a io.vertx.core.spi.VertxFactory type. |  | String
| *camel.component.vertx.vertx-options* | Options to use for creating vertx. The option is a io.vertx.core.VertxOptions type. |  | String
|===
// spring-boot-auto-configure options: END



Whether to use publish/subscribe instead of point to
point when sending to a vertx endpoint.

-----------------------------------------------------------------------------------------------
You can append query options to the URI in the following format, ?option=value&option=value&...
-----------------------------------------------------------------------------------------------

== Connecting to the existing Vert.x instance

If you would like to connect to the Vert.x instance already existing in
your JVM, you can set the instance on the component level:

[source,java]
-----------------------------------------------------
Vertx vertx = ...;
VertxComponent vertxComponent = new VertxComponent();
vertxComponent.setVertx(vertx);
camelContext.addComponent("vertx", vertxComponent);
-----------------------------------------------------

