第 11 章 消息传递端点


摘要

消息传递端点模式描述了可以在端点上配置的各种功能和服务质量。

11.1. 消息传递映射程序

概述

消息传递映射器 模式描述了如何将域对象映射到规范消息格式或从规范消息格式映射,其中将消息格式选为平台中立状态。所选的消息格式应该适用于通过 第 6.5 节 “消息总线” 进行传输,其中消息总线是集成各种不同系统的支柱,其中一些可能不是面向对象。

许多不同的方法都可行,但并非所有方法都满足消息传递映射器的要求。例如,传输对象的一种明显方法是使用 对象序列化,它可让您使用非模糊的编码(在 Java 中原生支持)将对象写入数据流。但是,这不是 用于消息传递映射模式的最佳方法,因为序列化格式仅被 Java 应用程序理解。Java 对象序列化会在原始应用程序和消息传递系统中的其他应用程序之间造成不匹配。

消息传递映射程序的要求总结如下:

  • 用于传输域对象的规范消息格式应该适合面向非对象的应用程序使用。
  • 映射程序代码应该独立于域对象代码和消息传递基础架构实施。Apache Camel 通过提供 hook (用于将映射程序代码插入路由)来帮助满足这一要求。
  • 映射程序可能需要找到处理特定面向对象概念的有效方法,如继承、对象引用和对象树。这些问题的复杂性因应用程序而异,但映射程序实施的目的是为了创建可由非面向对象的应用程序高效处理的消息。

查找要映射的对象

您可以使用以下机制之一查找要映射的对象:

  • 为单例对象和少量对象查找已注册的 bean. 方式。在单例对象和少量对象时,您可以使用 CamelContext 注册表来存储对 Bean 的引用。例如,如果使用 Spring XML 实例化 bean 实例,它将自动输入到 registry 中,其中 Bean 由其 id 属性的值来标识。
  • 使用 JoSQL 语言选择对象。将您要访问的所有对象都 在运行时进行实例化,您可以使用 JoSQL 语言来查找特定的对象(或对象)。例如,如果您有一个类,org.apache.camel.builder.sql.Person,其 name 为 bean 属性,并且传入消息具有 UserName 标头,您可以选择其名称属性等于使用以下代码的 UserName 标头的值:

    import static org.apache.camel.builder.sql.SqlBuilder.sql;
    import org.apache.camel.Expression;
    ...
    Expression expression = sql("SELECT * FROM org.apache.camel.builder.sql.Person where name = :UserName");
    Object value = expression.evaluate(exchange);

    其中语法 :HeaderName 用于替换 JoSQL 表达式中的标头值。

  • 对于更具扩展性的解决方案,动态 TOKEN-TOKEN 可能需要从数据库读取对象数据。在某些情况下,现有面向对象的应用程序可能已提供一个 finder 对象,该对象可以从数据库加载对象。在其他情况下,您可能需要编写一些自定义代码来从数据库提取对象,在这些情况下,JDBC 组件和 SQL 组件可能很有用。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.