34.4. 内置 UUID Generators
概述
Apache Camel 允许您在 CamelContext
中注册 UUID 生成器。然后,当 Apache Camel 需要生成唯一 ID 进行 DHCP 生成器时,会使用此 UUID 生成器来生成 Exchange.getExchangeId ()
和 Message.getMessageId ()
方法返回的 ID。
例如,如果应用程序的一部分不支持使用 36 个字符(如 Websphere MQ)的 ID,则可能需要替换默认 UUID 生成器。另外,使用简单计数器生成 ID (请参阅 SimpleUuidGenerator
)用于测试。
提供的 UUID 生成器
您可以将 Apache Camel 配置为使用以下 UUID 生成器之一,该生成器在内核中提供:
-
org.apache.camel.impl.ActiveMQUuidGenerator
clusterSelector- (默认) 生成与 Apache ActiveMQ 使用的相同 ID 风格。这种实现可能不适用于所有应用程序,因为它使用一些在云计算上下文中禁止的 JDK API (如 Google App Engine)。 -
org.apache.camel.impl.SimpleUuidGenerator
tc-方式实施一个简单的计数器 ID (从1
开始)。底层的实现使用java.util.concurrent.atomic.AtomicLong
类型,因此它是线程安全的。 -
org.apache.camel.impl.JavaUuidGenerator
tc-方式实施基于java.util.UUID
类型的 ID。由于已同步java.util.UUID
,这可能会影响某些高度并发系统的性能。
自定义 UUID 生成器
要实施自定义 UUID 生成器,请实施 org.apache.camel.spi.UuidGenerator
接口,如 例 34.5 “UuidGenerator 接口” 所示。必须实施 generateUuid ()
来返回唯一 ID 字符串。
例 34.5. UuidGenerator 接口
// Java package org.apache.camel.spi; /** * Generator to generate UUID strings. */ public interface UuidGenerator { String generateUuid(); }
使用 Java 指定 UUID 生成器
要使用 Java 替换默认 UUID 生成器,在当前 CamelContext
对象中调用 setUuidGenerator ()
方法。例如,您可以使用当前的 CamelContext
注册 简单UuidGenerator
实例,如下所示:
// Java getContext().setUuidGenerator(new org.apache.camel.impl.SimpleUuidGenerator());
在激活任何路由 之前,应该在启动时调用 setUuidGenerator ()
方法。
使用 Spring 指定 UUID 生成器
要使用 Spring 替换默认 UUID 生成器,您只需要使用 Spring bean
元素创建 UUID 生成器的实例。创建 camelContext
实例时,它会自动查找 Spring registry,搜索实现 org.apache.camel.spi.UuidGenerator
的 bean。例如,您可以使用 CamelContext
注册 SimpleUuidGenerator
实例,如下所示:
<beans ...> <bean id="simpleUuidGenerator" class="org.apache.camel.impl.SimpleUuidGenerator" /> <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"> ... </camelContext> ... </beans>