james 下的 JMS

wordjoke 2011-01-13

james的这个版本--james-server3.0-M2,使用了JMS来控制服务器的邮件队列。

james使用了ActiveMQ来作为它的JMS服务器。

ActiveMQ介绍:

ActiveMQ是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ是一个完全支持JMS1.1和J2EE1.4规范的JMSProvider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。

1.多种语言和协议编写客户端。语言:Java,C,C++,C#,Ruby,Perl,Python,PHP。应用协议:OpenWire,StompREST,WSNotification,XMPP,AMQP  

2.完全支持JMS1.1和J2EE1.4规范(持久化,XA消息,事务)  

3.对Spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性  

4.通过了常见J2EE服务器(如Geronimo,JBoss4,GlassFish,WebLogic)的测试,其中通过JCA1.5resourceadaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容J2EE1.4商业服务器上  

5.支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA  

6.支持通过JDBC和journal提供高速的消息持久化  

7.从设计上保证了高性能的集群,客户端-服务器,点对点  

8.支持Ajax  

9.支持与Axis的整合  

10.可以很容易得调用内嵌JMSprovider,进行测试

正题来了:

1.引入activemq的xsd

ActiveMQ4.1开始响应spring2.0号召,支持了引入xmlschemanamespace的简单配置语法,简化了配置的语句。

在applicationcontext.xml(spring的配置文件)中引入activemq的xmlscheam配置文件),如下:

<beansxmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:amq="http://activemq.apache.org/schema/core"

xsi:schemaLocation="

http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsd

http://activemq.apache.org/schema/corehttp://activemq.apache.org/schema/core/activemq-core-5.4.1.xsd">

2.配置ActiveMQ的broker

<amq:brokeruseJmx="true"persistent="true"brokername="james"dataDirectory="filesystem=file://var/store/activemq/brokers"useShutdownHook="false"schedulerSupport="false"id="broker">

<amq:destinationPolicy>

<amq:policyMap>

<amq:policyEntries>

<amq:policyEntryqueue=">"prioritizedMessages="true"/>

</amq:policyEntries>

</amq:policyMap>

</amq:destinationPolicy>

<amq:managementContext>

<amq:managementContextcreateConnector="false"/>

</amq:managementContext>

<amq:persistenceAdapter>

<amq:amqPersistenceAdapter/>

</amq:persistenceAdapter>

<amq:transportConnectors>

<amq:transportConnectoruri="tcp://localhost:0"/>

</amq:transportConnectors>

</amq:broker>

什么是Broker呢?可以把JMSBrokers看成是服务器端。这个服务器可以独立运行.也可以随着其他容器以内嵌方式运行。

james使用了把ActiveMQ嵌入到它自己服务的方式,所以当james启动,加载spring的配置文件,ActiveMQ也会随之启动。

3.配置ActiveMQ的连接方式

<amq:connectionFactoryid="amqConnectionFactory"brokerURL="vm://james?create=false">

<propertyname="blobTransferPolicy"ref="blobTransferPolicy"/>

</amq:connectionFactory>

上面配置的broker是jvmembedded所以url为:vm://james?create=false

注:

连接ActiveMQ的方式

ActiveMQConnectionFactory提供了多种连接到Broker的方式

常见的有

vm://host:port//vm

tcp://host:port//tcp

ssl://host:port//SSL

stomp://host:port//stomp协议可以跨语言,目前有很多种stompclient库(java,c#,c/c++,ruby,python...);

4.配置JMS的ConnectionFactory

<beanid="jmsConnectionFactory"class="org.springframework.jms.connection.CachingConnectionFactory">

<propertyname="targetConnectionFactory"ref="amqConnectionFactory"/>

<propertyname="sessionCacheSize"value="10"/>

<propertyname="cacheConsumers"value="false"/>

<propertyname="cacheProducers"value="true"/>

</bean>

CachingConnectionFactory继承自SingleConnectionFactory,增加了对Session和MessageProducer缓存的功能。

5.配置JMS事务

<beanid="jmsTransactionManager"class="org.springframework.jms.connection.JmsTransactionManager">

<propertyname="connectionFactory"ref="jmsConnectionFactory"/>

</bean>

这样可以把JMS作为一个事务资源无缝地集成到Spring的事务管理机制中去。

6.邮件队列Factory

<beanid="mailQueueFactory"class="org.apache.james.queue.activemq.ActiveMQMailQueueFactory"depends-on="broker"/>

depends-on="broker"

mailQueueFactory这个bean需要broker先实例化。

另:我的小站:

NB分享:http://www.nbshare.com

相关推荐

wuddny的blog / 0评论 2012-11-15