同时我们需要使用SpringFramework框架,当前版本为1.2.5。准备好所有的开发包,我们要在IntelliJ IDEA创建一个新的项目,包含一个普通的模块即可,然后设定一下classpath即可,关于项目的详细信息,请下载附件中IntelliJ IDEA项目文件。
MDP的机制很简单,就是完成对指定的Message Queue或Topic的监听,所以我们需要在Spring的配置文件进行设定:
1 设定ConnectionFactory,这里我们采用嵌入式方式运行ActiveMQ:
<bean id="connectionFactory" class="org.activemq.ActiveMQConnectionFactory"> <property name="brokerURL" value="vm://localhost"/> <property name="useEmbeddedBroker" value="true"/> </bean>
2 设定MDP,我们只需创建一个普通的JavaBean,然后实现MessageListener,最后在Spring配置文件中进行设定。
<bean id="HelloMDP" class="net.jetmaven.HelloMDP"/>
3 将MDP和Queue或Topic关联起来,以下是针对ActiveMQ的设定。其中HelloMDP是对MDP名称的引用。
<bean id="activeMQContainer" class="org.activemq.jca.JCAContainer"> <property name="workManager"> <bean id="workManager" class="org.activemq.work.SpringWorkManager"/> </property> <property name="resourceAdapter"> <bean id="activeMQResourceAdapter" class="org.activemq.ra.ActiveMQResourceAdapter"> <property name="serverUrl" value="vm://localhost"/> </bean> </property> </bean> <bean id="HelloQueueConsumer" factory-method="addConnector" factory-bean="activeMQContainer"> <property name="activationSpec"> <bean class="org.activemq.ra.ActiveMQActivationSpec"> <property name="destination" value="Hello.Queue"/> <property name="destinationType" value="javax.jms.Queue"/> </bean> </property> <property name="ref" value="HelloMDP"/> </bean>
4 设定JmsTemplate,方便JMS客户段操作。
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> <property name="defaultDestinationName" value="Hello.Queue"/> <property name="connectionFactory" ref="connectionFactory"/> </bean>
接下来我们需要创建一个Spring的JUnit测试用例,测试我们设定的功能,这里我们只需设定Spring配置文件位置,然后在测试方法中引用JmsTemplate,发送Message进行测试。
public class SpringTest extends AbstractDependencyInjectionSpringContextTests { protected String[] getConfigLocations() { return new String[]{"classpath*:applicationContext.xml"}; } public void testSendMessage() throws Exception { JmsTemplate jmsTemplate = (JmsTemplate) applicationContext.getBean("jmsTemplate"); jmsTemplate.send(new MessageCreator() { public Message createMessage(Session session) throws JMSException { MapMessage message=session.createMapMessage(); message.setString("name","Jacky"); return message; } }); } }
当你运行这个测试时,你会发现测试的结果。 总结:通过以上的设定,我们就可以完成Spring下的Message Driven Bean的设定,同EJB的MDB相比,MDP更加简单。在上例中,我们以JVM方式启动ActiveMQ,这对于单个应用(如web应用)是非常实用的,通过这种方式可以异步发送消息,这对应用中异步发送email,特定任务等,这种方式非常简单,原来比较复杂的问题现在可以很快解决啦。
|