<beans xmlns="http://www.springframework.org/schema/beans" xmlns:amq="http://activemq.apache.org/schema/core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd"> <!-- ------ 第一部分:基础零件 -------> <!-- 1. 配置ActiveMQ Broker 暂时采用在JVM中嵌入这种最简单的模式, 当spring初始化时候,ActiveMQ embedded Broker 就会启动了。 --> <amq:broker useJmx="false" persistent="true"> <!-- 2.持久化消息 使用spring的listenerContainer,消息用持久化保存,服务器重启不会丢失 --> <amq:persistenceAdapter> <amq:amqPersistenceAdapter directory="d:/iteye/amq" /> </amq:persistenceAdapter> <amq:transportConnectors> <amq:transportConnector uri="tcp://localhost:0" /> </amq:transportConnectors> </amq:broker> <!-- 连接外部的activeMQ <amq:connectionFactory id="jmsConnectionFactory" brokerURL="tcp://localhost:61616?wireFormat.maxInactivityDuration=0" /> --> <!-- 2. 配置(A)ConnectionFactory 连接工厂 由于前面配置的Broker是JVM embedded 所以URL为:vm://localhost --> <amq:connectionFactory id="jmsConnectionFactory" brokerURL="vm://localhost" /> <!-- 3 配置(B)Queue 队列 使用Queue方式 --> <amq:queue name="QUEUE" physicalName="auto_check" /> <!-- 4. 配置(C)Converter 转换器 --> <bean id="defaultMessageConverter" class="com.iteye.queue.DefaultMessageConverter" /> <!-- -------第一部分:发送端 ----> <!-- 1 配置JmsTemplate JMS模版 Spring提供的Template,绑定了(A)ConnectionFactory与(C)Converter。 --> <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> <property name="connectionFactory"> <!-- lets wrap in a pool to avoid creating a connection per send 让包在池中,避免每发送一次就新建一个连接 --> <bean class="org.springframework.jms.connection.SingleConnectionFactory"> <property name="targetConnectionFactory" ref="jmsConnectionFactory" /> </bean> </property> <!-- custom MessageConverter 自定义消息转换器 --> <property name="messageConverter" ref="defaultMessageConverter" /> </bean> <!-- 2.Producer 消息发送者,使用JmsTemplate发送消息,绑定了JmsTemplate (含A、C)与(B)Queue。--> <bean id="queueMessageProducer" class="com.iteye.queue.QueueMessageProducer"> <property name="template" ref="jmsTemplate" /> <property name="destination" ref="QUEUE" /> </bean> <!-------第三部分:接收端-----> <!-- 1.接收处理者(MDP)使用Spring的MessageListenerAdapter, 指定负责处理消息的POJO及其方法名,绑定(C)Converter。 --> <bean id="queueConsumer" class="com.iteye.queue.QueueConsumer"> <property name="interaction" ref="autoCheckInteraction" /> </bean> <bean id="queueListener" class="org.springframework.jms.listener.adapter.MessageListenerAdapter"> <!-- 负责处理消息的对象 --> <constructor-arg ref="queueConsumer" /> <!-- 指定处理消息的方法名--> <property name="defaultListenerMethod" value="receive" /> <!-- 绑定转换器 --> <property name="messageConverter" ref="defaultMessageConverter" /> </bean> <!-- 2. listenerContainer 负责调度MDP, 绑定(A) connectionFactory, (B)Queue和MDP。listener container,MDP无需实现接口 --> <bean id="queueListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> <property name="connectionFactory" ref="jmsConnectionFactory" /> <property name="destination" ref="QUEUE" /> <property name="messageListener" ref="queueListener" /> </bean> </beans>