第 11 章 消息传递端点
摘要
消息传递端点模式描述了可在端点上配置的各种功能和服务质量。
11.1. 消息传递映射程序
概述
消息传递映射器 模式描述了如何将域对象映射到规范消息格式,其中消息格式被选为平台中立平台。选择的消息格式应该适合通过 第 6.5 节 “消息总线” 传输,其中消息总线是集成各种不同系统的后果,其中一些可能不是面向对象的。
许多不同的方法可以,但并非所有方法都满足消息传递映射器的要求。例如,传输对象的一个明显方法是使用 对象序列化,它可让您使用无误编码(在 Java 中原生支持)将对象写入数据流。但是,这不是 用于消息传递映射器模式的适当方法,因为序列化格式仅被 Java 应用理解。Java 对象序列化会在原始应用程序以及消息传递系统中其他应用程序之间产生异常不匹配。
消息传递映射程序的要求总结如下:
- 用于传输域对象的规范消息格式应该适合由面向非对象的应用程序使用。
- 映射器代码应该独立于域对象代码和消息传递基础架构进行单独实施。Apache Camel 通过提供 hook 来帮助满足此要求,该 hook 可用于将映射程序代码插入到路由中。
- 映射器可能需要找到处理特定面向对象的概念的有效方法,如继承、对象引用和对象树。这些问题的复杂性因应用程序而异,但映射器实施的动画必须始终是创建能被非面向对象的应用程序有效地处理的消息。
查找要映射的对象
您可以使用以下机制之一查找要映射的对象:
-
查找注册的 bean. HEKETI-5-4 用于单例对象和少量对象,您可以使用
CamelContext
registry 存储对 Bean 的引用。例如,如果使用 Spring XML 实例化 bean 实例,它会自动输入到 registry 中,其中 bean 由其id
属性的值标识。 使用 JoSQL 语言选择对象。 如果要访问的所有对象已在运行时实例化,您可以使用 JoSQL 语言来查找特定的对象(或对象)。例如,如果您有一个类
org.apache.camel.builder.sql.Person
,具有name
bean 属性并且传入的消息具有UserName
标头,您可以使用以下代码选择name
属性等于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 表达式中的标头值。- 对于更 可扩展的解决方案,可能需要从数据库中读取对象数据。在某些情况下,现有面向对象的应用可能已经提供可以从数据库中加载对象的查找器对象。在其他情况下,您可能需要编写一些自定义代码以从数据库提取对象,在这种情况下,JDBC 组件和 SQL 组件可能很有用。