第 7 章 消息构建
摘要
消息构建模式描述了通过系统传递的消息的各种形式和功能。
7.1. 关联标识符
概述
图 7.1 “关联标识符模式” 所示的 关联标识符 模式描述了如何匹配带有请求消息的回复信息,因为使用了异步消息系统来实施请求备份协议。这种理念的本质在于,请求消息应当通过唯一令牌生成,请求 ID,用于标识请求消息并回复消息应包含令牌、关联 ID(包含匹配请求 ID )的关联 ID。
Apache Camel 通过获取或设置消息上的标头,支持来自 EIP 模式的识别标识符。
在使用 ActiveMQ 或 JMS 组件时,关联标识符标识符标头被称为 JMSCorrelationID
。您可以在任何消息交换中添加您自己的关联标识符,以帮助将消息与单一对话(或业务流程)相关联。关联标识符通常存储在 Apache Camel 消息标头中。
有些 EIP 模式会加快子消息,在这种情况下,Apache Camel 会在 Exchanges 中添加一个关联 ID,作为其键为 Exchange.CORRELATION_ID
的属性,该模式将链接回源 Exchanges。例如,分割器、多播、接收者列表 和 线 tap EIP 执行此操作。
图 7.1. 关联标识符模式
事件消息
Camel 支持 企业集成模式 中的事件 消息,方法是支持 Exchange Pattern on a message,该消息可设为 InOnly 以指示单向事件信息。然后,Camel Apache Camel 组件参考 使用底层传输或协议实施此模式。
许多 Apache Camel 组件参考 的默认行为只是用于 JMS、file 或 SEDA等。https://access.redhat.com/documentation/zh-cn/red_hat_fuse/7.11/html-single/apache_camel_component_reference/index#file-component
明确指定 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>