摘要
Apache Camel的企业集成模式的灵感来自Gregor Hohpe和Bobby Woolf所写的同名书。这些作者描述的模式为开发企业集成项目提供了一个极好的工具箱。除了提供用于讨论集成体系结构的通用语言外,许多模式都可以使用Apache Camel的编程接口和XML配置直接实现。
模式概述
《企业集成模式》
Apache Camel支持Gregor Hohpe和Bobby Woolf 撰写的《Enterprise Integration Patterns》一书中的大多数模式。
消息系统
消息系统的基本概念和组件。
图标 | 名称 | 用例 |
---|---|---|
![]() | “消息模式” | 通过消息通道连接的两个应用程序如何交换一条信息? |
![]() | “消息通道模式” | 一个应用程序如何使用消息传递与另一应用程序通信? |
![]() | “消息端点模式” | 应用程序如何连接到消息传递通道以发送和接收消息? |
![]() | “管道和过滤器模式” | 我们如何在保持独立性和灵活性的同时对消息执行复杂的处理? |
![]() | “消息路由器模式” | 如何解耦各个处理步骤,以便根据一组定义的条件将消息传递到不同的过滤器? |
![]() | “消息转换器模式” | 使用不同数据格式的系统如何通过消息传递相互通信? |
消息通道
消息传递通道是用于连接消息传递系统中的参与者的基本组件。在图案“消息通道”描述了不同类型的消息通道可用的。
表:消息通道
图标 | 名称 | 用例 |
---|---|---|
![]() | “点对点通道模式 | 呼叫者如何才能确保恰好有一个接收者会收到文件或将执行呼叫? |
![]() | “发布订阅通道模式 | 发送者如何向所有感兴趣的接收者广播事件? |
![]() | “死信通道模式” | 消息传递系统将如何处理无法传递的消息? |
![]() | “保证传递模式” | 即使消息系统发生故障,发件人如何确保消息将被传递? |
![]() | “消息总线模式” | 有什么体系结构可以使分离的,分离的应用程序一起工作,从而可以在不影响其他应用程序的情况下添加或删除一个或多个应用程序? |
消息构造
消息构造显示的消息构造模式描述了通过系统的消息的各种形式和功能。
图标 | 名称 | 用例 |
---|---|---|
![]() | 称为“标识”的部分 | 请求者如何识别生成收到的回复的请求? |
![]() | “返回地址” | 回复者如何知道将回复发送到哪里? |
消息路由
消息路由 显示的消息路由模式描述了将消息通道链接在一起的各种方法,包括可以应用于消息流的各种算法(无需修改消息主体)。
图标 | 名称 | 用例 |
---|---|---|
![]() | “基于内容的路由器” | 我们如何处理单个逻辑功能(例如清单检查)的实现分布在多个物理系统上的情况? |
![]() | “消息过滤器” | 组件如何避免收到不感兴趣的消息? |
![]() | “收件人清单” | 我们如何将邮件路由到动态指定的收件人列表? |
![]() | “分离器” | 如果消息包含多个元素,而每个元素可能都必须以不同的方式进行处理,我们该如何处理? |
![]() | “聚合器” | 我们如何合并单个但相关的消息的结果,以便可以整体处理它们? |
![]() | “重排器” | 我们如何才能获得一系列相关但不按顺序排列的消息回到正确的顺序? |
![]() | “组合消息处理器” | 处理包含多个元素(每个元素可能需要不同的处理)的消息时,如何维护整个消息流? |
“散布聚集” | 当一条消息需要发送给多个收件人(每个收件人都可以发送回复)时,您如何维护整个消息流? | |
![]() | “布线单” | 如果在设计时未知步骤的顺序,并且每个消息可能有所不同,我们如何通过一系列处理步骤连续地路由消息? |
“节流器” | 如何限制消息以确保特定端点不会过载,或者我们不会超出某些外部服务的商定SLA? | |
“ 延迟器” | 如何延迟发送消息? | |
“负载均衡器” | 如何在多个端点之间平衡负载? | |
“ 断路器” | 呼叫外部服务时如何使用Hystrix断路器?Camel 2.18中的新功能。 | |
“服务电话” | 通过在注册表中查找服务,如何在分布式系统中调用远程服务?Camel 2.18中的新功能。 | |
“多播” | 如何将消息同时路由到多个端点? | |
“循环” | 如何重复循环处理消息? | |
“采样” | 如何在给定时间段内从多条消息中采样一条消息,以避免自己的流路由过载? |
消息转换
消息转换显示的消息转换模式描述了如何出于各种目的修改消息的内容。
图标 | 名称 | 用例 |
---|---|---|
![]() | “内容丰富器” | 如果消息始发者没有所有必需的数据项,如何与另一个系统通信? |
![]() | “内容过滤器” | 当您只对几个数据项感兴趣时,如何简化处理大消息的处理? |
![]() | “声明检查EIP” | 我们如何在不牺牲信息内容的情况下减少跨系统发送的消息的数据量? |
![]() | “规范化器” | 您如何处理在语义上等效但以不同格式到达的消息? |
“排序” | 如何对邮件正文进行排序? |
消息端点
消息端点表示消息传递通道与应用程序之间的联系点。消息端点显示的消息端点模式描述了可以在端点上配置的各种功能和服务质量。
图标 | 名称 | 用例 |
---|---|---|
“消息映射器” | 如何在域对象和消息传递基础结构之间移动数据,同时使两者彼此独立? | |
![]() | “事件驱动的消费者” | 当消息可用时,应用程序如何自动使用它们? |
![]() | “轮询消费者” | 准备就绪后,应用程序如何使用消息? |
![]() | “竞争消费者” | 消息传递客户端如何同时处理多个消息? |
![]() | “消息调度程序” | 单个通道上的多个使用者如何协调他们的消息处理? |
![]() | “选择性消费者” | 消息使用者如何选择要接收的消息? |
![]() | “持久订阅者” | 订户在不收听消息时如何避免丢失消息? |
“全能消费者” | 消息接收者如何处理重复的消息? | |
![]() | “事务客户端” | 客户如何通过消息传递系统控制其事务? |
![]() | “消息传递网关” | 您如何封装从应用程序其余部分对消息传递系统的访问? |
![]() | “服务激活器” | 应用程序如何设计要由各种消息传递技术以及非消息传递技术调用的服务? |
系统管理
系统管理 显示的系统管理模式描述了如何监视,测试和管理消息传递系统。
图标 | 名称 | 用例 |
---|---|---|
![]() | 系统管理 | 您如何检查在点对点通道上传播的消息? |