ESB构架的MULE ActiveMQ

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: 
Java代码   收藏代码
  1. package com.megaeyes.service.impl;  
  2. import org.mule.components.simple.LogComponent;  
  3. import org.mule.umo.UMOEventContext;  
  4. import com.megaeyes.service.EmailManager;  
  5. /** 
  6.  
  7. * @author sillycat.luo 
  8. * 
  9. */  
  10. public class EmailManagerImpl extends LogComponent implements EmailManager {  
  11. public Object onCall(UMOEventContext context) throws Exception {  
  12. // 调用基类打印出日志  
  13. // super.onCall(context);  
  14. // 调用transfer 得到对象  
  15. Object o = context.getTransformedMessage();  
  16. return o;  
  17. }  
  18. }  
  19. 消息类,MessageBean.java:  
  20. /* 
  21. * Created on 2007-7-23 11:40:12 
  22. * @author hejing 
  23. */  
  24. package com.megaeyes.sms.gateway.databean;  
  25. import java.io.Serializable;  
  26. public class MessageBean implements Serializable{  
  27.     private static final long serialVersionUID = -1353347933934679190L;  
  28.     private String topic;           //标题  
  29.     private String msgSrcID;        //消息来源编号  
  30.     private String msgTypeID;       //消息类型编号  
  31.     private String deviceName;      //设备名称  
  32.     private String deviceTypeName; //设备类型名称  
  33.     private String deviceIP;        //设备IP  
  34.     private String msgTypeName;     //消息类型名称  
  35.     private String msgID;           //消息流水号  
  36.     private String severityName;    //告警级别名称  
  37.     private String faultTime;       //故障产生时间  
  38.     private String content;         //内容  
  39.       
  40.       
  41.     /** 
  42.      * @return Returns the content. 
  43.      */  
  44.     public String getContent() {  
  45.         return content;  
  46.     }  
  47.     /** 
  48.      * @param content The content to set. 
  49.      */  
  50.     public void setContent(String content) {  
  51.         this.content = content;  
  52.     }  
  53.     /** 
  54.      * @return Returns the topic. 
  55.      */  
  56.     public String getTopic() {  
  57.         return topic;  
  58.     }  
  59.     /** 
  60.      * @param topic The topic to set. 
  61.      */  
  62.     public void setTopic(String topic) {  
  63.         this.topic = topic;  
  64.     }  
  65.     /** 
  66.      * @return Returns the deviceIP. 
  67.      */  
  68.     public String getDeviceIP() {  
  69.         return deviceIP;  
  70.     }  
  71.     /** 
  72.      * @param deviceIP The deviceIP to set. 
  73.      */  
  74.     public void setDeviceIP(String deviceIP) {  
  75.         this.deviceIP = deviceIP;  
  76.     }  
  77.     /** 
  78.      * @return Returns the deviceName. 
  79.      */  
  80.     public String getDeviceName() {  
  81.         return deviceName;  
  82.     }  
  83.     /** 
  84.      * @param deviceName The deviceName to set. 
  85.      */  
  86.     public void setDeviceName(String deviceName) {  
  87.         this.deviceName = deviceName;  
  88.     }  
  89.     /** 
  90.      * @return Returns the deviceTypeName. 
  91.      */  
  92.     public String getDeviceTypeName() {  
  93.         return deviceTypeName;  
  94.     }  
  95.     /** 
  96.      * @param deviceTypeName The deviceTypeName to set. 
  97.      */  
  98.     public void setDeviceTypeName(String deviceTypeName) {  
  99.         this.deviceTypeName = deviceTypeName;  
  100.     }  
  101.     /** 
  102.      * @return Returns the faultTime. 
  103.      */  
  104.     public String getFaultTime() {  
  105.         return faultTime;  
  106.     }  
  107.     /** 
  108.      * @param faultTime The faultTime to set. 
  109.      */  
  110.     public void setFaultTime(String faultTime) {  
  111.         this.faultTime = faultTime;  
  112.     }  
  113.     /** 
  114.      * @return Returns the msgID. 
  115.      */  
  116.     public String getMsgID() {  
  117.         return msgID;  
  118.     }  
  119.     /** 
  120.      * @param msgID The msgID to set. 
  121.      */  
  122.     public void setMsgID(String msgID) {  
  123.         this.msgID = msgID;  
  124.     }  
  125.     /** 
  126.      * @return Returns the msgSrcID. 
  127.      */  
  128.     public String getMsgSrcID() {  
  129.         return msgSrcID;  
  130.     }  
  131.     /** 
  132.      * @param msgSrcID The msgSrcID to set. 
  133.      */  
  134.     public void setMsgSrcID(String msgSrcID) {  
  135.         this.msgSrcID = msgSrcID;  
  136.     }  
  137.     /** 
  138.      * @return Returns the msgTypeID. 
  139.      */  
  140.     public String getMsgTypeID() {  
  141.         return msgTypeID;  
  142.     }  
  143.     /** 
  144.      * @param msgTypeID The msgTypeID to set. 
  145.      */  
  146.     public void setMsgTypeID(String msgTypeID) {  
  147.         this.msgTypeID = msgTypeID;  
  148.     }  
  149.     /** 
  150.      * @return Returns the msgTypeName. 
  151.      */  
  152.     public String getMsgTypeName() {  
  153.         return msgTypeName;  
  154.     }  
  155.     /** 
  156.      * @param msgTypeName The msgTypeName to set. 
  157.      */  
  158.     public void setMsgTypeName(String msgTypeName) {  
  159.         this.msgTypeName = msgTypeName;  
  160.     }  
  161.     /** 
  162.      * @return Returns the severityName. 
  163.      */  
  164.     public String getSeverityName() {  
  165.         return severityName;  
  166.     }  
  167.     /** 
  168.      * @param severityName The severityName to set. 
  169.      */  
  170.     public void setSeverityName(String severityName) {  
  171.         this.severityName = severityName;  
  172.     }  
  173.       
  174. }  

