34.4. built-In UUID Generators

概述

Apache Camel 允许您在 CamelContext 中注册 UUID 生成器。然后,每当 Apache Camel 需要生成唯一 ID 确认时,调用该 UUID 生成器来生成 Exchange.getExchangeId()Message.getMessageId() 方法返回的 ID。

例如,如果应用程序的一部分不支持 ID 且长度为 36 个字符(如 Websphere MQ),则您可能更愿意替换默认的 UUID 生成器。另外,使用简单计数器生成 ID 可以方便(请参阅 SimpleUuidGenerator)进行测试。

提供的 UUID 生成器

您可以将 Apache Camel 配置为使用以下 UUID 生成器之一,该生成器在内核中提供:

  • org.apache.camel.impl.ActiveMQUuidGenerator abrt- (默认) 生成与 Apache ActiveMQ 使用的相同 ID 样式。这种实现可能不适用于所有应用程序,因为它使用云计算环境中禁止的一些 JDK API(如 Google App Engine)。
  • org.apache.camel.impl.SimpleUuidGenerator KUBECONFIG-KUBECONFIGimplements a simple counter ID,从 1 开始。底层实施使用 java.util.concurrent.atomic.AtomicLong 类型,因此它是 thread-safe。
  • org.apache.camel.impl.JavaUuidGenerator >_<-sHistoryLimit 实施基于 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 注册 SimpleUuidGenerator 实例,如下所示:

// 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>