[[nsq-component]]
= NSQ Component
//THIS FILE IS COPIED: EDIT THE SOURCE FILE:
:page-source: components/camel-nsq/src/main/docs/nsq-component.adoc
:docTitle: NSQ
:artifactId: camel-nsq
:description: Send and receive messages from NSQ realtime distributed messaging platform.
:since: 2.23
:supportLevel: Stable
:component-header: Both producer and consumer are supported

*Since Camel {since}*

*{component-header}*

http://nsq.io/[NSQ] is a realtime distributed 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-nsq</artifactId>
    <!-- use the same version as your Camel core version -->
    <version>x.y.z</version>
</dependency>
------------------------------------------------------------

== URI format

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

Where *topic* is the topic name

== Options


// component options: START
The NSQ component supports 5 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *servers* (common) | The hostnames of one or more nsqlookupd servers (consumer) or nsqd servers (producer). |  | String
| *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 NSQ endpoint is configured using URI syntax:

----
nsq: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 NSQ topic |  | String
|===


=== Query Parameters (18 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *servers* (common) | The hostnames of one or more nsqlookupd servers (consumer) or nsqd servers (producer) |  | String
| *userAgent* (common) | A String to identify the kind of client |  | String
| *autoFinish* (consumer) | Automatically finish the NSQ Message when it is retrieved from the queue and before the Exchange is processed | true | 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
| *channel* (consumer) | The NSQ channel |  | String
| *lookupInterval* (consumer) | The lookup interval | 5000 | long
| *lookupServerPort* (consumer) | The NSQ lookup server port | 4161 | int
| *messageTimeout* (consumer) | The NSQ consumer timeout period for messages retrieved from the queue. A value of -1 is the server default | -1 | long
| *poolSize* (consumer) | Consumer pool size | 10 | int
| *requeueInterval* (consumer) | The requeue interval in milliseconds. A value of -1 is the server default | -1 | long
| *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
| *port* (producer) | The port of the nsqd server | 4150 | int
| *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
| *secure* (security) | Set secure option indicating TLS is required | false | boolean
| *sslContextParameters* (security) | To configure security using SSLContextParameters |  | SSLContextParameters
|===
// endpoint options: END

== Examples

To send a message to a NSQ server

[source,java]
----
from("direct:start").to("nsq:myTopic?servers=myserver:4161");
----

And to receive messages from NSQ

[source,xml]
----
<route>
  <from uri="nsq:myTopic?servers=myserver:4161"/>
  <to uri="bean:doSomething"/>
</route>
----

The server can be configured on the component level, for example if using Spring Boot in the `application.properties` file:

[source,properties]
----
camel.component.nsq.servers=myserver1:4161,my-second-server:4161
----

Then you can omit the servers from the endpoint URI

[source,java]
----
from("direct:start").to("nsq:myTopic");
----


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