ActiveMQ学习--集成到Spring中

首先添加maven依赖包

<dependency>
    <groupId>org.apache.activemq</groupId>
    <artifactId>activemq-all</artifactId>
    <version>5.11.1</version>
</dependency>	

集成到Spring的配置文件中

<!-- 
    配置连接池
	也可以使用org.springframework.jms.connection.CachingConnectionFactory
	不过可能会在ActiveMQ的日志中出现,connection reset的警告信息。
-->
<bean id="connectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory" destroy-method="stop">
	<property name="connectionFactory">
			<bean class="org.apache.activemq.ActiveMQConnectionFactory">
			<!-- 启用异步的方式发送消息,默认同步的方式在并发多的时候会有性能问题 -->
			<property name="useAsyncSend" value="true"/>
			<property name="brokerURL" value="tcp://xx.xx.xx.xx:61616" />
			<!-- ActiveMQ的验证用户和密码,如果没设置验证的不配置 -->
			<property name="userName" value="activemq" />
			<property name="password" value="activemq" />
		</bean>
	</property>
</bean>

<bean id="queue" class="org.apache.activemq.command.ActiveMQQueue">
  <!-- 持久化队列名称 -->
	<constructor-arg value="myqueuedata" />
</bean>

<!-- 配置jmsTemple,方面发送信息 -->
<bean id="jmsTemple" class="org.springframework.jms.core.JmsTemplate">
	<property name="connectionFactory" ref="connectionFactory" />
	<!-- 默认操作的队列 -->
	<property name="defaultDestination" ref="queue" />
</bean>

<!-- 配置接收信息的监听回调,当队列收到消息后会在这里处理消息 -->
<bean id="MyMessageListener" class="com.doumob.datalog.activemq.service.MyMessageListener" />
<jms:listener-container>
	<!-- 配置消息队列对应的回调 -->
	<jms:listener destination="myqueuedata" ref="MyMessageListener" />
</jms:listener-container>

发送消息代码

@Autowired
private JmsTemplate jmsTemplate;

public void sendMsg(final String text){
  // 发送消息到jmsTemplate中默认的队列中
  // 如果要发送到其他队列则如下方法:
  // public void send(final Destination destination, final MessageCreator messageCreator)
	jmsTemplate.send(new MessageCreator() {
		@Override
		public Message createMessage(Session session) throws JMSException {
			return session.createTextMessage(text);
		}
	});
	
}

消息回调处理

public class MyMessageListener implements MessageListener {
	Log log = LogFactory.getLog(MyMessageListener.class);
	
	@Override
	public void onMessage(Message message) {
		log.debug("[onMessage] "+message);
		
		if(message instanceof TextMessage){
			try {
				log.debug("[onMessage][text] "+((TextMessage)message).getText());
			} catch (JMSException e) {
				throw new RuntimeException(e);
			}
		}
	}
}



提交评论