当前位置:   article > 正文

spring配置rabbitMQ(Spring AMQP)_spring rabbitmq配置

spring rabbitmq配置

本人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依赖

  1. <!-- rabbitmq start -->
  2. <dependency>
  3. <groupId>com.rabbitmq</groupId>
  4. <artifactId>amqp-client</artifactId>
  5. <version>4.2.0</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>org.springframework.amqp</groupId>
  9. <artifactId>spring-rabbit</artifactId>
  10. <version>1.7.3.RELEASE</version>
  11. </dependency>
  12. <!-- rabbitmq end -->


二、mq的spring配置

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:rabbit="http://www.springframework.org/schema/rabbit"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  7. http://www.springframework.org/schema/rabbit
  8. http://www.springframework.org/schema/rabbit/spring-rabbit.xsd" >
  9. <description>rabbitmq 连接服务配置</description>
  10. <!-- 连接配置 -->
  11. <rabbit:connection-factory id="mqConnectionFactory" host="${mq.host}" username="${mq.username}" password="${mq.password}" port="${mq.port}" virtual-host="${mq.vhost}"/>
  12. <!--通过指定下面的admin信息,当前producer中的exchange和queue会在rabbitmq服务器上自动生成-->
  13. <rabbit:admin connection-factory="mqConnectionFactory"/>
  14. <!-- 声明消息队列 -->
  15. <!-- durable:是否持久化,宕机恢复后会重持久化日志恢复消息队列 -->
  16. <!-- exclusive: 仅创建者可以使用的私有队列,断开后自动删除 -->
  17. <!-- auto_delete: 当所有消费客户端连接断开后,是否自动删除队列 -->
  18. <!-- 若已经声明消息队列,并且设置跟以下设置不一致,会报错,必须先去管理中心删除该消息队列,再重新创建消息队列 -->
  19. <rabbit:queue id="myQueue" name="myQueue" durable="true" auto-delete="false" exclusive="false" />
  20. <!-- 定义交换机 -->
  21. <rabbit:direct-exchange id="myExchange" name="myExchange" durable="true" auto-delete="false" >
  22. <!-- 可以绑定多个消息队列 -->
  23. <rabbit:bindings>
  24. <rabbit:binding queue="myQueue" key="myQueueKey"/>
  25. </rabbit:bindings>
  26. </rabbit:direct-exchange>
  27. <!-- 消息对象json转换类 -->
  28. <bean id="jsonMessageConverter" class="org.springframework.amqp.support.converter.Jackson2JsonMessageConverter" />
  29. <!-- spring template声明-->
  30. <rabbit:template id="amqpTemplate" exchange="myExchange" connection-factory="mqConnectionFactory" message-converter="jsonMessageConverter"/>
  31. <!-- 定义监听器 -->
  32. <rabbit:listener-container connection-factory="mqConnectionFactory" acknowledge="auto">
  33. <rabbit:listener queues="myQueue" ref="queueListenter"/>
  34. </rabbit:listener-container>
  35. <!-- 定义监听队列的处理类 -->
  36. <bean id="queueListenter" class="com.bluedon.useradmin.datainteraction.mq.QueueListener" />
  37. </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的连接配置

  1. #rabbitmq-config
  2. mq.host=127.0.0.1
  3. mq.username=guest
  4. mq.password=guest
  5. mq.port=5672
  6. mq.vhost=/

集群的连接配置

  1. mq.host=127.0.0.1
  2. mq.username=admin
  3. mq.password=123456
  4. mq.port=5672
  5. mq.addresses=192.168.153.129:5672,192.168.153.130:5672
  6. mq.vhost=/



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



三、定义消息队列监听类

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

四、定义消息发送类

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

  1. @Service
  2. public class MessageBuilder {
  3. /*@Resource(name="amqpTemplate")
  4. private AmqpTemplate amqpTemplate;*/
  5. public void sendDataToQueue(String queueKey, Object object){
  6. WebApplicationContext context = ContextLoader.getCurrentWebApplicationContext();
  7. AmqpTemplate amqpTemplate = (AmqpTemplate) context.getBean("amqpTemplate");
  8. amqpTemplate.convertAndSend(queueKey,object);
  9. }
  10. }


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

  1. @Controller
  2. @RequestMapping("/test")
  3. public class TestController {
  4. @Resource
  5. private TestService testService;
  6. @Resource
  7. private MessageBuilder builder;
  8. @RequestMapping(value = "test", method = RequestMethod.GET)
  9. @ResponseBody
  10. public Object insert(String userName,String pwd,String mobileMachineCode) throws Exception{
  11. //testService.addUser();
  12. builder.sendDataToQueue("myQueueKey", "dadfadf");
  13. return "ddddd";
  14. }
  15. }
指定rabbit交换机的消息队列的key为“myQueueKey”




本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/956423
推荐阅读
相关标签
  

闽ICP备14008679号