本人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);
}
}
@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”