第 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/en-us/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 指定 消息交换模式

使用 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>