通过spring开发ActiveMQ简单应用

使用spring的支持类开发JMS程序可以简化代码,确保开发质量。以下是使用ActiveMQ作为JMS实现的示例。

首先需要确保如下类库,这里使用maven的pom:

 

  
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> < dependency > < groupId > org.springframework </ groupId > < artifactId > spring - jms </ artifactId > < version > 2.5 . 6 </ version > </ dependency > < dependency > < groupId > org.apache.xbean </ groupId > < artifactId > xbean - spring </ artifactId > < version > 3.5 </ version > </ dependency > < dependency > < groupId > org.apache.activemq </ groupId > < artifactId > activemq - core </ artifactId > < version > 5.2 . 0 </ version > </ dependency >

 

编写消息生产者的代码:

 

  
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> @Component public class MyMessageProducer { @Resource(name = " Queue " ) private Destination destination; @Autowired private JmsTemplate jmsTemplate; public void sendMessage( final String message) { this .jmsTemplate.send( this .destination, new MessageCreator() { @Override public Message createMessage(Session session) throws JMSException { TextMessage textMessage = session.createTextMessage(); textMessage.setText(message); return textMessage; } }); } }

有关生产者部分spring的配置文件内容:

 

  
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> <? xml version="1.0" encoding="UTF-8" ?> < beans xmlns ="http://www.springframework.org/schema/beans" xmlns:amq ="http://activemq.apache.org/schema/core" xmlns:lang ="http://www.springframework.org/schema/lang" xmlns:context ="http://www.springframework.org/schema/context" xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop ="http://www.springframework.org/schema/aop" xmlns:tx ="http://www.springframework.org/schema/tx" xmlns:util ="http://www.springframework.org/schema/util" xsi:schemaLocation ="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.5.xsd http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd" > < context:annotation-config /> < context:component-scan base-package ="activemq.demo.spring" /> < bean id ="jmsFactory" class ="org.apache.activemq.ActiveMQConnectionFactory" > < property name ="brokerURL" > < value > tcp://localhost:61616 </ value > </ property > </ bean > < bean id ="myJmsTemplate" class ="org.springframework.jms.core.JmsTemplate" > < property name ="connectionFactory" ref ="jmsFactory" /> </ bean > < amq:queue name ="Queue" physicalName ="example.D" />

这样,执行发送代码,在activemq的admin界面中可以观察到发送成功的消息。

异步接收的代码:

 

  
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> public class MyMessageConsumer implements MessageListener { @Override public void onMessage(Message message) { TextMessage textMessage = (TextMessage) message; try { System.out.println( " >>>>>>> " + textMessage.getText()); // throw new RuntimeException(">>>>>>>>>>test error"); } catch (JMSException e) { throw new RuntimeException(e); } } }

有关异步接收代码的spring配置:

 

  
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> < bean id ="myMessageConsumer" class ="activemq.demo.spring.MyMessageConsumer" /> < bean id ="jmsContainer" class ="org.springframework.jms.listener.DefaultMessageListenerContainer" > < property name ="connectionFactory" ref ="jmsFactory" /> < property name ="destination" ref ="Queue" /> < property name ="messageListener" ref ="myMessageConsumer" /> < property name ="sessionTransacted" value ="true" /> </ bean >

这样,就实现了基于spring和activemq的JMS的同步发送和异步提交。如果将MyMessageConsumer的抛出异常部分取消注释,则接收信息后,spring捕获到该异常并自动回滚事务。通过activemq的admin界面会监控到消息依然留在队列中。

你可能感兴趣的:(spring,AOP,bean,jms,activemq)