转换邮件信息的类EmailMessageTransformer.java: 
Java代码   收藏代码
  1. package com.megaeyes.utils;  
  2. import java.io.IOException;  
  3. import javax.mail.BodyPart;  
  4. import javax.mail.Message;  
  5. import javax.mail.MessagingException;  
  6. import javax.mail.internet.MimeBodyPart;  
  7. import javax.mail.internet.MimeMultipart;  
  8. import org.apache.commons.logging.Log;  
  9. import org.apache.commons.logging.LogFactory;  
  10. import org.dom4j.Document;  
  11. import org.mule.transformers.AbstractTransformer;  
  12. import org.mule.umo.transformer.TransformerException;  
  13. import com.megaeyes.sms.gateway.databean.MessageBean;  
  14. /** 
  15. * BEAN转换类 
  16.  
  17. * @author sillycat.luo 
  18.  
  19. */  
  20. public class EmailMessageTransformer extends AbstractTransformer {  
  21. protected Log log = LogFactory.getLog(EmailMessageTransformer.class);  
  22. public EmailMessageTransformer() {  
  23. // 初始化要注册的对象类型  
  24. registerSourceType(MimeBodyPart.class);  
  25. registerSourceType(Message.class);  
  26. registerSourceType(String.class);  
  27. setReturnClass(String.class);  
  28. }  
  29. /** 
  30. * 实际调用转化类的方法 
  31. */  
  32. protected Object doTransform(Object src, String encoding)  
  33.    throws TransformerException {  
  34. MimeBodyPart mail = null;  
  35. if (src instanceof MimeBodyPart) {  
  36.    mail = (MimeBodyPart) src;  
  37. else {  
  38.    log.error("email transfer should get MimeBodyPart src!");  
  39. }  
  40. String returnString = "";  
  41. MessageBean message = null;  
  42. try {  
  43.    Object o = mail.getContent();  
  44.    if (o instanceof String) {  
  45.     returnString = (String) o;  
  46.    } else if (o instanceof MimeMultipart) {  
  47.     MimeMultipart mime = (MimeMultipart) o;  
  48.     if (mime != null) {  
  49.      BodyPart body = mime.getBodyPart(0);  
  50.      if (body != null) {  
  51.       returnString = (String) body.getContent();  
  52.      }  
  53.     }  
  54.    } else {  
  55.     log  
  56.       .error("there is unknow part from the MimebodyPart.getContent");  
  57.    }  
  58. catch (IOException e) {  
  59.    log.error(e);  
  60. catch (MessagingException e) {  
  61.    log.error("e");  
  62. }  
  63. // transform string 2 object  
  64. message = transFromString2Message(returnString);  
  65. return message;  
  66. }  
  67. /** 
  68. * 转化类的工具类 
  69.  
  70. * @param src 
  71. *            String like <root><name>sillycat.luo</name></root> 
  72. * @return MessageBean Object 
  73. */  
  74. private MessageBean transFromString2Message(String src) {  
  75. MessageBean message = null;  
  76. if (StringUtil.isBlank(src)) {  
  77.    log.error("src 2 transfer can't be null");  
  78.    return message;  
  79. }  
  80. Document doc = XmlFileUtil.getDocumentSaxByXmlStr(src);  
  81. if (doc != null) {  
  82.    message = new MessageBean();  
  83.    message.setMsgSrcID(XmlFileUtil.getStringValue("MsgSrcID", doc));  
  84.    message.setMsgTypeID(XmlFileUtil.getStringValue("FaultType", doc));  
  85.    message  
  86.      .setDeviceName(XmlFileUtil  
  87.        .getStringValue("DeviceName", doc));  
  88.    message.setDeviceTypeName(XmlFileUtil.getStringValue("DeviceType",  
  89.      doc));  
  90.    message.setDeviceIP(XmlFileUtil.getStringValue("DeviceIp", doc));  
  91.    message.setMsgTypeName(XmlFileUtil.getStringValue("FaultTypeName",  
  92.      doc));  
  93.    message.setMsgID(XmlFileUtil.getStringValue("FaultID", doc));  
  94.    message  
  95.      .setSeverityName(XmlFileUtil  
  96.        .getStringValue("Severity", doc));  
  97.    message.setFaultTime(XmlFileUtil.getStringValue("FaultTime", doc));  
  98. else {  
  99.    log.error("xml doc string dom4j parse error!");  
  100. }  
  101. return message;  
  102. }  
  103. }  

最主要的配置文件拉,email-config.xml: 
Java代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE mule-configuration PUBLIC "-//MuleSource //DTD mule-configuration XML V1.0//EN"  
  3.                                 "http://mule.mulesource.org/dtds/mule-configuration.dtd">  
  4. <mule-configuration id="Mule_Echo_Sample" version="1.0">  
  5. <description>This is the email mule ESB system</description>  
  6. <connector name="activeMQConnector"  
  7. className="org.mule.providers.jms.JmsConnector">  
  8. <properties>  
  9.    <property name="connectionFactoryJndiName"  
  10.     value="ConnectionFactory" />  
  11.    <property name="jndiInitialFactory"  
  12.     value="com.megaeyes.utils.ActiveMQInitialContextFactory" />  
  13.    <property name="specification" value="1.1" />  
  14.    <property name="jndiDestinations" value="true" />  
  15.    <property name="jndiProviderUrl"  
  16.     value="tcp://localhost:61616" />  
  17.    <map name="connectionFactoryProperties">  
  18.     <property name="brokerURL"  
  19.      value="tcp://localhost:61616" />  
  20.    </map>  
  21. </properties>  
  22. </connector>  
  23. <transformers>  
  24. <transformer name="JMSMessageToString"  
  25.    className="com.megaeyes.utils.JMSMessageTransformer"  
  26.    returnClass="java.lang.String" />  
  27. <transformer name="HttpRequestToSoapRequest"  
  28.    className="org.mule.providers.soap.transformers.HttpRequestToSoapRequest" />  
  29. <transformer name="EmailMessageTransformer"  
  30.    className="com.megaeyes.utils.EmailMessageTransformer">  
  31.    <properties>  
  32.     <property name="checkFrequency" value="2000" />  
  33.     <property name="deleteReadMessages" value="true" />  
  34.    </properties>  
  35. </transformer>  
  36. </transformers>  
  37. <model name="emailSample">  
  38. <mule-descriptor name="MailUM"  
  39.    implementation="com.megaeyes.service.impl.EmailManagerImpl">  
  40.    <inbound-router>  
  41.     <endpoint address="pop3://carl:kaishi@sillycat.com"  
  42.      transformers="EmailMessageTransformer" />  
  43.    </inbound-router>  
  44.    <outbound-router>  
  45.     <router  
  46.      className="org.mule.routing.outbound.OutboundPassThroughRouter">  
  47.      <endpoint address="jms://ConnectionFactory"  
  48.       connector="activeMQConnector" />  
  49.     </router>  
  50.    </outbound-router>  
  51. </mule-descriptor>  
  52. <!--   
  53.    <mule-descriptor name="ReSumeUM"  
  54.    implementation="com.megaeyes.service.impl.EmailManagerImpl">  
  55.    <inbound-router>  
  56.    <endpoint address="jms://ConnectionFactory"  
  57.    connector="activeMQConnector" transformers="JMSMessageToString"/>  
  58.    </inbound-router>  
  59.    <outbound-router>      
  60.    <router  
  61.    className="org.mule.routing.outbound.OutboundPassThroughRouter">  
  62.    <endpoint address="stream://System.out" />  
  63.    </router>  
  64.    </outbound-router>  
  65.    </mule-descriptor>  
  66. -->  
  67. </model>  
  68. </mule-configuration>  

一个批处理执行文件,email.bat: 
Java代码   收藏代码
  1. @echo off  
  2. call "%MULE_HOME%\bin\mule.bat" -config .\email-config.xml  

这样就可以运行了,启动后会拦截所有发送到carl@sillycat.com的邮件内容,然后拼装成为MessageBean.java放置在activeMQ的 
queue里面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值