我们在做企业集成项目的时候,经常会用到很多开源中间件,比如企业服务总线,消息中间件,服务框架等。在使用这些开源中间件的时候,我们也趟过了很多的坑,EnjoyingSoft,就是享受这些软件,其中积累的经验分享给大家,希望为开源事业做一份贡献。这篇系列主要说的是企业服务总线Mule ESB。

Mule ESB在众多开源的ESB中处于领先者的地位,MuleSoft公司也作为独角兽,2017年在纽交所上市。我们作为MuleSoft的合作伙伴也有幸参与其中,在六年多的时间里,我们使用Mule ESB企业版实施,或者在社区版基础上扩展,使用Mule ESB社区版实施,帮助国内众多的企业成功上线SOA项目。

使用Mule ESB的过程中,体会到其快速的开发效率,以及优秀的架构设计。同时也深感国内这块资料非常稀少,所以计划使用8篇文章来写Mule ESB的基础课程系列。

1. Mule ESB基本介绍

Mule ESB是世界上使用最广泛的开源企业服务总线(ESB)产品,已拥有超过数百万的下载量,以及来自世界各地数十万个开发人员,很多世界五百强企业选择Mule ESB作为企业集成平台。通过Mule,企业可以在短时间内轻松地创建并集成应用服务,Mule ESB消除了系统集成的复杂度,使开发人员能够在异构系统和服务之间,轻松地构建出高性能的集成应用。

和传统的ESB不一样,Mule ESB是一个轻量级的ESB,内核基于SEDA模型和Spring框架构建。基于Spring,意味有着非常灵活的扩展性。同时Mule ESB不仅仅是一个ESB,它也是流行的微服务体系中的一部分。这个系列我们着重介绍它的ESB功能,后续我们再着重介绍它的API管理等功能。

2. Mule ESB社区版和企业版

和很多开源软件一样,Mule ESB分成两个版本,社区版和企业版。其中社区版是免费使用的。而企业版则需要付费订阅使用,功能更强大。如果企业预算充足,则可以选择企业版。或者使用Mule ESB社区版,在社区版基础上做扩展,在有技术支持的情况下,同样可以收到良好的效果。

关于社区版和企业版的主要区别,可以参照下表。如何选择可以参考具体的业务场景和企业情况。Anyway,由于Mule ESB是开源的,我们在社区版上可以有很多的灵活扩展。

3. Mule ESB常用场景

我们来说一下Mule ESB的常见应用场景,可以更好的理解Mule ESB到底可以帮助我们解决什么问题。

  1. 旧系统改造,开放系统的服务能力。举个例子,我们有一个电商系统,需要调用SAP ERP的订单接口来创建订单。这个时候就需要将SAP的订单服务暴露成我们流行的Rest Service接口,以方便电商系统调用。当然电商系统可以直接使用SAP的JCO包来调用SAP的BAPI Function,但显然暴露一个通用的Rest Service更易于调用。使用Mule ESB实现如下:

  2. 系统集成。举个例子,很多系统之间数据交互可能还是用FTP目录。尤其是企业跟企业之间的数据交互,比如,A企业丢一个EDI 文件到B企业的FTP目录,然后B企业会从FTP目录下载解析并放置到数据库。这个场景用Mule ESB实现就很方便。

  3. ETL。市面上有很多开源的ETL软件,其实Mule ESB也有ETL的功能,通过Flow设定ETL的数据转换和数据流向。下图就演示了Mule的ETL和数据分发功能。

4. Mule ESB软件安装

用一个相对宽泛的标准来划分,Mule ESB软件可以分成两部分。

一部分是客户端,也就是基于Eclipse的Anypoint Studio,客户端就是用来开发集成应用的,通常面向的用户就是我们的开发人员。由于是基于Eclipse环境,所以Java开发人员会很熟悉,同时Anypoint Studio也可以集成Git,SVN,Maven,Junit,Jenkins等一系列生态工具。

当然作为其他语言的开发人员也不用担心,Anypoint Studio是一个可视化的拖拽的开发环境,大部分的工作只需要使用鼠标拖拽组件,配置属性即可。

还要一部分是服务端,也就是Mule Runtime,也可以称作Container,容器,注意不要跟Docker的概念混淆。这里的Container指的是Java Container,你可以大概想象成Tomcat类似的东西。客户端开发的应用就部署运行在Mule Runtime中。

需要注意的是,Mule Runtime是一个独立的Container,只依赖JDK,并不依赖其他第三方的容器。服务器中只需要安装JDK和Mule Runtime,即可运行Mule应用。还有一种不太常见的做法,就是把Mule App跑在第三方的容器里(比如Tomcat等),通过对容器的扩展来支持Mule App。不过我们不推荐这种做法,还是推荐使用独立的Mule Runtime,也就是官方说的Standalone版本。

