springMVC+activemq整合注解方式

前言:用了一次mq,由于xml配置+注解的方式出现类加载问题并且对spring类加载机制不是很熟悉,索性就改成注解方式来解决问题。

配置过程中,搜索了好久,各种配置失败,这里给出总结经验,勉励一下自己吧。

1.xml监听配置方式及测试程序,请参阅

http://www.cnblogs.com/leiOOlei/p/5075402.html

2.activemq注解监听配置如下

(1)请自行配置springmvc+maven环境(参看前几篇博客),下载activemq

(2)maven引入的包,在pom.xml文件引入。

注意:activemq-all用的5.8.0,同时测试了5.12.1和5.14.3版本,无法识别配置,不能实现注解。

这里困扰好久,望有成功者可以指点一二,感激不尽。

	
            org.apache.xbean
            xbean-spring
            4.5
        
	
            org.springframework
            spring-jms
            4.1.0.RELEASE
        
        
            org.apache.activemq
            activemq-all
            5.8.0
        

(3)activemq.xml文件配置




 	

    
        
        
    

    
    

    
    
    
        
        
        
        
    

    
    
        
        
        
        
    
    
        
    
    
    
(4)监听消息测试代码, 注意:类上面的两个注解,丢了无法启动监听

package com.cms.mmc.activemq;

import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.TextMessage;

import org.springframework.jms.annotation.EnableJms;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;

import com.cms.mmc.activemq.service.IServiceProducer;

//spring配置监听队列中的消息
@Component
@EnableJms
public class QueueMsgListener{

    //当收到消息后,自动调用该方法,spring配置默认监听器,负责接收消息
    @JmsListener(containerFactory="jmsListenerContainerFactory",destination = "mssactivemq")
    public void onMessage(Message message) {
        TextMessage tm = (TextMessage) message;
        try {
        	System.out.println(tm.getText());
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }
}
(5)测试监听启动,启动tomcat,启动activemq,:\apache-activemq-5.14.3\bin\win64,双击activemq.bat,启动后

浏览器输入http://localhost:8161/admin,未修改密码情况,用户名密码admin admin。看到如下图片,number of consumers =1,

当向mssactivemq队列发送消息时,会在控制台打印该消息,发送消息程序请看(6),输出如下

{"code":"equipment","commKey":"send","pId":"00ec55041f7c4534a4b6740b9187cf5d","id":"222","items":"json对象","key":"222_00ec55041f7c4534a4b6740b9187cf5d"}

springMVC+activemq整合注解方式_第1张图片


(6)发送消息测试代码如下

package com.cms.mmc.activemq;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.activemq.ActiveMQConnectionFactory;
import org.springframework.jms.core.JmsTemplate;

import com.alibaba.fastjson.JSONObject;

//向mq发送2条数据
public class M2Producer {

	public M2Producer(){
		
	}
   
	public static void main(String[] args) {
		ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
		try {
			Connection connection = connectionFactory.createConnection();
			connection.start();

			Session session = connection.createSession(Boolean.TRUE,Session.AUTO_ACKNOWLEDGE);
			Destination destination = session.createQueue("mssactivemq");

			MessageProducer producer = session.createProducer(destination);
			JSONObject jsonObject = new JSONObject();
			jsonObject.put("commKey", "send");
			jsonObject.put("id", "222");
			jsonObject.put("pId", "00ec55041f7c4534a4b6740b9187cf5d");
			jsonObject.put("key", "222_00ec55041f7c4534a4b6740b9187cf5d");
			jsonObject.put("items", "json对象");
			jsonObject.put("code", "equipment");
			for (int i = 0; i < 1; i++) {
				System.out.println("send...messageAA --->" + jsonObject);
				TextMessage message = session.createTextMessage(jsonObject.toJSONString());
				// 通过生产者发出消息
				producer.send(message);
			}
			
			session.commit();
			session.close();
			connection.close();
		} catch (JMSException e) {
			e.printStackTrace();
		}
	}
}



你可能感兴趣的:(java,springMVC开发)