[[thrift-component]]
= Thrift Component
//THIS FILE IS COPIED: EDIT THE SOURCE FILE:
:page-source: components/camel-thrift/src/main/docs/thrift-component.adoc
:docTitle: Thrift
:artifactId: camel-thrift
:description: Call and expose remote procedures (RPC) with Apache Thrift data format and serialization mechanism.
:since: 2.20
:supportLevel: Stable
:component-header: Both producer and consumer are supported

*Since Camel {since}*

*{component-header}*

The Thrift component allows you to call or expose Remote Procedure Call (RPC) services
using https://thrift.apache.org/[Apache Thrift] binary communication protocol and serialization mechanism.

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-thrift</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>
------------------------------------------------------------

== URI format

[source,java]
-------------------------------------
thrift://service[?options]
-------------------------------------

== Endpoint Options

// component options: START
The Thrift component supports 4 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *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
| *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 component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
| *useGlobalSslContextParameters* (security) | Determine if the thrift component is using global SSL context parameters | false | boolean
|===
// component options: END

// endpoint options: START
The Thrift endpoint is configured using URI syntax:

----
thrift:host:port/service
----

with the following path and query parameters:

=== Path Parameters (3 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *host* | The Thrift server host name. This is localhost or 0.0.0.0 (if not defined) when being a consumer or remote server host name when using producer. |  | String
| *port* | *Required* The Thrift server port |  | int
| *service* | *Required* Fully qualified service name from the thrift descriptor file (package dot service definition name) |  | String
|===


=== Query Parameters (14 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *compressionType* (common) | Protocol compression mechanism type. The value can be one of: NONE, ZLIB | NONE | ThriftCompressionType
| *exchangeProtocol* (common) | Exchange protocol serialization type. The value can be one of: BINARY, JSON, SJSON, COMPACT | BINARY | ThriftExchangeProtocol
| *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
| *clientTimeout* (consumer) | Client timeout for consumers |  | int
| *maxPoolSize* (consumer) | The Thrift server consumer max thread pool size | 10 | int
| *poolSize* (consumer) | The Thrift server consumer initial thread pool size | 1 | int
| *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. The value can be one of: InOnly, InOut, InOptionalOut |  | 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
| *method* (producer) | The Thrift invoked method name |  | String
| *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
| *negotiationType* (security) | Security negotiation type. The value can be one of: PLAINTEXT, SSL, SASL | PLAINTEXT | ThriftNegotiationType
| *sslParameters* (security) | Configuration parameters for SSL/TLS security negotiation |  | SSLContextParameters
|===
// endpoint options: END


== Thrift method parameters mapping

Parameters in the called procedure must be passed as a list of objects inside the message body. The primitives are converted from the objects on the fly.
In order to correctly find the corresponding method, all types must be transmitted regardless of the values. Please see an exmaple below, how to pass
different parameters to the method with the Camel body
[source,java]
-------------------------------------------------------------------------------
List requestBody = new ArrayList();

requestBody.add((boolean)true);
requestBody.add((byte)THRIFT_TEST_NUM1);
requestBody.add((short)THRIFT_TEST_NUM1);
requestBody.add((int)THRIFT_TEST_NUM1);
requestBody.add((long)THRIFT_TEST_NUM1);
requestBody.add((double)THRIFT_TEST_NUM1);
requestBody.add("empty"); // String parameter
requestBody.add(ByteBuffer.allocate(10)); // binary parameter
requestBody.add(new Work(THRIFT_TEST_NUM1, THRIFT_TEST_NUM2, Operation.MULTIPLY)); // Struct parameter
requestBody.add(new ArrayList<Integer>()); // list paramater 
requestBody.add(new HashSet<String>()); // set parameter
requestBody.add(new HashMap<String, Long>()); // map parameter 

Object responseBody = template.requestBody("direct:thrift-alltypes", requestBody);
-------------------------------------------------------------------------------

Incoming parameters in the service consumer will also be passed to the message body as a list of objects.


== Thrift consumer headers (will be installed after the consumer invocation)

[width="100%",cols="25%,50,25%",options="header",]
|=======================================================================
|Header name |Description|Possible values

|*CamelThriftMethodName*|Method name handled by the consumer service|

|=======================================================================

== Examples

Below is a simple synchronous method invoke with host and port parameters

[source,java]
-------------------------------------------------------------------------------
from("direct:thrift-calculate")
.to("thrift://localhost:1101/org.apache.camel.component.thrift.generated.Calculator?method=calculate&synchronous=true");
-------------------------------------------------------------------------------

Below is a simple synchronous method invoke for the XML DSL configuration

[source,xml]
---------------------------------------------------------------------------------------
<route>
    <from uri="direct:thrift-add" />
    <to uri="thrift://localhost:1101/org.apache.camel.component.thrift.generated.Calculator?method=add&synchronous=true"/>
</route>
---------------------------------------------------------------------------------------

Thrift service consumer with asynchronous communication

[source,java]
-------------------------------------------------------------------------------
from("thrift://localhost:1101/org.apache.camel.component.thrift.generated.Calculator")
.to("direct:thrift-service");
-------------------------------------------------------------------------------

It's possible to automate Java code generation for .thrift files using *thrift-maven-plugin*, but before start the thrift compiler binary distribution for your operating system must be present on the running host.

== For more information, see these resources

https://github.com/apache/thrift/[Thrift project GitHub]
https://thrift.apache.org/tutorial/java [Apache Thrift Java tutorial]


include::camel-spring-boot::page$thrift-starter.adoc[]
