[[atomix-value-component]]
= Atomix Value Component
//THIS FILE IS COPIED: EDIT THE SOURCE FILE:
:page-source: components/camel-atomix/src/main/docs/atomix-value-component.adoc
:docTitle: Atomix Value
:artifactId: camel-atomix
:description: Access Atomix's distributed value.
:since: 2.20
:supportLevel: Stable
:component-header: Both producer and consumer are supported

*Since Camel {since}*

*{component-header}*

The camel Atomix-Value component allows you to work with http://atomix.io[Atomix's] https://atomix.io/docs/latest/user-manual/primitives/DistributedValue/[Distributed Value].

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

[source,java]
----
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-atomix</artifactId>
        <version>${camel-version}</version>
    </dependency>
----

== URI format

[source,java]
----
    atomix-value:valueName
----

// component options: START
The Atomix Value component supports 17 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *atomix* (common) | The Atomix instance to use |  | Atomix
| *configuration* (common) | The shared component configuration |  | AtomixValueConfiguration
| *configurationUri* (common) | The path to the AtomixClient configuration |  | String
| *defaultAction* (common) | The default action. The value can be one of: SET, GET, GET_AND_SET, COMPARE_AND_SET | SET | Action
| *nodes* (common) | The nodes the AtomixClient should connect to |  | List
| *resultHeader* (common) | The header that wil carry the result. |  | String
| *transportClassName* (common) | The class name (fqn) of the Atomix transport | io.atomix.catalyst.transport.netty.NettyTransport | String
| *ttl* (common) | The resource ttl. |  | long
| *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
| *defaultResourceConfig* (advanced) | The cluster wide default resource configuration. |  | Properties
| *defaultResourceOptions* (advanced) | The local default resource options. |  | Properties
| *ephemeral* (advanced) | Sets if the local member should join groups as PersistentMember or not. If set to ephemeral the local member will receive an auto generated ID thus the local one is ignored. | false | boolean
| *readConsistency* (advanced) | The read consistency level. The value can be one of: ATOMIC, ATOMIC_LEASE, SEQUENTIAL, LOCAL |  | ReadConsistency
| *resourceConfigs* (advanced) | Cluster wide resources configuration. |  | Map
| *resourceOptions* (advanced) | Local resources configurations |  | Map
|===
// component options: END

// endpoint options: START
The Atomix Value endpoint is configured using URI syntax:

----
atomix-value:resourceName
----

with the following path and query parameters:

=== Path Parameters (1 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *resourceName* | *Required* The distributed resource name |  | String
|===


=== Query Parameters (19 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *atomix* (common) | The Atomix instance to use |  | Atomix
| *configurationUri* (common) | The Atomix configuration uri. |  | String
| *defaultAction* (common) | The default action. The value can be one of: SET, GET, GET_AND_SET, COMPARE_AND_SET | SET | Action
| *nodes* (common) | The address of the nodes composing the cluster. |  | String
| *resultHeader* (common) | The header that wil carry the result. |  | String
| *transportClassName* (common) | The class name (fqn) of the Atomix transport | io.atomix.catalyst.transport.netty.NettyTransport | String
| *ttl* (common) | The resource ttl. |  | long
| *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
| *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
| *basicPropertyBinding* (advanced) | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
| *defaultResourceConfig* (advanced) | The cluster wide default resource configuration. |  | Properties
| *defaultResourceOptions* (advanced) | The local default resource options. |  | Properties
| *ephemeral* (advanced) | Sets if the local member should join groups as PersistentMember or not. If set to ephemeral the local member will receive an auto generated ID thus the local one is ignored. | false | boolean
| *readConsistency* (advanced) | The read consistency level. The value can be one of: ATOMIC, ATOMIC_LEASE, SEQUENTIAL, LOCAL |  | ReadConsistency
| *resourceConfigs* (advanced) | Cluster wide resources configuration. |  | Map
| *resourceOptions* (advanced) | Local resources configurations |  | Map
| *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
|===
// endpoint options: END


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