Chapter 14. Atomix Map Component Available as of Camel version 2.20 The camel atomix-map component allows you to work with Atomix's Distributed Map collection. Maven users will need to add the following dependency to their pom.xml for this component: <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-atomix</artifactId> <version>USD{camel-version}</version> </dependency> 14.1. URI format atomix-map:mapName 14.2. Options The Atomix Map component supports 5 options, which are listed below. Name Description Default Type configuration (common) The shared component configuration AtomixMapConfiguration atomix (common) The shared AtomixClient instance AtomixClient nodes (common) The nodes the AtomixClient should connect to List configurationUri (common) The path to the AtomixClient configuration String resolveProperty Placeholders (advanced) Whether the component should resolve property placeholders on itself when starting. Only properties which are of String type can use property placeholders. true boolean The Atomix Map endpoint is configured using URI syntax: with the following path and query parameters: 14.2.1. Path Parameters (1 parameters): Name Description Default Type resourceName Required The distributed resource name String 14.2.2. Query Parameters (18 parameters): Name Description Default Type atomix (common) The Atomix instance to use Atomix configurationUri (common) The Atomix configuration uri. String defaultAction (common) The default action. PUT Action key (common) The key to use if none is set in the header or to listen for events for a specific key. Object nodes (common) The address of the nodes composing the cluster. String resultHeader (common) The header that wil carry the result. String transport (common) Sets the Atomix transport. io.atomix.catalyst.transport.netty.NettyTransport Transport 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. ExchangePattern 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. 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 14.3. Spring Boot Auto-Configuration The component supports 9 options, which are listed below. Name Description Default Type camel.component.atomix-map.atomix The shared AtomixClient instance. The option is a io.atomix.AtomixClient type. String camel.component.atomix-map.configuration-uri The path to the AtomixClient configuration String camel.component.atomix-map.configuration.default-action The default action. AtomixMapUSDAction camel.component.atomix-map.configuration.key The key to use if none is set in the header or to listen for events for a specific key. Object camel.component.atomix-map.configuration.result-header The header that wil carry the result. String camel.component.atomix-map.configuration.ttl The resource ttl. Long camel.component.atomix-map.enabled Whether to enable auto configuration of the atomix-map component. This is enabled by default. Boolean camel.component.atomix-map.nodes The nodes the AtomixClient should connect to List camel.component.atomix-map.resolve-property-placeholders Whether the component should resolve property placeholders on itself when starting. Only properties which are of String type can use property placeholders. true Boolean 14.4. Headers Name Type Values Description CamelAtomixResourceAction AtomixMap.Action PUT PUT_IF_ABSENT GET CLEAR SIZE CONTAINS_KEY CONTAINS_VALUE IS_EMPTY ENTRY_SET REMOVE REPLACE VALUES The action to perform CamelAtomixResourceKey Object - The key to operate on CamelAtomixResourceValue Object - The value, if missing In Body is used CamelAtomixResourceOldValue Object - The old value CamelAtomixResourceTTL String / long - The entry TTL CamelAtomixResourceReadConsistency ReadConsistency ATOMIC ATOMIC_LEASE SEQUENTIAL LOCAL The read consistency level 14.5. Configuring the component to connect to an Atomix cluster The nodes of the Atomix cluster you want to join can be se at Endpoint or component level (recommended), below some examples: Endpoint: <beans xmlns="..."> <camelContext xmlns="http://camel.apache.org/schema/spring"> <from uri="direct:start"/> <to uri="atomix-map:myMap?nodes=node-1.atomix.cluster:8700,node-2.atomix.cluster:8700"/> </route> </camelContext> </beans> Component: <beans xmlns="..."> <bean id="atomix-map" class="org.apache.camel.component.atomix.client.map.AtomixMapComponent"> <property name="nodes" value="nodes=node-1.atomix.cluster:8700,node-2.atomix.cluster:8700"/> </bean> <camelContext xmlns="http://camel.apache.org/schema/spring"> <from uri="direct:start"/> <to uri="atomix-map:myMap"/> </route> </camelContext> </beans> 14.6. Usage examples: PUT an element with TTL of 1 second: FluentProducerTemplate.on(context) .withHeader(AtomixClientConstants.RESOURCE_ACTION, AtomixMap.Action.PUT) .withHeader(AtomixClientConstants.RESOURCE_KEY, key) .withHeader(AtomixClientConstants.RESOURCE_TTL, "1s") .withBody(val) .to("direct:start") .send();

Commands:
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-atomix</artifactId> <version>USD{camel-version}</version> </dependency>
atomix-map:mapName
atomix-map:resourceName
<beans xmlns="..."> <camelContext xmlns="http://camel.apache.org/schema/spring"> <from uri="direct:start"/> <to uri="atomix-map:myMap?nodes=node-1.atomix.cluster:8700,node-2.atomix.cluster:8700"/> </route> </camelContext> </beans>
<beans xmlns="..."> <bean id="atomix-map" class="org.apache.camel.component.atomix.client.map.AtomixMapComponent"> <property name="nodes" value="nodes=node-1.atomix.cluster:8700,node-2.atomix.cluster:8700"/> </bean> <camelContext xmlns="http://camel.apache.org/schema/spring"> <from uri="direct:start"/> <to uri="atomix-map:myMap"/> </route> </camelContext> </beans>
FluentProducerTemplate.on(context) .withHeader(AtomixClientConstants.RESOURCE_ACTION, AtomixMap.Action.PUT) .withHeader(AtomixClientConstants.RESOURCE_KEY, key) .withHeader(AtomixClientConstants.RESOURCE_TTL, "1s") .withBody(val) .to("direct:start") .send();