赞
踩
本人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依赖
- <!-- rabbitmq start -->
- <dependency>
- <groupId>com.rabbitmq</groupId>
- <artifactId>amqp-client</artifactId>
- <version>4.2.0</version>
- </dependency>
- <dependency>
- <groupId>org.springframework.amqp</groupId>
- <artifactId>spring-rabbit</artifactId>
- <version>1.7.3.RELEASE</version>
- </dependency>
- <!-- rabbitmq end -->
二、mq的spring配置
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:rabbit="http://www.springframework.org/schema/rabbit"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
- http://www.springframework.org/schema/rabbit
- http://www.springframework.org/schema/rabbit/spring-rabbit.xsd" >
-
- <description>rabbitmq 连接服务配置</description>
- <!-- 连接配置 -->
- <rabbit:connection-factory id="mqConnectionFactory" host="${mq.host}" username="${mq.username}" password="${mq.password}" port="${mq.port}" virtual-host="${mq.vhost}"/>
-
- <!--通过指定下面的admin信息,当前producer中的exchange和queue会在rabbitmq服务器上自动生成-->
- <rabbit:admin connection-factory="mqConnectionFactory"/>
-
- <!-- 声明消息队列 -->
- <!-- durable:是否持久化,宕机恢复后会重持久化日志恢复消息队列 -->
- <!-- exclusive: 仅创建者可以使用的私有队列,断开后自动删除 -->
- <!-- auto_delete: 当所有消费客户端连接断开后,是否自动删除队列 -->
- <!-- 若已经声明消息队列,并且设置跟以下设置不一致,会报错,必须先去管理中心删除该消息队列,再重新创建消息队列 -->
- <rabbit:queue id="myQueue" name="myQueue" durable="true" auto-delete="false" exclusive="false" />
-
- <!-- 定义交换机 -->
- <rabbit:direct-exchange id="myExchange" name="myExchange" durable="true" auto-delete="false" >
- <!-- 可以绑定多个消息队列 -->
- <rabbit:bindings>
- <rabbit:binding queue="myQueue" key="myQueueKey"/>
- </rabbit:bindings>
- </rabbit:direct-exchange>
-
- <!-- 消息对象json转换类 -->
- <bean id="jsonMessageConverter" class="org.springframework.amqp.support.converter.Jackson2JsonMessageConverter" />
-
- <!-- spring template声明-->
- <rabbit:template id="amqpTemplate" exchange="myExchange" connection-factory="mqConnectionFactory" message-converter="jsonMessageConverter"/>
-
- <!-- 定义监听器 -->
- <rabbit:listener-container connection-factory="mqConnectionFactory" acknowledge="auto">
- <rabbit:listener queues="myQueue" ref="queueListenter"/>
- </rabbit:listener-container>
-
- <!-- 定义监听队列的处理类 -->
- <bean id="queueListenter" class="com.bluedon.useradmin.datainteraction.mq.QueueListener" />
- </beans>

如果是集群连接,rabbit:connection-factory要改成如下,主要是addresses属性,格式为ip1:port,ip2:port
<rabbit:connection-factory id="mqConnectionFactory" addresses="${mq.addresses}" username="${mq.username}" password="${mq.password}" virtual-host="${mq.vhost}" />
另外如果报错提示"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”
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。