第 5 章 消息传递系统

摘要

本章介绍消息传递系统的基本构建块,如端点、消息通道和消息路由器。

5.1. 消息

概述

消息 是传输消息传递系统的最小单元(由下图中的灰色点代表)。消息本身可能含有一些内部结构(即一个消息),其中包含了与 图 5.1 “消息模式” 中的 grey dot 连接的 geometrical figures 来表示的多部分(即 a geometrical figure)。

图 5.1. 消息模式

Message pattern

消息类型

Apache Camel 定义以下不同消息类型:

  • 在消息 ,在从消费者端点通过路由传输到制作者端点的消息中(通常,启动消息交换)。
  • 从生产者端点到消费者端点(通常是响应 In 消息)的消息中出发消息(通常要通过来自生产者端点的路由)。

所有这些消息类型都由 org.apache.camel.Message 接口在内部表示。

消息结构

默认情况下,Apache Camel 将以下结构应用到所有消息类型:

  • 标头 相应数据包含从消息中提取的元数据或标头数据。
  • 正文 abrt-sually 以原始形式包含整个消息。
  • Attachments abrt-jaxb Message attachments(需要与特定的消息传递系统(如 JBI)集成。

务必要记住,这个部门分为标头、正文和附件,是消息的抽象模型。Apache Camel 支持许多不同的组件,生成各种消息格式。最终,这是底层组件实施,决定将什么放置到邮件的标头和正文中。

关联消息

在内部,Apache Camel 记住消息 ID,用于关联各个消息。但是,在实践中,Apache Camel 关联消息的最重要方法是 交换 对象。

Exchange 对象

Exchange 对象是封装相关消息的实体,其中相关消息的集合被称为 消息交换,并且管理消息序列的规则被称为 交换模式。例如,两个常见的交换模式是:单向事件消息(与 In 消息一致)和请求检查交换(记录 In 消息,后接 Out 消息)。

访问消息

在 Java DSL 中定义路由规则时,您可以使用以下 DSL 构建器方法访问消息的标头和正文:

  • header(String name), body() Curve- the returns the named header and the current In message 的正文。
  • outBody() libselinux- the return the current Out 消息的正文。

例如,若要填充 In 消息 的用户名 标头,您可以使用以下 Java DSL 路由:

from(SourceURL).setHeader("username", "John.Doe").to(TargetURL);