第 34 章 了解消息格式


摘要

在可以使用 Apache Camel 开始编程前,您应该清楚了解消息交换的建模方式。由于 Apache Camel 可以处理许多消息格式,因此基本消息类型旨在具有抽象格式。Apache Camel 提供了访问和转换消息正文和消息标头的数据格式所需的 API。

34.1. Exchanges

概述

Exchange 对象 是一种打包程序,封装收到的消息并存储其关联的元数据(包括 交换属性)。此外,如果当前消息分配给生成者端点,则交换提供了临时插槽来保存回复( Out 消息)。

在 Apache Camel 中交换的一个重要功能是,它们支持 lazy 创建消息。当不需要显式访问信息的路由时,这可能会产生显著的优化。

图 34.1. 通过路由交换对象

通过路由交换对象

图 34.1 “通过路由交换对象” 显示通过路由的交换对象。在路由上下文中,交换对象作为 Processor.process () 方法的参数传递。这意味着交换对象可以被源端点、目标端点和所有处理器直接访问。

Exchange 接口

org.apache.camel.Exchange 接口定义了访问 InOut 消息的方法,如 例 34.1 “Exchange Methods” 所示。

例 34.1. Exchange Methods

// Access the In message
Message getIn();
void    setIn(Message in);

// Access the Out message (if any)
Message getOut();
void    setOut(Message out);
boolean hasOut();

// Access the exchange ID
String  getExchangeId();
void    setExchangeId(String id);

有关 Exchange 界面中方法的完整描述,请参考 第 43.1 节 “Exchange Interface”

lazy 创建消息

Apache Camel 支持 lazy 创建 In、out 和 Fault 消息。这意味着,在尝试访问它们之前不会创建消息实例(例如,通过调用 getIn ()getOut ())。lazy 消息创建语义由 org.apache.camel.impl.DefaultExchange 类实现。

如果您调用 no-argument accessors (getIn ()getOut ())中的一个,或者如果您调用布尔值参数等于 true (即 getIn (true)getOut (true)),则默认方法实现会创建一个新的消息实例,如果它尚不存在。

如果您调用一个等于 false (即 getIn ( false )getOut (false)的布尔值参数)的访问者,则默认方法实现会返回当前消息值。[1]

lazy 创建交换 ID

Apache Camel 支持 lazy 创建交换 ID。您可以在任何交换上调用 getExchangeId () 来获取该交换实例的唯一 ID,但仅当您实际调用该方法时,才会生成 ID。此方法的 DefaultExchange.getExchangeId () 实现将 ID 生成委派给通过 CamelContext 注册的 UUID 生成器。

有关如何使用 CamelContext 注册 UUID 生成器的详情,请参考 第 34.4 节 “built-In UUID Generators”



[1] 如果没有活跃的方法,返回的值将为 null
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.