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里面。
分享到:
相关推荐
Mule ESB(Enterprise Service Bus,企业服务总线)是一款开源的集成平台,旨在简化企业级应用之间的数据交互。本文将围绕Mule ESB的源码进行深入探讨,揭示其核心设计理念与工作原理。 首先,`logging.conf`是日志...
**ESB(企业服务总线)** ...总之,"esb-mule系统设计"的学习资料涵盖了ESB的基本概念、MULE ESB的特性和使用、SOA架构的优势,以及MULE与SPRING的整合。通过深入学习和实践,你将能够构建高效的企业服务集成解决方案。
Mule ESB是MuleSoft公司推出的一款开源企业服务总线软件,它是EIP的一种实现方式。Mule ESB以其高效、灵活和易于使用的特性,被广泛应用于各种集成项目中。Mule ESB支持多种协议和标准,如HTTP、JMS、FTP、SOAP、...
Mule ESB 是一个基于 Java 的轻量级企业服务总线和集成平台,允许开发人员快速便利地连接多个应用,并支持应用间的数据交换。Mule ESB 支持集成现有系统而无论其底层采用何种技术,如 JMS、Web Services、JDBC、...
该文档是本人查阅国外官网,个人实践撰写60页常用开发技术,可适用于大多数Mule业务开发 ,提供配套视频讲解 ,https://space.bilibili.com/405243872/dynamic,对于付费用户可提供相关源码及安装包文件,bilibili请...
Mule ESB(Enterprise Service Bus)是MuleSoft公司开发的一款企业服务总线产品,它允许企业内部和不同企业之间的服务进行集成,易于连接各种服务和应用。Mule ESB支持多种传输协议、消息格式和数据转换,可以简化...
### ESB原理及Mule ESB实践 ...综上所述,ESB和Mule ESB是现代IT架构中不可或缺的部分,它们为企业提供了一种灵活、高效的服务集成方案。无论是理论层面还是实际应用,掌握ESB原理及Mule ESB实践都是非常有价值的。
MULE ESB(Mule Enterprise Service Bus)是Anypoint Platform的核心组件,它是一个强大的、全面集成的企业服务总线(ESB),专为构建、部署和管理API和集成解决方案而设计。MULE ESB-4.1是MuleSoft公司推出的企业版...
Mule ESB 是一个轻量级的基于java的企业服务总线和集成平台, 使得开发人员可以快速,简单的连接多个应用, 使得它们可以交换数据。 Mule ESB 容易集成现有异构系统,包括:JMS, Web Services, JDBC, HTTP, 等. ESB...
Mule ESB,全称为Mule Enterprise Service Bus,是一款强大的开源企业服务总线,用于构建灵活、可扩展的企业级集成解决方案。Mule ESB的核心功能是作为不同应用系统之间的通信桥梁,实现数据和服务的互操作性,从而...
MuleESB集成webservice+restful(sprintboot+mybatis+mysql)+activeMQ+javamail,五天的研究成果,集成了我所关注的点,希望有更多的朋友一起学习进步。
Mule 是一款非常流行的集成平台,由 MuleSoft 开发,它提供了一个企业级的服务总线 (Enterprise Service Bus, ESB) 和一个用于构建服务导向架构 (Service-Oriented Architecture, SOA) 的集成框架。Mule 的设计目标...
开源ESB框架 Mule 2增加了基于Schema的spring xml配置,用于集成传统的web应用。表达式赋值被内建在运行时的消息传递中,因此头信息,Xquery或是其他的测试可以很容易的完成,不需要新建POJO或是这些活动转换器。
Mule ESB,全称Mule Enterprise Service Bus,是一种强大的企业级服务总线,用于构建灵活、可扩展的集成解决方案。它提供了一个平台,使得不同系统间的通信变得更加简单,支持多种协议和数据格式。在本文中,我们将...
#### 一、Mule ESB 3.0概述 - **定位**:Mule ESB 3.0是一款轻量级的消息框架和整合平台,旨在帮助企业轻松地集成不同的系统和服务。 - **核心特性**:基于EIP(Enterprise Integration Patterns)原则构建,支持...
Mule ESB(Enterprise Service Bus,企业服务总线)是一种强大的集成平台,它允许不同的系统、应用程序和服务之间进行无缝通信。Mule ESB的核心功能包括数据转换、协议适配、消息路由以及流程管理,旨在简化企业的IT...
Mule ESB应用部署 Mule ESB应用的目录结构,配置文件说明
主流的商业ESB和Mule产品的比较,完整的多方面评判各种ESB功能情况。