40.4. Built-In UUID Generators
Overview
Apache Camel enables you to register a UUID generator in the
CamelContext
. This UUID generator is then used whenever Apache Camel needs to generate a unique ID—in particular, the registered UUID generator is called to generate the IDs returned by the Exchange.getExchangeId()
and the Message.getMessageId()
methods.
For example, you might prefer to replace the default UUID generator, if part of your application does not support IDs with a length of 36 characters (like Websphere MQ). Also, it can be convenient to generate IDs using a simple counter (see the
SimpleUuidGenerator
) for testing purposes.
Provided UUID generators
You can configure Apache Camel to use one of the following UUID generators, which are provided in the core:
org.apache.camel.impl.ActiveMQUuidGenerator
—(Default) generates the same style of ID as is used by Apache ActiveMQ. This implementation might not be suitable for all applications, because it uses some JDK APIs that are forbidden in the context of cloud computing (such as the Google App Engine).org.apache.camel.impl.SimpleUuidGenerator
—implements a simple counter ID, starting at1
. The underlying implementation uses thejava.util.concurrent.atomic.AtomicLong
type, so that it is thread-safe.org.apache.camel.impl.JavaUuidGenerator
—implements an ID based on thejava.util.UUID
type. Becausejava.util.UUID
is synchronized, this might affect performance on some highly concurrent systems.
Custom UUID generator
To implement a custom UUID generator, implement the
org.apache.camel.spi.UuidGenerator
interface, which is shown in Example 40.5, “UuidGenerator Interface”. The generateUuid()
must be implemented to return a unique ID string.
Example 40.5. UuidGenerator Interface
// Java package org.apache.camel.spi; /** * Generator to generate UUID strings. */ public interface UuidGenerator { String generateUuid(); }
Specifying the UUID generator using Java
To replace the default UUID generator using Java, call the
setUuidGenerator()
method on the current CamelContext
object. For example, you can register a SimpleUuidGenerator
instance with the current CamelContext
, as follows:
// Java getContext().setUuidGenerator(new org.apache.camel.impl.SimpleUuidGenerator());
Note
The
setUuidGenerator()
method should be called during startup, before any routes are activated.
Specifying the UUID generator using Spring
To replace the default UUID generator using Spring, all you need to do is to create an instance of a UUID generator using the Spring
bean
element. When a camelContext
instance is created, it automatically looks up the Spring registry, searching for a bean that implements org.apache.camel.spi.UuidGenerator
. For example, you can register a SimpleUuidGenerator
instance with the CamelContext
as follows:
<beans ...> <bean id="simpleUuidGenerator" class="org.apache.camel.impl.SimpleUuidGenerator" /> <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"> ... </camelContext> ... </beans>