第 7 章 消息结构

摘要

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

7.1. 关联标识符

概述

图 7.1 “关联标识符模式” 中显示的 关联标识符 模式描述了如何与带有请求消息的回复消息匹配,因为异步消息传递系统用于实现请求回复协议。这种理念是,请求消息应该使用唯一的令牌(请求 ID )生成,该请求 ID 标识请求消息,并且回复消息应包含令牌、关联 ID,其中包含匹配的请求 ID。

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

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

有些 EIP 模式会关闭子消息,在这种情况下,Apache Camel 会向 Exchange 添加关联 ID 作为密钥 Exchange 的属性。Exchange.CORRELATION_ID 链接到源交换。例如,分割器多播接收者列表和 有线 tap EIP 执行此操作。

图 7.1. 关联标识符模式

关联标识符模式

事件消息

Camel 通过支持 消息 上的 Exchange Pattern (可以设置为 InOnly )来指示单向事件消息,从而支持 企业集成模式 中的事件消息。???然后,Camel Apache Camel 组件参考 使用底层传输或协议实施此模式。

事件消息解决方案

许多 Apache Camel 组件参考 的默认行为是 InOnly,如 JMSFileSEDA

明确指定 InOnly

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

foo:bar?exchangePattern=InOnly

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

使用 Fluent Builder

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>