使用spring 与 activeMQ集成,异步接收消息时,接受消息的类必须手工实例化运行起来吗?即是否需要在代码中进行new下面的MessageConsumer.
在spring 中已经进行了如下配置了,是不是当消息发送后,spring会自动运行MessageConsumer中的接受消息的方法啊?如果不是应该如何做?我简单看了一下spring的MessageListenerAdapter原代码,好象是可以自己运行的。困扰很多天了,请大家指点,谢谢.
spring的配置如下.
<?xml version="1.0" encoding="UTF-8"?>
 
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:amq="http://activemq.org/config/1.0"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd 
http://activemq.org/config/1.0 http://people.apache.org/repository/org.apache.activemq/xsds/activemq-core-4.1-SNAPSHOT.xsd">
 
<!--  lets create an embedded ActiveMQ Broker -->
<amq:broker useJmx="false" persistent="true">
<amq:persistenceAdapter>
<amq:jdbcPersistenceAdapter id="jdbcAdapter" dataSource="#msgDataSource" createTablesOnStartup="false"
useDatabaseLock="false"/>
</amq:persistenceAdapter>
<amq:transportConnectors>
<amq:transportConnector uri="tcp://localhost:61616"/>
</amq:transportConnectors>
</amq:broker>
 
<!-- The Sybase Datasource that will be used by the Broker and Hibernate -->
<bean id="msgDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.sybase.jdbc2.jdbc.SybDriver"/>
<property name="url" value="jdbc:sybase:Tds:192.168.1.1:2600/mymsg"/>
<property name="username" value="dba"/>
<property name="password" value="sql"/>
<property name="poolPreparedStatements" value="true"/>
</bean>
 
<!--  ActiveMQ destinations to use  -->
<amq:queue id="destination" physicalName="org.apache.activemq.spring.Test.spring.embedded"/>
 
<!-- JMS ConnectionFactory to use, configuring the embedded broker using XML -->
<amq:connectionFactory id="jmsFactory" brokerURL="tcp://localhost:61616"/>
 
<!-- Spring JMS Template -->
<bean id="myJmsTemplate" 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="jmsFactory"/>
</bean>
</property>
<property name="defaultDestination" ref="destination"/>
<property name="messageConverter" ref="messageConverter"/>
</bean>
 
<!-- Spring JMS SimpleConverter -->
    <bean id="simpleConverter"
        class="org.springframework.jms.support.converter.SimpleMessageConverter" />
        
<bean id="messageConverter" class="com.mysoft.activemq.MBMessageConverter">
<property name="converter">
            <ref local="simpleConverter" />
        </property>
</bean>

<!-- POJO which send Message uses  Spring JmsTemplate -->
<bean id="messageProducer" class="com.mysoft.activemq.MessageProducer">
<property name="template" ref="myJmsTemplate"/>
<property name="destination" ref="destination"/>
</bean>
 
<bean id="messageListener" class="org.springframework.jms.listener.adapter.MessageListenerAdapter">
<constructor-arg>
<bean class="com.mysoft.activemq.MessageConsumer"/>
</constructor-arg>
<property name="defaultListenerMethod" value="onMessage"/>
<property name="messageConverter" ref="messageConverter"/>
</bean> 
 
<bean id="listenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="jmsFactory"/>
<!-- <property name="concurrentConsumers" value="5"/> -->
<property name="destination" ref="destination"/>
<property name="messageListener" ref="messageListener"/>
</bean>
</beans>