客户端安装

Anypoint Studio是基于Eclipse构建的,你可以在这里下载到(Windows 64BitMac 64Bit)。请根据你的客户端的操作系统选择对应的版本。我们只要在Windows或者Mac电脑上安装好JDK8之后,解压缩Zip包,双击即可打开。打开的界面如下:

由于Anypoint Studio默认只内嵌了Mule ESB企业版运行时,如果你想使用社区版的话,我们还需要安装Mule ESB社区版运行时。为什么客户端也需要Runtime?这很容易理解,我们开发调试都需要使用Runtime,难道你编写代码后,不运行和调试吗-:)

安装社区版运行时,可以使用下列步骤。

  1. 点击Help/Install New Software...菜单

  2. 在Work with下拉框中选择Mule Runtimes for Anypoint Studio

  3. 选中Mule ESB Server Runtime 3.9.0 CE,CE就是Community Edition,社区版的意思。然后点击Next一直到完成。

服务端安装

服务端不区分操作系统,你可以从这里下载到3.9.0版本的社区版Runtime。Mule ESB Runtime可以运行在Windows,Linux,Mac等操作系统上,我们推荐在生产环境使用Linux部署Mule ESB Runtime。服务端的安装也很简单,只要在服务器上安装好JDK8之后,解压缩Runtime即可。

5. 第一个Mule ESB应用- Hello world

我们学习新的语言和框架都会使用经典的Hello world程序,这里也不例外。我们要做的就是,使用Mule ESB建立一个HTTP服务,当用户访问HTTP端口后,返回Hello world。开发步骤很简单:

  1. 点击File/New/Mule Project,新建Mule工程,这里选择使用CE版,也就是社区版,然后一步步Next直到完成。

  2. 拖入HTTP组件到空白的画布中。

  3. 选择画布上的Http组件,在属性页面新增Connector Configuration,在弹出窗口设定侦听的端口,注意不要和你本机的端口冲突。

  4. 拖入Set Payload组件,在属性页面,设定Value值,Hello word。

  5. 在工程项目上右击弹出菜单,Run As/Mule Application。稍等片刻,Console窗口会出现"Mule is up and kicking",表示Mule已经开始工作了!

  6. 使用Postman访问HTTP端口,返回Hello world,Mule。恭喜你,你是一个Mule开发者了 -:)

使用Mule ESB上手非常简单,我们后续会介绍更多的组件,比如你需要从数据库获取数据,那么就使用Database,还有更多组件等待挖掘。

6. 部署Mule ESB应用

我们已经在客户端开发完成了Hello world,也顺利跑起来了。但是如何部署到服务端呢。和常见的Java开发一样,我们也需要打包应用。这里我们用的是普通工程,我们通过一个Export操作,即可导出Mule App(当然Mule App也支持Maven工程,可以通过Maven打包)。在工程项目上右击弹出菜单,Export...,然后在对话框中选择Anypoint Studio Project to Mule Deployable Archive。注意这里不要选中Attach project sources。

将导出的Zip包放入到Mule Runtime的apps目录下,然后启动Mule Runtime。如果是Linux或者mac,那么在Mule Runtime的bin目录下执行./mule启动命令。如果是Windows,双击执行bin目录mule.bat即可启动。

然后使用Postman访问服务器,你会得到和Studio一样的效果。

本文同步发文于EnjoyingSoft BlogsCSDN简书

访问EnjoyingSoft 网站,获取更多Mule ESB 社区版 实施帮助。

欢迎转载,但必须保留原文和此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。

