第 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,如 JMS、File 或 SEDA
明确指定 InOnly
如果您使用默认为 InOut 的组件,您可以使用 pattern 属性覆盖端点 的消息交换 模式。
foo:bar?exchangePattern=InOnly
从 Camel 上的 2.0 开始,您可以使用 DSL 指定 消息交换模式。
from("mq:someQueue"). inOnly(). bean(Foo.class);
或者您可以使用显式模式调用端点
from("mq:someQueue"). inOnly("mq:anotherQueue");
<route> <from uri="mq:someQueue"/> <inOnly uri="bean:foo"/> </route>
<route> <from uri="mq:someQueue"/> <inOnly uri="mq:anotherQueue"/> </route>