通过spring开发ActiveMQ简单应用
使用spring的支持类开发JMS程序可以简化代码,确保开发质量。以下是使用ActiveMQ作为JMS实现的示例。
首先需要确保如下类库,这里使用maven的pom:
<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>
编写消息生产者的代码:
@Component
publicclassMyMessageProducer{
@Resource(name="Queue")
privateDestinationdestination;
@Autowired
privateJmsTemplatejmsTemplate;
publicvoidsendMessage(finalStringmessage){
this.jmsTemplate.send(this.destination,newMessageCreator(){
@Override
publicMessagecreateMessage(Sessionsession)throwsJMSException{
TextMessagetextMessage=session.createTextMessage();
textMessage.setText(message);
returntextMessage;
}
});
}
}
有关生产者部分spring的配置文件内容:
<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns="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/beanshttp://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/utilhttp://www.springframework.org/schema/util/spring-util-2.5.xsd
http://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/langhttp://www.springframework.org/schema/lang/spring-lang-2.5.xsd
http://activemq.apache.org/schema/corehttp://activemq.apache.org/schema/core/activemq-core.xsd">
<context:annotation-config/>
<context:component-scanbase-package="activemq.demo.spring"/>
<beanid="jmsFactory"class="org.apache.activemq.ActiveMQConnectionFactory">
<propertyname="brokerURL">
<value>tcp://localhost:61616</value>
</property>
</bean>
<beanid="myJmsTemplate"class="org.springframework.jms.core.JmsTemplate">
<propertyname="connectionFactory"ref="jmsFactory"/>
</bean>
<amq:queuename="Queue"physicalname="example.D"/>
这样,执行发送代码,在activemq的admin界面中可以观察到发送成功的消息。
异步接收的代码:
publicclassMyMessageConsumerimplementsMessageListener{
@Override
publicvoidonMessage(Messagemessage){
TextMessagetextMessage=(TextMessage)message;
try{
System.out.println(">>>>>>>"+textMessage.getText());
//thrownewRuntimeException(">>>>>>>>>>testerror");
}catch(JMSExceptione){
thrownewRuntimeException(e);
}
}
}
有关异步接收代码的spring配置:
<beanid="myMessageConsumer"class="activemq.demo.spring.MyMessageConsumer"/>
<beanid="jmsContainer"
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<propertyname="connectionFactory"ref="jmsFactory"/>
<propertyname="destination"ref="Queue"/>
<propertyname="messageListener"ref="myMessageConsumer"/>
<propertyname="sessionTransacted"value="true"/>
</bean>
这样,就实现了基于spring和activemq的JMS的同步发送和异步提交。如果将MyMessageConsumer的抛出异常部分取消注释,则接收信息后,spring捕获到该异常并自动回滚事务。通过activemq的admin界面会监控到消息依然留在队列中。