Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Wiki Markup
h2. Camel CouchDB component

*Available as of Camel 2.11*

The *couchdb:* component allows you to treat [CouchDB|http://couchdb.apache.org/] instances as a producer or consumer of messages. Using the lightweight LightCouch API, this camel component has the following features:

* As a consumer, monitors couch changesets for inserts, updates and deletes and publishes these as messages into camel routes.
* As a producer, can save or update documents into couch.
* Can support as many endpoints as required, eg for multiple databases across multiple instances.
* Ability to have events trigger for only deletes, only inserts/updates or all (default).
* Headers set for sequenceId, document revision, document id, and HTTP method type.

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

{code:xml}
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-couchdb</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>
{code}

h3. URI format

{code}
couchdb:http://hostname[:port]/database?[options...]://name[?options]
{code}

Where *hostname* is the hostname of the running couchdb instance. Port is optional and if not specified then defaults to 5984.

h3. Options
{div:class=confluenceTableSmall}
|| Property || Default || Description ||
| {{deletes}} | {{true}} | document deletes are published as events |
| {{updates}} | {{true}} | document inserts/updates are published as events |
| {{heartbeat}} | {{30000}} | how often to send an empty message to keep socket alive in millis |
| {{createDatabase}} | {{true}} | create the database if it does not already exist |
| {{username}} | {{null}} | username in case of authenticated databases |
| {{password}} | {{null}} | password for authenticated databases |
{div}

h3. Headers

The following headers are set on exchanges during message transport.
{div:class=confluenceTableSmall}
|| Property || Value ||
| {{CouchDbDatabase}} | the database the message came from |
| {{CouchDbSeq}} | the couchdb changeset sequence number of the update / delete message |
| {{CouchDbId}} | the couchdb document id |
| {{CouchDbRev}} | the couchdb document revision |
| {{CouchDbMethod}} | the method (delete / update) |
{div}

h3. Samples

For example if you wish to consume all inserts, updates and deletes from a CouchDB instance running locally, on port 9999 then you could use the following:

{code}
from("couchdb:http://localhost:9999").process(someProcessor);
{code}

If you were only interested in deletes, then you could use the following

{code}
from("couchdb:http://localhost:9999?updates=false").process(someProcessor);
{code}

If you wanted to insert a message as a document, then the body of the exchange is used

{code}
from("someProducingEndpoint").process(someProcessor).to("couchdb:http://localhost:9999")
{code}