Mule 2.x Getting Started Guide第二部分Mule使用之配置Mule
配置Mule
配置概述
1. 配置文件
默认的,并且最常的Mule配置方式是通过XML文件。
使用命令行启动Mule
在命令行启动时配置文件由参数-config指定。
编程的方式启动Mule
编程启动Mule时,配置文件作为ConfigurationBuilder的参数提供。
2. Configuration Builders
3. 指定使用哪一个Configuration Builder
XML配置
正如上一节配置概述中介绍的,最常用的Mule配置方式是通过Spring XML配置文件完成,这些配置文件是要使用默认的Mule名字空间。
XML 语法
配置文件基于XML语法(schema),在文件的最初指定。
必须要指定所有必须的语法文件,在创建配置文件时,这可能会比较耗时,但是导入语法提供了多种省时的好处:
l 在你使用的IDE中支持自动完成和详细的上下文帮助;
l 设计阶段的配置检查
l Typed properties
名字空间
每一个Mule模块或者传输组件有它自己的XML语法。当你导入一个语法文件时,它有它自己的名字空间。例如,下面的配置中就将mule-jms.xsd绑定到了jms名字空间。因此,所有以<jms: 起始的xml元素都要遵循mule-jms.xsd语法。
默认名字空间
通常下,会将Mule core语法设置为默认的名字空间。也就是说所有没有前缀的xml元素都遵循Mule core语法(mule.xsd),设置默认名字空间语法的方法是,将Mule语法的URL指定给xmlns,去掉前面例子中的冒号和前缀,也就是使用xmlns替换掉xmlns:jms
Spring
尽管你的配置文件中出现了Mule相关的东西,但他们的确仅仅是附带了Mule相关扩展的Spring配置文件。这种方法可以让你在Mule配置中使用所有Spring提供的东西,比如beans,factory beans,resources loaders,EJBs,JNDI,AOP,甚至集成其他像Hivemind,jBPM,Gigaspaces,JBoss Rules等等此类软件。
使用标准的Spring元素,需要导入Spring名字空间:
属性占位符
你可以使用ant风格的属性占位符,例如:
正如这一节中描述的,这些占位符的值可以有很多种方法赋予
全局变量
你可以使用<global-property>元素来从Mule配置的内部设置一个占位符的值,比如在另一个Mule配置文件中:
属性文件
可以从文件中加载属性,你可以使用标准的Spring元素完成:<context:property-placeholder>
这里的smtp.properties文件的内容如下:
使用逗号来分隔需要加载的多个属性文件:
系统属性
占位符的值可以来自JDK系统,如果你从命令行启动Mule,你可以以如下方式指定这些属性:
或者在conf/wrapper.conf文件中编辑系统属性。
如果你使用编程的方式启动Mule,你可以用如下的方式指定属性:
环境变量
对于访问环境变量,没有标准的方式。这个链接里你可能会找到有用的信息。
配置一个Mule实例
基本配置
Mule配置文件可以表示成一个元素的描述树,不管什么形式的配置,最上层总包括以下的基本元素。
l 连接器(connectors):所有的传输组件都没有默认的配置;
l 端点(endpoints);提倡对端点进行全局定义,这样可以清楚地描述你的集成通道在什么位置;
l 转换器(transformers):可能需要全局定义,然后在你的服务中进行引用;
l 过滤器(Filters):同转换器。
l 模型(Models);一个或多个模型,从逻辑上组成了你的服务。
高级配置
另外,你可能还需要某些高级的配置:
l 代理(Agents):代理通常用于提供一些横向的服务,比如日志和管理;
l 通知(Notifications):在有生命周期的事件上,通知某些事件;
l 安全管理(Security Manager);
l 传输组件管理(Transaction Manager) ;
l 全局配置选项(Global Configuration Options):不同种类的全局设置;
l 全局属性(Global Properties):占位符的值。
配置选项
Mule上下文和Mule配置
所有的Mule配置都可以被一个对象:org.mule.api.config.MuleConfiguration访问。MuleConfiguration中的配置属性在Mule上下文(MuleContext)被创建时设置。在Mule启动后,这一对象是不可改变的,但它可以用如下方式进行访问:
配置变量
Mule配置变量可以用<configuration>标签进行配置。例如:
所有可用的变量如下表所示:
变量 | 类型 | 默认值 | 描述 |
defaultSynchronousEndpoint | 属性 | False | 如果是true,对端点的连接就会持续等到响应。 |
defaultRemoteSync | 属性 | False | 如果是true,对端点的连接就会持续等到远程服务的响应。 |
defaultSynchronousEventTimeout | 属性 | 3000 | 等待一个同步响应的默认时间(ms) |
defaultTransactionTimeout | 属性 | 5000 | 事务默认的超时时间,没有指定时的默认值 |
Default-threading-profile | 元素 | 无 | 默认的处理描述。在没有更详细的配置情况下,组件和端点用它来进行转发和接收。它可以被以下的三个覆盖。 |
Default-dispatcher-threading- Profile | 元素 | 无 | 默认的发送处理描述。 |
Default-receiver-threading- Profile | 元素 | 无 | 默认的接收处理描述。 |
Default-component-threading- Profile | 元素 | 无 | 默认的组件处理描述。 |
Q&A
怎样配置sercerId?
在2.0中,一些系统属性在启动后是不可改变的,比如serverId。serverId不再被配置在xml配置文件中,你需要用启动参数-DMule.serverId=YOUR_MULE_SERVER_ID指定系统属性或者编程的方式下调用 org.mule.config.DefaultMuleConfiguratioin.setId()。
我如何为管理代理设置serverUrl?
在1.x中,在<mule-enviroment-properties>中指定一个serverUrl属性来启动管理代理。在2.x中,可以使用<remote-dispatcher-agent>来替代。详细参照org.mule.module.client.
Remoting.RemoteDispatcherAgent。
例如:
默认的队列描述,处理描述以及池化描述在哪里?
队列描述和处理描述配置在模型中,池化描述配置在池组件中。