搜索

34.4. built-In UUID Generators

download PDF

概述

Apache Camel 允许您在 CamelContext 中注册 UUID 生成器。然后,当 Apache Camel 需要生成唯一的 ID swig-wagonin 特殊时,会调用此 UUID 生成器来生成 Exchange.getExchangeId ()Message.getMessageId () 方法返回的 ID。

例如,如果应用程序的一部分不支持 ID,则可能会希望替换默认的 UUID 生成器,长度为 36 个字符(如 WebSphere MQ)。另外,使用简单计数器(请参阅 SimpleUuidGenerator)用于测试目的,可以方便生成 ID。

提供的 UUID 生成器

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

  • org.apache.camel.impl.ActiveMQUuidGenerator hmac- (Default) 生成与 Apache ActiveMQ 使用的相同 ID 样式。这个实现可能不适用于所有应用程序,因为它使用在云计算(如 Google App Engine)中禁止的一些 JDK API。
  • org.apache.camel.impl.SimpleUuidGenerator HEKETI- && implementations 简单计数器 ID,从 1 开始。底层实施使用 java.util.concurrent.atomic.AtomicLong 类型,因此它是 thread-safe。
  • org.apache.camel.impl.JavaUuidGenerator HEKETI-wagon 实现基于 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>
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.