`
birdmen
  • 浏览: 38446 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

ESB构架的MULE(一)

阅读更多
mule,就是传说中的一个ESB构架的实现,初步试用了一下,感觉它圈地圈得厉害,把
AXIS,XFIRE,POP3,SMTP,SOCKET,HTTP,JMS等通信连接方式都包括进来,可能是为了一些和老系统的接口
下载的地址是:
http://mule.codehaus.org/display/MULE/Home
下载后放置在路径:
D:\tool\mule-1.4.1
配置MULE_HOME
PATH里面把BIN加入进去
在路径D:\tool\mule-1.4.1\conf下有个配置文件
wrapper.conf
打开后修改
wrapper.java.classpath.2=%MULE_HOME%/lib/user/*.jar
wrapper.java.classpath.3=%MULE_HOME%/lib/boot/*.jar
wrapper.java.classpath.4=E:/project/megaeyes/Mail2Jms/WebRoot/WEB-INF/classes
这里配置的是MULE启动的时候要加载的JAR包和CLASSPATH
我的项目是MAIL2JMS,所以我直接指向了自己的CLASS目录,这样我的任何修改都直接生效了,
另外可以执行他的例子,ECHO.BAT
仿造他的例子,我自己写了一个从邮件服务器JAMES上收到信息后转发给ACTIVE-MQ的东东
类比较少,一一贴出来,实现类EmailManagerImpl.java:
package com.megaeyes.service.impl;
import org.mule.components.simple.LogComponent;
import org.mule.umo.UMOEventContext;
import com.megaeyes.service.EmailManager;
/**
* 
* @author sillycat.luo
*
*/
public class EmailManagerImpl extends LogComponent implements EmailManager {
public Object onCall(UMOEventContext context) throws Exception {
// 调用基类打印出日志
// super.onCall(context);
// 调用transfer 得到对象
Object o = context.getTransformedMessage();
return o;
}
}
消息类,MessageBean.java:
/*
* Created on 2007-7-23 11:40:12
* @author hejing
*/
package com.megaeyes.sms.gateway.databean;
import java.io.Serializable;
public class MessageBean implements Serializable{
    private static final long serialVersionUID = -1353347933934679190L;
    private String topic;           //标题
    private String msgSrcID;        //消息来源编号
    private String msgTypeID;       //消息类型编号
    private String deviceName;      //设备名称
    private String deviceTypeName; //设备类型名称
    private String deviceIP;        //设备IP
    private String msgTypeName;     //消息类型名称
    private String msgID;           //消息流水号
    private String severityName;    //告警级别名称
    private String faultTime;       //故障产生时间
    private String content;         //内容
    
    
    /**
     * @return Returns the content.
     */
    public String getContent() {
        return content;
    }
    /**
     * @param content The content to set.
     */
    public void setContent(String content) {
        this.content = content;
    }
    /**
     * @return Returns the topic.
     */
    public String getTopic() {
        return topic;
    }
    /**
     * @param topic The topic to set.
     */
    public void setTopic(String topic) {
        this.topic = topic;
    }
    /**
     * @return Returns the deviceIP.
     */
    public String getDeviceIP() {
        return deviceIP;
    }
    /**
     * @param deviceIP The deviceIP to set.
     */
    public void setDeviceIP(String deviceIP) {
        this.deviceIP = deviceIP;
    }
    /**
     * @return Returns the deviceName.
     */
    public String getDeviceName() {
        return deviceName;
    }
    /**
     * @param deviceName The deviceName to set.
     */
    public void setDeviceName(String deviceName) {
        this.deviceName = deviceName;
    }
    /**
     * @return Returns the deviceTypeName.
     */
    public String getDeviceTypeName() {
        return deviceTypeName;
    }
    /**
     * @param deviceTypeName The deviceTypeName to set.
     */
    public void setDeviceTypeName(String deviceTypeName) {
        this.deviceTypeName = deviceTypeName;
    }
    /**
     * @return Returns the faultTime.
     */
    public String getFaultTime() {
        return faultTime;
    }
    /**
     * @param faultTime The faultTime to set.
     */
    public void setFaultTime(String faultTime) {
        this.faultTime = faultTime;
    }
    /**
     * @return Returns the msgID.
     */
    public String getMsgID() {
        return msgID;
    }
    /**
     * @param msgID The msgID to set.
     */
    public void setMsgID(String msgID) {
        this.msgID = msgID;
    }
    /**
     * @return Returns the msgSrcID.
     */
    public String getMsgSrcID() {
        return msgSrcID;
    }
    /**
     * @param msgSrcID The msgSrcID to set.
     */
    public void setMsgSrcID(String msgSrcID) {
        this.msgSrcID = msgSrcID;
    }
    /**
     * @return Returns the msgTypeID.
     */
    public String getMsgTypeID() {
        return msgTypeID;
    }
    /**
     * @param msgTypeID The msgTypeID to set.
     */
    public void setMsgTypeID(String msgTypeID) {
        this.msgTypeID = msgTypeID;
    }
    /**
     * @return Returns the msgTypeName.
     */
    public String getMsgTypeName() {
        return msgTypeName;
    }
    /**
     * @param msgTypeName The msgTypeName to set.
     */
    public void setMsgTypeName(String msgTypeName) {
        this.msgTypeName = msgTypeName;
    }
    /**
     * @return Returns the severityName.
     */
    public String getSeverityName() {
        return severityName;
    }
    /**
     * @param severityName The severityName to set.
     */
    public void setSeverityName(String severityName) {
        this.severityName = severityName;
    }
    
}

转换邮件信息的类EmailMessageTransformer.java:
package com.megaeyes.utils;
import java.io.IOException;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMultipart;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.dom4j.Document;
import org.mule.transformers.AbstractTransformer;
import org.mule.umo.transformer.TransformerException;
import com.megaeyes.sms.gateway.databean.MessageBean;
/**
* BEAN转换类
* 
* @author sillycat.luo
* 
*/
public class EmailMessageTransformer extends AbstractTransformer {
protected Log log = LogFactory.getLog(EmailMessageTransformer.class);
public EmailMessageTransformer() {
// 初始化要注册的对象类型
registerSourceType(MimeBodyPart.class);
registerSourceType(Message.class);
registerSourceType(String.class);
setReturnClass(String.class);
}
/**
* 实际调用转化类的方法
*/
protected Object doTransform(Object src, String encoding)
   throws TransformerException {
MimeBodyPart mail = null;
if (src instanceof MimeBodyPart) {
   mail = (MimeBodyPart) src;
} else {
   log.error("email transfer should get MimeBodyPart src!");
}
String returnString = "";
MessageBean message = null;
try {
   Object o = mail.getContent();
   if (o instanceof String) {
    returnString = (String) o;
   } else if (o instanceof MimeMultipart) {
    MimeMultipart mime = (MimeMultipart) o;
    if (mime != null) {
     BodyPart body = mime.getBodyPart(0);
     if (body != null) {
      returnString = (String) body.getContent();
     }
    }
   } else {
    log
      .error("there is unknow part from the MimebodyPart.getContent");
   }
} catch (IOException e) {
   log.error(e);
} catch (MessagingException e) {
   log.error("e");
}
// transform string 2 object
message = transFromString2Message(returnString);
return message;
}
/**
* 转化类的工具类
* 
* @param src
*            String like <root><name>sillycat.luo</name></root>
* @return MessageBean Object
*/
private MessageBean transFromString2Message(String src) {
MessageBean message = null;
if (StringUtil.isBlank(src)) {
   log.error("src 2 transfer can't be null");
   return message;
}
Document doc = XmlFileUtil.getDocumentSaxByXmlStr(src);
if (doc != null) {
   message = new MessageBean();
   message.setMsgSrcID(XmlFileUtil.getStringValue("MsgSrcID", doc));
   message.setMsgTypeID(XmlFileUtil.getStringValue("FaultType", doc));
   message
     .setDeviceName(XmlFileUtil
       .getStringValue("DeviceName", doc));
   message.setDeviceTypeName(XmlFileUtil.getStringValue("DeviceType",
     doc));
   message.setDeviceIP(XmlFileUtil.getStringValue("DeviceIp", doc));
   message.setMsgTypeName(XmlFileUtil.getStringValue("FaultTypeName",
     doc));
   message.setMsgID(XmlFileUtil.getStringValue("FaultID", doc));
   message
     .setSeverityName(XmlFileUtil
       .getStringValue("Severity", doc));
   message.setFaultTime(XmlFileUtil.getStringValue("FaultTime", doc));
} else {
   log.error("xml doc string dom4j parse error!");
}
return message;
}
}

最主要的配置文件拉,email-config.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mule-configuration PUBLIC "-//MuleSource //DTD mule-configuration XML V1.0//EN"
                                "http://mule.mulesource.org/dtds/mule-configuration.dtd">
<mule-configuration id="Mule_Echo_Sample" version="1.0">
<description>This is the email mule ESB system</description>
<connector name="activeMQConnector"
className="org.mule.providers.jms.JmsConnector">
<properties>
   <property name="connectionFactoryJndiName"
    value="ConnectionFactory" />
   <property name="jndiInitialFactory"
    value="com.megaeyes.utils.ActiveMQInitialContextFactory" />
   <property name="specification" value="1.1" />
   <property name="jndiDestinations" value="true" />
   <property name="jndiProviderUrl"
    value="tcp://localhost:61616" />
   <map name="connectionFactoryProperties">
    <property name="brokerURL"
     value="tcp://localhost:61616" />
   </map>
</properties>
</connector>
<transformers>
<transformer name="JMSMessageToString"
   className="com.megaeyes.utils.JMSMessageTransformer"
   returnClass="java.lang.String" />
<transformer name="HttpRequestToSoapRequest"
   className="org.mule.providers.soap.transformers.HttpRequestToSoapRequest" />
<transformer name="EmailMessageTransformer"
   className="com.megaeyes.utils.EmailMessageTransformer">
   <properties>
    <property name="checkFrequency" value="2000" />
    <property name="deleteReadMessages" value="true" />
   </properties>
</transformer>
</transformers>
<model name="emailSample">
<mule-descriptor name="MailUM"
   implementation="com.megaeyes.service.impl.EmailManagerImpl">
   <inbound-router>
    <endpoint address="pop3://carl:kaishi@sillycat.com"
     transformers="EmailMessageTransformer" />
   </inbound-router>
   <outbound-router>
    <router
     className="org.mule.routing.outbound.OutboundPassThroughRouter">
     <endpoint address="jms://ConnectionFactory"
      connector="activeMQConnector" />
    </router>
   </outbound-router>
</mule-descriptor>
<!-- 
   <mule-descriptor name="ReSumeUM"
   implementation="com.megaeyes.service.impl.EmailManagerImpl">
   <inbound-router>
   <endpoint address="jms://ConnectionFactory"
   connector="activeMQConnector" transformers="JMSMessageToString"/>
   </inbound-router>
   <outbound-router>    
   <router
   className="org.mule.routing.outbound.OutboundPassThroughRouter">
   <endpoint address="stream://System.out" />
   </router>
   </outbound-router>
   </mule-descriptor>
-->
</model>
</mule-configuration>

一个批处理执行文件,email.bat:
@echo off
call "%MULE_HOME%\bin\mule.bat" -config .\email-config.xml

这样就可以运行了,启动后会拦截所有发送到carl@sillycat.com的邮件内容,然后拼装成为MessageBean.java放置在activeMQ的
queue里面。
0
0
分享到:
评论
2 楼 钢镚cuicheng 2013-06-04  
log
1 楼 chenquanfu123 2012-11-01  
           

相关推荐

    mule -esb 源码

    Mule ESB(Enterprise Service Bus,企业服务总线)是一款开源的集成平台,旨在简化企业级应用之间的数据交互。本文将围绕Mule ESB的源码进行深入探讨,揭示其核心设计理念与工作原理。 首先,`logging.conf`是日志...

    esb-mule系统设计

    **ESB(企业服务总线)** ...总之,"esb-mule系统设计"的学习资料涵盖了ESB的基本概念、MULE ESB的特性和使用、SOA架构的优势,以及MULE与SPRING的整合。通过深入学习和实践,你将能够构建高效的企业服务集成解决方案。

    EIP经典案例ESB实践之Mule实现.rar_eip_esb_mule_mule esb

    Mule ESB是MuleSoft公司推出的一款开源企业服务总线软件,它是EIP的一种实现方式。Mule ESB以其高效、灵活和易于使用的特性,被广泛应用于各种集成项目中。Mule ESB支持多种协议和标准,如HTTP、JMS、FTP、SOAP、...

    MuleEsb开源框架简介.pdf

    Mule ESB 是一个基于 Java 的轻量级企业服务总线和集成平台,允许开发人员快速便利地连接多个应用,并支持应用间的数据交换。Mule ESB 支持集成现有系统而无论其底层采用何种技术,如 JMS、Web Services、JDBC、...

    ESB Mule最新开发教程文档.pdf

    该文档是本人查阅国外官网,个人实践撰写60页常用开发技术,可适用于大多数Mule业务开发 ,提供配套视频讲解 ,https://space.bilibili.com/405243872/dynamic,对于付费用户可提供相关源码及安装包文件,bilibili请...

    Mule ESB手册-中文版

    Mule ESB(Enterprise Service Bus)是MuleSoft公司开发的一款企业服务总线产品,它允许企业内部和不同企业之间的服务进行集成,易于连接各种服务和应用。Mule ESB支持多种传输协议、消息格式和数据转换,可以简化...

    ESB原理及Mule ESB实践

    ### ESB原理及Mule ESB实践 ...综上所述,ESB和Mule ESB是现代IT架构中不可或缺的部分,它们为企业提供了一种灵活、高效的服务集成方案。无论是理论层面还是实际应用,掌握ESB原理及Mule ESB实践都是非常有价值的。

    MULE ESB-4.1企业版运行环境

    MULE ESB(Mule Enterprise Service Bus)是Anypoint Platform的核心组件,它是一个强大的、全面集成的企业服务总线(ESB),专为构建、部署和管理API和集成解决方案而设计。MULE ESB-4.1是MuleSoft公司推出的企业版...

    mule IDE (mule ESB)

    Mule ESB 是一个轻量级的基于java的企业服务总线和集成平台, 使得开发人员可以快速,简单的连接多个应用, 使得它们可以交换数据。 Mule ESB 容易集成现有异构系统,包括:JMS, Web Services, JDBC, HTTP, 等. ESB...

    MuleESB帮助文档

    Mule ESB,全称为Mule Enterprise Service Bus,是一款强大的开源企业服务总线,用于构建灵活、可扩展的企业级集成解决方案。Mule ESB的核心功能是作为不同应用系统之间的通信桥梁,实现数据和服务的互操作性,从而...

    MuleESB集成webservice+restful(sprintboot+mybatis+mysql)+activeMQ+javamail

    MuleESB集成webservice+restful(sprintboot+mybatis+mysql)+activeMQ+javamail,五天的研究成果,集成了我所关注的点,希望有更多的朋友一起学习进步。

    ESB-Mule开源文档(PDF)

    Mule 是一款非常流行的集成平台,由 MuleSoft 开发,它提供了一个企业级的服务总线 (Enterprise Service Bus, ESB) 和一个用于构建服务导向架构 (Service-Oriented Architecture, SOA) 的集成框架。Mule 的设计目标...

    ESB开源系统mule

    开源ESB框架 Mule 2增加了基于Schema的spring xml配置,用于集成传统的web应用。表达式赋值被内建在运行时的消息传递中,因此头信息,Xquery或是其他的测试可以很容易的完成,不需要新建POJO或是这些活动转换器。

    Mule ESB开发一个小例子

    Mule ESB,全称Mule Enterprise Service Bus,是一种强大的企业级服务总线,用于构建灵活、可扩展的集成解决方案。它提供了一个平台,使得不同系统间的通信变得更加简单,支持多种协议和数据格式。在本文中,我们将...

    MuleESB3.0中文教程

    #### 一、Mule ESB 3.0概述 - **定位**:Mule ESB 3.0是一款轻量级的消息框架和整合平台,旨在帮助企业轻松地集成不同的系统和服务。 - **核心特性**:基于EIP(Enterprise Integration Patterns)原则构建,支持...

    mule esb mule esb打包手册文档

    Mule ESB(Enterprise Service Bus,企业服务总线)是一种强大的集成平台,它允许不同的系统、应用程序和服务之间进行无缝通信。Mule ESB的核心功能包括数据转换、协议适配、消息路由以及流程管理,旨在简化企业的IT...

    Mule ESB应用部署

    Mule ESB应用部署 Mule ESB应用的目录结构,配置文件说明

    主流商业ESB产品与Mule产品对比V2.xlsx

    主流的商业ESB和Mule产品的比较,完整的多方面评判各种ESB功能情况。

Global site tag (gtag.js) - Google Analytics