[[nats-component]]
= Nats Component
//THIS FILE IS COPIED: EDIT THE SOURCE FILE:
:page-source: components/camel-nats/src/main/docs/nats-component.adoc
:docTitle: Nats
:artifactId: camel-nats
:description: Send and receive messages from NATS messaging system.
:since: 2.17
:supportLevel: Stable
:component-header: Both producer and consumer are supported

*Since Camel {since}*

*{component-header}*

http://nats.io/[NATS] is a fast and reliable messaging platform.

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

== URI format

[source,java]
----------------------
nats:topic[?options]
----------------------

Where *topic* is the topic name

== Options


// component options: START
The Nats component supports 6 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *servers* (common) | URLs to one or more NAT servers. Use comma to separate URLs when specifying multiple servers. |  | String
| *verbose* (common) | Whether or not running in verbose mode | false | 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
| *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) | Enable usage of global SSL context parameters. | false | boolean
|===
// component options: END





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

----
nats:topic
----

with the following path and query parameters:

=== Path Parameters (1 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *topic* | *Required* The name of topic we want to use |  | String
|===


=== Query Parameters (28 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *connectionTimeout* (common) | Timeout for connection attempts. (in milliseconds) | 2000 | int
| *flushConnection* (common) | Define if we want to flush connection when stopping or not | true | boolean
| *flushTimeout* (common) | Set the flush timeout (in milliseconds) | 1000 | int
| *maxPingsOut* (common) | maximum number of pings have not received a response allowed by the client | 2 | int
| *maxReconnectAttempts* (common) | Max reconnection attempts | 60 | int
| *noEcho* (common) | Turn off echo. If supported by the gnatsd version you are connecting to this flag will prevent the server from echoing messages back to the connection if it has subscriptions on the subject being published to. | false | boolean
| *noRandomizeServers* (common) | Whether or not randomizing the order of servers for the connection attempts | false | boolean
| *pedantic* (common) | Whether or not running in pedantic mode (this affects performance) | false | boolean
| *pingInterval* (common) | Ping interval to be aware if connection is still alive (in milliseconds) | 120000 | int
| *reconnect* (common) | Whether or not using reconnection feature | true | boolean
| *reconnectTimeWait* (common) | Waiting time before attempts reconnection (in milliseconds) | 2000 | int
| *requestCleanupInterval* (common) | Interval to clean up cancelled/timed out requests. | 5000 | int
| *servers* (common) | URLs to one or more NAT servers. Use comma to separate URLs when specifying multiple servers. |  | String
| *verbose* (common) | Whether or not running in verbose mode | false | 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
| *maxMessages* (consumer) | Stop receiving messages from a topic we are subscribing to after maxMessages |  | String
| *poolSize* (consumer) | Consumer thread pool size (default is 10) | 10 | int
| *queueName* (consumer) | The Queue name if we are using nats for a queue configuration |  | String
| *replyToDisabled* (consumer) | Can be used to turn off sending back reply message in the consumer. | 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. 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
| *replySubject* (producer) | the subject to which subscribers should send response |  | String
| *basicPropertyBinding* (advanced) | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
| *connection* (advanced) | Reference an already instantiated connection to Nats server |  | Connection
| *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
| *secure* (security) | Set secure option indicating TLS is required | false | boolean
| *sslContextParameters* (security) | To configure security using SSLContextParameters |  | SSLContextParameters
|===
// endpoint options: END


== Configuring servers

You configure the NATS servers on either the component or the endpoint.

For example to configure this once on the component you can do:

[source,java]
----
NatsComponent nats = context.getComponent("nats", NatsComponent.class);
nats.setServers("someserver:4222,someotherserver:42222");
----

Notice how you can specify multiple servers separated by comma.

Or you can specify the servers in the endpoint URI

[source,java]
----
from("direct:send").to("nats:test?servers=localhost:4222");
----

The endpoint configuration will override any server configuration on the component level.

=== Configuring username and password or token

You can specify username and password for the servers in the server URLs,
where its `username:password@url`, or `token@url` etc:

[source,java]
----
NatsComponent nats = context.getComponent("nats", NatsComponent.class);
nats.setServers("scott:tiger@someserver:4222,superman:123@someotherserver:42222");
----

If you are using Camel Main or Spring Boot you can configure the server urls in the `application.properties` file
[source,properties]
----
camel.component.nats.servers=scott:tiger@someserver:4222,superman:123@someotherserver:42222
----

== Headers

[width="100%",options="header"]
|=======================================================================
|Name |Type |Description
| CamelNatsSID | String | The SID of a consumed message.
| CamelNatsReplyTo | String | The ReplyTo of a consumed message (may be null).
| CamelNatsSubject | String | The Subject of a consumed message.
| CamelNatsQueueName | String | The Queue name of a consumed message (may be null).
| CamelNatsMessageTimestamp | long | The timestamp of a consumed message.
|=======================================================================

== Request/Reply support
The producer only supports publishing (sending) messages.
The producer does not support request/reply where it can wait for an expected reply message.

The consumer will when routing the message is complete, send back the message as reply-message if required.

== Examples

*Producer example:*

[source,java]
----
from("direct:send")
  .to("nats:mytopic");
----

In case of using Authorization you can directly specify your credentials in the server URL

[source,java]
----
from("direct:send")
  .to("nats:mytopic?servers=username:password@localhost:4222");
----

or your token

[source,java]
----
from("direct:send")
  .to("nats:mytopic?servers=token@localhost:4222);
----

*Consumer example:*

[source,java]
----
from("nats:mytopic?maxMessages=5&queueName=myqueue")
  .to("mock:result");
----

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