EnjoyingSoft之Mule ESB开发教程第一篇:初识Mule ESB的更多相关文章

  1. EnjoyingSoft之Mule ESB开发教程第二篇:Mule ESB基本概念

    目录 1. 使用Anypoint Studio开发 2. Mule ESB Application Structure - Mule ESB应用程序结构 3. Mule ESB Application ...

  2. EnjoyingSoft之Mule ESB开发教程系列第五篇:控制消息的流向-数据路由

    目录 1. 使用场景 2. 基于消息头的路由 2.1 使用JSON提交订单的消息 2.2 使用XML提交订单的消息 2.3 使用Choice组件判断订单格式 3. 基于消息内容的路由 4. 其他控制流 ...

  3. EnjoyingSoft之Mule ESB开发教程第三篇:Mule message structure - Mule message结构

    目录 1. 探索Mule Message结构 2. Mule Message的Payload 3. Mule Message的Property 4. Mule Message的Attachment 5 ...

  4. EnjoyingSoft之Mule ESB开发教程第四篇:Mule Expression Language - MEL表达式

    目录 1. MEL的优势 2. MEL的使用场景 3. MEL的示例 4. MEL的上下文对象 5. MEL的Variable 6. MEL访问属性 7. MEL操作符 本篇主要介绍Mule表达式语言 ...

  5. EnjoyingSoft之Mule ESB开发教程第六篇:Data Transform - 数据转换

    目录 1. 数据转换概念 2. 数据智能感知 - DataSense 3. 简单数据转换组件 3.1 Object to JSON 3.2 JSON to XML 3.3 JSON to Object ...

  6. .Net魔法堂:史上最全的ActiveX开发教程——发布篇

    一. 前言 接着上一篇<.Net魔法堂:史上最全的ActiveX开发教程——开发篇>,本篇讲述如何发布我们的ActiveX. 二.废话少讲,马上看步骤! 1. 打包  C#开发的Activ ...

  7. Winform常用开发模式第一篇

    Winform常用开发模式第一篇 上一篇博客最后我提到“异步编程模型”(APM),之后本来打算整理一下这方面的材料然后总结一下写篇文章与诸位分享,后来在整理的过程中不断的延伸不断地扩展,发现完全偏离了 ...

  8. (转) 史上最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现(Eureka)

    一.spring cloud简介 spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选.分布式会话等等.它运 ...

  9. spring cloud系列教程第一篇-介绍

    spring cloud系列教程第一篇-介绍 前言: 现在Java招聘中最常见的是会微服务开发,微服务已经在国内火了几年了,而且也成了趋势了.那么,微服务只是指spring boot吗?当然不是了,微 ...

随机推荐

  1. 用蓝牙连接debian和诺基亚手机

    本方法已经用debian 4.0.诺基亚9300和一个hl-united牌子的USB蓝牙适配器测试过了,效果很好.             1.安装必要的软件包:   #apt-get install ...

  2. Win8Metro(C#)数字图像处理--2.21二值图像腐蚀

    原文:Win8Metro(C#)数字图像处理--2.21二值图像腐蚀  [函数名称] 二值图像腐蚀函数CorrosionProcess(WriteableBitmap src) [算法说明] 二值 ...

  3. 数据库的事务日志已满,起因为"LOG_BACKUP"。

    问题描述: 数据库的事务日志已满,起因为"LOG_BACKUP". 问题截图: 解决方法: 1).选择数据库–属性—选项—恢复模式–选择简单.2).收缩数据库后,再调回完整. US ...

  4. Android零基础入门第86节:探究Fragment生命周期

    一个Activity可以同时组合多个Fragment,一个Fragment也可被多个Activity 复用.Fragment可以响应自己的输入事件,并拥有自己的生命周期,但它们的生命周期直接被其所属的 ...

  5. file.delete()与file.deleteOnExit(); 的区别

    file.delete()   //删除文件,删除的是创建File对象时指定与之关联创建的那个文件.这是一个立刻执行的操作 file.deleteOnExit();   //在JVM进程退出的时候删除 ...

  6. uniConnection断线重联(tag属性颇有深意,这样就可以在某些情况下,不用继承实现新控件就可以达到自己的目的)

    群友无法呼吸提供的,谢谢他了. http://blog.sina.com.cn/s/blog_44fa172f0102wb7h.html

  7. 如何判断操作系统是64位还是32位(GetNativeSystemInfo和IsWow64Process两种方法)

    64位Wnidows 里面有个叫Wow64的模拟器技术,可以使32位的程序在64位Windows 上运行. 当你想在程序里面针对32b位/ 64位系统执行不同代码的时候, 需要判断操作系统是32位还是 ...

  8. 适配DirectFB到qt4.8.5(嵌入式Linux)

    适配DirectFB到qt4.8.5 1.编译qt4.8.5 这部在qt官网上其实已经有较详细的说明,了解更多,请点击链接进入. 首先是配置选项,如下是我的配置选项: ./configure \ -p ...

  9. 95+强悍的jQuery图形效果插件

    现在的网站越来越离不开图形,好的图像效果能让你的网站增色不少.通过JQuery图形效果插件可以很容易的给你的网站添加一些很酷的效果. 使用JQuery插件其实比想象的要容易很多,效果也超乎想象.在本文 ...

  10. python集合的内建函数

    s.issubset(t) 如果s 是t 的子集,则返回True,否则返回False s.issuperset(t) 如果t 是s 的超集,则返回True,否则返回False s.union(t) 返 ...