Mule, AquaLogic ESB 学习阶段性总结 (2009.9.21)

2024-01-25 19:32

本文主要是介绍Mule, AquaLogic ESB 学习阶段性总结 (2009.9.21),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

下面这段文字为转载:http://dragonetzhou.iteye.com/blog/171499

 

首先考虑一个最简单的例子:只有一个入口和一个出口。只涉及到一个服务提供者和服务消费者。服务提供者只提供webservice协议进行访问。消费者只 能通过http协议。那么两者如何通信呢。消费者没法直接访问提供者,那么消费者就访问ESB了。ESB就提供了一个虚拟的基于http协议的端点。然后 ESB就在另外一端以webservice协议访问提供者。就这么简单。

   但是在这里必须弄清楚的是:从服务提供者的视角来看,只有一种方式连接到ESB。从消费者的视角来看,可以以多种方式访问ESB。从ESB的视角来看,有多种方式访问服务提供者,但是对于一个特定的服务提供者来说访问方式是一定的。

   好了。这里定义了两个端点(服务地址+访问协议)。一个是虚拟的ESB为消费者提供的访问端点。一个是真实的可以为ESB所能访问到的服务端点。那么在这两个端点之间又有点什么东西呢?应该定义什么东西来连接着两点呢?Mule 定义了一个叫UMO 的组件。然后将两个端点附在了UMO 上面。UMO 本来就是一个虚的概念,它可以是POJO,也可以什么都不是。Mule 需要一个载体来完成两个端口的连接,这个就是UMO 。这样Mule 就可以将其他的ESB概念:数据格式的转换,路由,监控和日志往UMO 上面加了。这么一路下来不就是一个管道的概念了吗?服务消费者-->入站端口-->数据格式转换-->路由-->UMO -->路由-->数据转换-->出站端口-->服务提供者。

   到这里,前面一段是根据正常的思路一步步走来。后面我就开始胡思乱想了,也不知道原作者是不是这么想的。

   UMO 之虚与实:当出站端口连接的是一个真实的访问地址,这个UMO 就是实的;反之则是虚的。UMO 也 可以同时有实有虚。例如下图,UMO1就有虚有实,UMO2就是一个实的。为什么会这样呢?实与虚其实是针对是否有业务服务来说的。有则是实的,没有则是 虚的。根据ESB是连接,管理,路由的这么一个原则。实的端口就实现了连接的这么一个功能。而需的其实起到了一个路由的作用。那么一个服务请求完全有可能 经过N个虚的UMO 才到达服务提供者。ESB不应该有真实的业务服务。那么UMO 就是一个抽象的东西,它不实现业务逻辑。

画完这幅图,我怎么觉得它像一个树形结构啊。UMO 是枝,Service Provider 就是叶啊。

   端点之主动与被动:一说到主动,被动,我就想到男的应该主动,女的应该是被动的。那么ESB应该是主动还是被动呢?两者都有,那ESB岂不是不男不女。扯 远了。首先ESB作为服务提供者的代理,它应该提供代理服务被动让各种消费者访问;其次,ESB作为服务的联系人应该主动地调用真实的服务。那么像前面的 例子,入站就是被动服务啦,有请求来我就进行处理,请求通过继续往前走,不通过就打回去。出站就是主动服务了,调用真实的业务服务组件。那么Mule 是如何处理的呢?Mule 也定义了入站和出站。Mule 的出站没什么好说的,肯定是主动出击了,访问真实的服务或是下一个UMO 节点。可是Mule 的 入站除了被动,还可以主动。先说被动,例如http,soap,servlet,tcp,vm等协议在入站时就是被动的,有请求来我就处理。其实现就是把 MessageReciever设计成一个监听服务,不断监听端口是否有请求进来。这个太好理解了。可是对于file,ftp,jdbc协议,竟然可以是 主动出击,而不是被动等待。奇怪了,what happen?仔细想了想,问题出在协议上面,http等协议是一种请求/响应的模式。而file等协议是一种实体操作模式,例如读写文件系统,读写数据 库。所有这种模式在入站端只能是主动出击了,从文件系统和数据库自动抓取数据。

 

=============================================

 

自己的总结:

 

    最近一段时间研究了 Mule ESB, AquaLogic ESB 这两种实现 SOA 的技术(或者叫做平台)。经过前一阵子的懵懵懂懂,现在很多东西都越来越清晰了。

 

    上面转载的这篇文章,从全局的角度来说,和我的理解完全一致。研究完mule之后,再用一用aqualogic,大部分的概念(代理服务,业务服务,路由,叶子节点,管道...)都会豁然开朗。

 

    还需要理解的一个问题就是: 在mule 的内部,inbound --> component --> outbound 数据的一步步传递是通过 底层 事件 的机制实现的。

 

    计算机的好多东西都是 想起来容易 实现起来难。 我下一步的目标就是把 项目中的 那套mule的东西 整明白。把公司的东西变成自己的东西。让自己变得更值钱,嘿嘿...

这篇关于Mule, AquaLogic ESB 学习阶段性总结 (2009.9.21)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/644370

相关文章

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Nginx Location映射规则总结归纳与最佳实践

《NginxLocation映射规则总结归纳与最佳实践》Nginx的location指令是配置请求路由的核心机制,其匹配规则直接影响请求的处理流程,下面给大家介绍NginxLocation映射规则... 目录一、Location匹配规则与优先级1. 匹配模式2. 优先级顺序3. 匹配示例二、Proxy_pa

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

MySQL基本查询示例总结

《MySQL基本查询示例总结》:本文主要介绍MySQL基本查询示例总结,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Create插入替换Retrieve(读取)select(确定列)where条件(确定行)null查询order by语句li

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

Linux区分SSD和机械硬盘的方法总结

《Linux区分SSD和机械硬盘的方法总结》在Linux系统管理中,了解存储设备的类型和特性是至关重要的,不同的存储介质(如固态硬盘SSD和机械硬盘HDD)在性能、可靠性和适用场景上有着显著差异,本文... 目录一、lsblk 命令简介基本用法二、识别磁盘类型的关键参数:ROTA查询 ROTA 参数ROTA

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)