james 下的 JMS

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

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

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

1. 多种语言和协议编写客户端。语言: Java, C, C++, C#, Ruby, Perl, Python, PHP。应用协议: OpenWire,Stomp REST,WS Notification,XMPP,AMQP   
2. 完全支持JMS1.1和J2EE 1.4规范 (持久化,XA消息,事务)   
3. 对Spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性   
4. 通过了常见J2EE服务器(如 Geronimo,JBoss 4, GlassFish,WebLogic)的测试,其中通过JCA 1.5 resource adaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容J2EE 1.4 商业服务器上   
5. 支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA   
6. 支持通过JDBC和journal提供高速的消息持久化   
7. 从设计上保证了高性能的集群,客户端-服务器,点对点   
8. 支持Ajax   
9. 支持与Axis的整合   
10. 可以很容易得调用内嵌JMS provider,进行测试


正题来了:
1.引入activemq的xsd

ActiveMQ4.1 开始 响应spring 2.0号召,支持了引入xml schema namespace的简单配置语法,简化了配置的语句。
在applicationcontext.xml(spring的配置文件)中引入activemq的xml scheam 配置文件),如下:
<beans xmlns="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/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
          http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core-5.4.1.xsd">



2.配置ActiveMQ 的 broker
<amq:broker useJmx="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:policyEntry queue=">" prioritizedMessages="true"/>
                </amq:policyEntries>
            </amq:policyMap>
        </amq:destinationPolicy>
        <amq:managementContext>
            <amq:managementContext createConnector="false"/>
        </amq:managementContext>
        <amq:persistenceAdapter>
            <amq:amqPersistenceAdapter/>
        </amq:persistenceAdapter>
        <amq:transportConnectors>
            <amq:transportConnector uri="tcp://localhost:0" />
        </amq:transportConnectors>
</amq:broker>

什么是Broker呢?可以把JMS Brokers 看成是服务器端。这个服务器可以独立运行.也可以随着其他容器以内嵌方式运行。
james使用了把ActiveMQ嵌入到它自己服务的方式,所以当james启动,加载spring的配置文件,ActiveMQ也会随之启动。



3.配置ActiveMQ的连接方式

<amq:connectionFactory id="amqConnectionFactory" brokerURL="vm://james?create=false">
        <property name="blobTransferPolicy" ref="blobTransferPolicy"/>
</amq:connectionFactory>

上面配置的broker是jvm embedded 所以url为:vm://james?create=false
注:
连接ActiveMQ的方式
ActiveMQConnectionFactory 提供了多种连接到Broker的方式

常见的有
vm://host:port     //vm
tcp://host:port    //tcp
ssl://host:port    //SSL
stomp://host:port  //stomp协议可以跨语言,目前有很多种stomp client 库(java,c#,c/c++,ruby,python...);



4.配置JMS的ConnectionFactory

<bean id="jmsConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
       <property name="targetConnectionFactory" ref="amqConnectionFactory"/>
       <property name="sessionCacheSize" value="10"/>
       <property name="cacheConsumers" value="false"/>
       <property name="cacheProducers" value="true"/>
</bean>

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


5.配置JMS事务

<bean id="jmsTransactionManager" class="org.springframework.jms.connection.JmsTransactionManager">
        <property name="connectionFactory" ref="jmsConnectionFactory"/>
</bean>

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



6.邮件队列Factory

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

depends-on="broker" 
mailQueueFactory这个bean需要broker先实例化。





另:我的小站:
      NB分享http://www.nbshare.com

你可能感兴趣的:(spring,应用服务器,jms,activemq,配置管理)