第 7 章 消息结构

摘要

消息构建模式描述了通过系统传递的消息的各种形式和功能。

7.1. correlation Identifier

概述

关联标识符 模式(如 图 7.1 “correlation Identifier Pattern” 所示)描述了如何与请求消息匹配消息,因为异步消息传递系统用于实现请求关系协议。这种理念的意义是,应当使用唯一令牌生成请求消息,请求 ID 则标识请求消息和回复消息中应包括令牌,其关联 ID 包含匹配的请求 ID。

通过在消息上获取或设置标头,Apache Camel 支持来自 EIP 模式的 Correlation Identifier。

在使用 ActiveMQ 或 JMS 组件时,关联标识符标头称为 JMSCorrelationID。您可以将自己的关联标识符添加到任何消息交换中,以帮助在单个对话(或业务流程)中关联消息。相关标识符通常存储在 Apache Camel 消息标头中。

有些 EIP 模式关闭子消息,在这样的情形中,Apache Camel 为交换添加关联 ID,作为密钥 Exchange.CORRELATION_ID 的属性,链接回源交换。例如,拆分 器、多播接收方列表有线 tap EIP 执行此操作。

图 7.1. correlation Identifier Pattern

correlation 标识符模式

事件消息

Camel 通过支持 消息中的 Exchange Pattern 来支持企业集成模式 的事件 消息,该消息 可以设置为" 仅限 "表示单向事件消息。Camel Apache Camel 组件参考,然后使用底层传输或协议实施此模式。

事件消息解决方案

许多 Apache Camel 组件参考 的默认行为仅适用于 JMS文件或 SEDA

明确指定(Only)

如果您使用默认为 InOut 的组件,您可以使用 pattern 属性覆盖端点 的消息交换 模式。

foo:bar?exchangePattern=InOnly

在 Camel 上,从 2.0 开始,您可以使用 DSL 指定 消息交换模式

使用 Fluent Builders

from("mq:someQueue").
  inOnly().
  bean(Foo.class);

或者您可以使用显式模式调用端点

from("mq:someQueue").
  inOnly("mq:anotherQueue");

使用 Spring XML 扩展

<route>
    <from uri="mq:someQueue"/>
    <inOnly uri="bean:foo"/>
</route>
<route>
    <from uri="mq:someQueue"/>
    <inOnly uri="mq:anotherQueue"/>
</route>