基于Apache Camel的企业集成模式实践:第三章-企业集成模式简介
摘要
Apache Camel的企业集成模式设计灵感源自Gregor Hohpe与Bobby Woolf合著的同名经典著作。书中提出的模式为企业集成项目提供了强大的工具箱:既为集成架构的讨论提供通用术语体系,又可通过Apache Camel的编程接口和XML配置直接实现多数模式。
3.1 模式概览
《企业集成模式》
Apache Camel全面支持《Enterprise Integration Patterns》一书中描述的大多数模式,为开发者提供了标准化的集成解决方案。
消息系统
表3.1 "消息系统"展示了构成消息系统的核心模式,这些模式定义了消息传递的基础概念和组件。
表3.1 消息系统
图标 | 名称 | 用例 |
消息模式 | 如何通过消息通道实现两个应用间的单条信息交换? | |
消息通道模式 | 应用如何通过消息传递建立通信? | |
消息端点模式 | 应用如何连接消息通道进行收发? | |
管道和过滤器模式 | 如何实现复杂处理的模块化与灵活性? | |
消息路由模式 | 如何基于条件解耦处理步骤? | |
消息转换模式 | 异构系统如何通过消息传递实现数据格式转换? |
消息通道
表3.2 "消息通道"描述了不同类型消息通道的应用场景。
表3.2 消息通道
图标 | 名称 | 用例 |
点对点通道 | 如何确保消息被唯一接收方处理? | |
发布订阅通道 | 如何实现事件广播? | |
死信通道 | 如何处理无法投递的消息? | |
保证交付 | 如何确保系统故障时的消息可靠性? | |
消息总线 | 如何构建松耦合的应用集成架构? |
消息构造
表3.3 "消息构造"描述了消息在系统中的形态与功能。
表3.3 消息构造
图标 | 名称 | 用例 |
关联标识符 | 如何匹配请求与响应? | |
返回地址 | 如何指定响应返回路径? |
消息路由
表3.4 "消息路由"展示了消息通道的动态链接方式。
表3.4 消息路由
图标 | 名称 | 用例 |
内容路由 | 如何将逻辑功能分布到多系统? | |
消息过滤 | 如何屏蔽无关消息? | |
收件人列表 | 如何动态指定接收方列表? |
续表
分离器 | 如何处理包含多个元素的消息? | |
聚合器 | 如何合并相关消息的处理结果? | |
重排器 | 如何恢复乱序消息的正确顺序? | |
组合消息处理器 | 如何维护多元素消息的处理流程? | |
路由单 | 如何动态定义消息处理步骤顺序? | |
无图标 | 节流器 | 如何控制消息流量以防止过载? |
无图标 | 延迟器 | 如何延迟消息发送? |
无图标 | 负载均衡器 | 如何分配消息到多个端点? |
无图标 | 断路器 | 如何通过断路器增强服务调用可靠性? |
无图标 | 服务调用 | 如何在分布式系统中调用远程服务? |
无图标 | 多播 | 如何将消息同时路由至多个端点? |
无图标 | 循环 | 如何重复处理消息? |
无图标 | 采样 | 如何避免消息流过载? |
消息转换
表3.5 消息转换
图标 | 名称 | 用例 |
内容丰富器 | 如何补充消息缺失的数据? | |
内容过滤器 | 如何简化大消息的处理? | |
声明检查 | 如何减少消息数据量而不丢失信息? | |
规范化器 | 如何处理语义相同但格式不同的消息? | |
无图标 | 排序 | 如何对消息体进行排序? |
消息端点
表3.6 消息端点
图标 | 名称 | 用例 |
无图标 | 消息映射器 | 如何解耦领域对象与消息系统? |
事件驱动消费者 | 如何自动消费可用消息? | |
轮询消费者 | 如何按需拉取消息? | |
竞争消费者 | 如何并行处理消息? | |
消息调度器 | 如何协调多消费者的消息处理? | |
选择性消费者 | 如何筛选接收的消息? | |
持久订阅者 | 如何避免离线时消息丢失? | |
无图标 | 全能消费者 | 如何避免重复消息处理? |
事务客户端 | 如何控制消息事务? | |
消息网关 | 如何封装对消息系统的访问? | |
服务激活器 | 如何设计多协议兼容的服务? |
系统管理
表3.7 系统管理
图标 | 名称 | 用例 |
系统管理 | 如何监控点对点通道的消息? |