spring配置rabbitMQ(Spring AMQP)

本人rabbitMQ版本是3.6.5,此处省略rabbitMQ的安装方式。

windows的安装方式(十分详细):http://blog.csdn.net/chwshuang/article/details/50543878

linux的安装方式(本人整理的):http://blog.csdn.net/fuck487/article/details/77869039

rabbitMQ命令操作:http://www.cnblogs.com/ericli-ericli/p/5902270.html

一、maven依赖


		
        	com.rabbitmq
        	amqp-client
        	4.2.0
    	
    	
        	org.springframework.amqp
        	spring-rabbit
        	1.7.3.RELEASE
    	
    	


二、mq的spring配置




    rabbitmq 连接服务配置
    
    

	
    
	
	
    
	
	
	
    
    
    
    
	    
	    
	        
	    
	
	
	
    
	
    
    
	
	
	
    	
	
	
	
	


如果是集群连接,rabbit:connection-factory要改成如下,主要是addresses属性,格式为ip1:port,ip2:port

另外如果报错提示"addresses"不存在,则就是xsd文件问题,应该用最新的xsd

http://www.springframework.org/schema/rabbit    http://www.springframework.org/schema/rabbit/spring-rabbit.xsd




rabbitMQ的连接配置

#rabbitmq-config
mq.host=127.0.0.1
mq.username=guest
mq.password=guest
mq.port=5672
mq.vhost=/

集群的连接配置

mq.host=127.0.0.1
mq.username=admin
mq.password=123456
mq.port=5672
mq.addresses=192.168.153.129:5672,192.168.153.130:5672
mq.vhost=/



注:rabbitMQ连接时,我定义了新的管理员用户和虚拟主机。但是程序运行移植报错没权限。用默认的用户名密码和虚拟主机才行。暂时也没找到原因



三、定义消息队列监听类

public class QueueListener implements MessageListener {
	@Override
    public void onMessage(Message msg) {
        try{
            System.out.println(new String(msg.getBody()));
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}
实现rabbitMQ的消息监听器,重写onMessage方法

四、定义消息发送类

@Service
public class MessageBuilder {
	
	@Resource
	private AmqpTemplate amqpTemplate;
	
	public void sendDataToQueue(String queueKey, Object object){
		amqpTemplate.convertAndSend(queueKey,object);
	}
}
MessageBuilder实例化时也要通过spring来实例化,不然amqpTemplate是没办法spring注入的。或者amqpTemplate直接通过查找bean的方式初始化,如下

@Service
public class MessageBuilder {
	
	/*@Resource(name="amqpTemplate")
	private AmqpTemplate amqpTemplate;*/
	
	public void sendDataToQueue(String queueKey, Object object){
		WebApplicationContext context = ContextLoader.getCurrentWebApplicationContext();
		AmqpTemplate amqpTemplate = (AmqpTemplate) context.getBean("amqpTemplate");
		amqpTemplate.convertAndSend(queueKey,object);
	}
}


五、通过control调用MessageBuilder发送消息

@Controller
@RequestMapping("/test")
public class TestController {
	
	@Resource
	private TestService testService;
	
	@Resource
	private MessageBuilder builder;
	
	@RequestMapping(value = "test", method = RequestMethod.GET)
	@ResponseBody
	public Object insert(String userName,String pwd,String mobileMachineCode) throws Exception{

		//testService.addUser();
		builder.sendDataToQueue("myQueueKey", "dadfadf");
		return "ddddd";
	}
}
指定rabbit交换机的消息队列的key为“myQueueKey”




你可能感兴趣的:(rabbitMQ)