通过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界面会监控到消息依然留在队列中。

相关推荐