[[pubnub-component]]
= PubNub Component
:page-source: components/camel-pubnub/src/main/docs/pubnub-component.adoc

*Available as of Camel version 2.19*

Camel PubNub component can be used to communicate with the https://www.pubnub.com/[PubNub] data stream network for connected devices.
This component uses pubnub https://github.com/pubnub/java[java library].

Use cases include:

** Chat rooms: Sending and receiving messages
** Locations and Connected cars: dispatching taxi cabs
** Smart sensors: Receiving data from a sensor for data visualizations
** Health: Monitoring heart rate from a patient's wearable device
** Multiplayer games
** Interactive media: audience-participating voting system



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

== URI format

[source,java]
------------------------
pubnub:channel[?options]
------------------------

Where *channel* is the PubNub channel to publish or subscribe to.

== Options


// component options: START
The PubNub component supports 1 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *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 PubNub endpoint is configured using URI syntax:

----
pubnub:channel
----

with the following path and query parameters:

=== Path Parameters (1 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *channel* | *Required* The channel used for subscribing/publishing events |  | String
|===


=== Query Parameters (16 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *uuid* (common) | UUID to be used as a device identifier, a default UUID is generated if not passed. |  | 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
| *withPresence* (consumer) | Also subscribe to related presence information | 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
| *operation* (producer) | The operation to perform. PUBLISH: Default. Send a message to all subscribers of a channel. FIRE: allows the client to send a message to BLOCKS Event Handlers. These messages will go directly to any Event Handlers registered on the channel. HERENOW: Obtain information about the current state of a channel including a list of unique user-ids currently subscribed to the channel and the total occupancy count. WHERENOW: Obtain information about the current list of channels to which a uuid is subscribed to. GETSTATE: Used to get key/value pairs specific to a subscriber uuid. State information is supplied as a JSON object of key/value pairs SETSTATE: Used to set key/value pairs specific to a subscriber uuid GETHISTORY: Fetches historical messages of a channel. |  | String
| *basicPropertyBinding* (advanced) | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
| *pubnub* (advanced) | Reference to a Pubnub client in the registry. |  | PubNub
| *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
| *authKey* (security) | If Access Manager is utilized, client will use this authKey in all restricted requests. |  | String
| *cipherKey* (security) | If cipher is passed, all communications to/from PubNub will be encrypted. |  | String
| *publishKey* (security) | The publish key obtained from your PubNub account. Required when publishing messages. |  | String
| *secretKey* (security) | The secret key used for message signing. |  | String
| *secure* (security) | Use SSL for secure transmission. | true | boolean
| *subscribeKey* (security) | The subscribe key obtained from your PubNub account. Required when subscribing to channels or listening for presence events |  | String
|===
// 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-pubnub-starter</artifactId>
  <version>x.x.x</version>
  <!-- use the same version as your Camel core version -->
</dependency>
----


The component supports 2 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *camel.component.pubnub.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.pubnub.enabled* | Enable pubnub component | true | Boolean
|===
// spring-boot-auto-configure options: END


== Message headers when subscribing

[width="100%",cols="20%,80%",options="header",]
|=======================================================================
|Name |Description
|`CamelPubNubTimeToken` |The Timestamp for the event.
|`CamelPubNubChannel` |The channel for which the message belongs.
|=======================================================================


== Message body

The message body can contain any JSON serializable data, including: Objects, Arrays, Ints and Strings. Message data should not contain special Java V4 classes or functions as these will not serialize. String content can include any single-byte or multi-byte UTF-8

Object serialization when sending is done automatically. Just pass the full object as the message payload. PubNub will takes care of object serialization.

When receiving the message body utilize objects provided by the PubNub API.

== Examples

=== Publishing events

Default operation when producing.
The following snippet publish the event generated by PojoBean to the channel iot.

[source,java]
----
from("timer:mytimer")
    // generate some data as POJO.
    .bean(PojoBean.class)
    .to("pubnub:iot?publishKey=mypublishKey");
----

=== Fire events aka BLOCKS Event Handlers

See https://www.pubnub.com/blocks-catalog/ for all kind of serverless functions that can be invoked.
Example of geolocation lookup 

[source,java]
----
from("timer:geotimer")
    .process(exchange -> exchange.getIn().setBody(new Foo("bar", "TEXT")))
    .to("pubnub:eon-maps-geolocation-input?operation=fire&publishKey=mypubkey&subscribeKey=mysubkey");

from("pubnub:eon-map-geolocation-output?subscribeKey=mysubkey)
    // geolocation output will be logged here
    .log("${body}");
----

=== Subscribing to events

The following snippet listens for events on the iot channel.
If you can add the option withPresence, you will also receive channel Join, Leave asf events.

[source,java]
----
from("pubnub:iot?subscribeKey=mySubscribeKey")
    .log("${body}")
    .to("mock:result");
----

=== Performing operations


herenow : Obtain information about the current state of a channel including a list of unique user-ids currently subscribed to the channel and the total occupancy count of the channel

[source,java]
----
from("direct:control")
    .to("pubnub:myChannel?publishKey=mypublishKey&subscribeKey=mySubscribeKey&operation=herenow")
    .to("mock:result");
----

wherenow : Obtain information about the current list of channels to which a uuid is subscribed

[source,java]
----
from("direct:control")
    .to("pubnub:myChannel?publishKey=mypublishKey&subscribeKey=mySubscribeKey&operation=wherenow&uuid=spyonme")
    .to("mock:result");
----

setstate : Used to set key/value pairs specific to a subscriber uuid.

[source,java]
----
from("direct:control")
    .bean(StateGenerator.class)
    .to("pubnub:myChannel?publishKey=mypublishKey&subscribeKey=mySubscribeKey&operation=setstate&uuid=myuuid");
----

gethistory : Fetches historical messages of a channel.

[source,java]
----
from("direct:control")
    .to("pubnub:myChannel?publishKey=mypublishKey&subscribeKey=mySubscribeKey&operation=gethistory");
----


There is a couple of examples in test directory that shows some of the PubNub features. 
They require a PubNub account, from where you can obtain a publish- and subscribe key.
 
The example PubNubSensorExample already contains a subscribe key provided by PubNub, so this is ready to run without a account. 
The example illustrates the PubNub component subscribing to a infinite stream of sensor data.


