1.RabbitMQ简介

RabbitMQ是流行的开源消息队列系统,用erlang语言开发。RabbitMQ是AMQP(高级消息队列协议)的标准实现。 

官网:http://www.rabbitmq.com/

2.Spring集成RabbitMQ

2.1 maven配置

  1. //pom.xml
  2. <dependency>
  3. <groupId>com.rabbitmq</groupId>
  4. <artifactId>amqp-client</artifactId>
  5. <version>3.5.1</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>org.springframework.amqp</groupId>
  9. <artifactId>spring-rabbit</artifactId>
  10. <version>1.4.5.RELEASE</version>
  11. </dependency>

2.2 rabbmitmq配置文件

  1. //rabbitmq-config.properties
  2. mq.host=127.0.0.1
  3. mq.username=test
  4. mq.password=123456
  5. mq.port=5672
  6. mq.vhost=testmq

2.3 Spring配置

  1. //application-mq.xml
  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-1.0.xsd" >
  9. <description>rabbitmq 连接服务配置</description>
  10. <!-- 连接配置 -->
  11. <rabbit:connection-factory id="connectionFactory" host="${mq.host}" username="${mq.username}" password="${mq.password}" port="${mq.port}" virtual-host="${mq.vhost}"/>
  12. <rabbit:admin connection-factory="connectionFactory"/>
  13. <!-- spring template声明-->
  14. <rabbit:template exchange="amqpExchange" id="amqpTemplate" connection-factory="connectionFactory" message-converter="jsonMessageConverter" />
  15. <!-- 消息对象json转换类 -->
  16. <bean id="jsonMessageConverter" class="org.springframework.amqp.support.converter.Jackson2JsonMessageConverter" />
  17. </beans>

3. 在Spring中使用RabbitMQ

3.1 申明一个消息队列Queue

  1. //application-mq.xml
  2. <rabbit:queue id="test_queue_key" name="test_queue_key" durable="true" auto-delete="false" exclusive="false" />

说明: 



durable:是否持久化



exclusive: 仅创建者可以使用的私有队列,断开后自动删除



auto_delete: 当所有消费客户端连接断开后,是否自动删除队列

3.2 交换机定义

  1. //application-mq.xml
  2. <rabbit:direct-exchange name="test-mq-exchange" durable="true" auto-delete="false" id="test-mq-exchange">
  3. <rabbit:bindings>
  4. <rabbit:binding queue="test_queue_key" key="test_queue_key"/>
  5. </rabbit:bindings>
  6. </rabbit:direct-exchange>

说明: 



rabbit:direct-exchange:定义exchange模式为direct,意思就是消息与一个特定的路由键完全匹配,才会转发。 



rabbit:binding:设置消息queue匹配的key

3.3 发送消息Producer

  1. //MQProducer.java
  2. public interface MQProducer {
  3. /**
  4. * 发送消息到指定队列
  5. * @param queueKey
  6. * @param object
  7. */
  8. public void sendDataToQueue(String queueKey, Object object);
  9. }
  1. @Service
  2. public class MQProducerImpl implements MQProducer {
  3. @Autowired
  4. private AmqpTemplate amqpTemplate;
  5. private final static Logger LOGGER = Logger.getLogger(MQProducerImpl.class);
  6. /* (non-Javadoc)
  7. * @see com.stnts.tita.rm.api.mq.MQProducer#sendDataToQueue(java.lang.String, java.lang.Object)
  8. */
  9. @Override
  10. public void sendDataToQueue(String queueKey, Object object) {
  11. try {
  12. amqpTemplate.convertAndSend(queueKey, object);
  13. } catch (Exception e) {
  14. LOGGER.error(e);
  15. }
  16. }
  17. }

说明: 



convertAndSend:将Java对象转换为消息发送到匹配Key的交换机中Exchange,由于配置了JSON转换,这里是将Java对象转换成JSON字符串的形式。原文:Convert a Java object to an Amqp Message and send it to a default exchange with a specific routing key.

3.4 异步接收消息Consumer

定义监听器

  1. //QueueListenter.java
  2. @Component
  3. public class QueueListenter implements MessageListener {
  4. @Override
  5. public void onMessage(Message msg) {
  6. try{
  7. System.out.print(msg.toString());
  8. }catch(Exception e){
  9. e.printStackTrace();
  10. }
  11. }
  12. }

监听配置

  1. //application-mq.xml
  2. <rabbit:listener-container connection-factory="connectionFactory" acknowledge="auto">
  3. <rabbit:listener queues="test_queue" ref="queueListenter"/>
  4. </rabbit:listener-container>

说明: 



queues:监听的队列,多个的话用逗号(,)分隔 



ref:监听器

3.5 JUnit测试

  1. //TestQueue.java
  2. @RunWith(value = SpringJUnit4ClassRunner.class)
  3. @ContextConfiguration(locations = {
  4. "classpath:/ApplicationContext/ApplicationContext-mq.xml"})
  5. public class TestQueue{
  6. @Autowired
  7. MQProducer mqProducer;
  8. final String queue_key = "test_queue";
  9. @Test
  10. public void send(){
  11. Map<String,Object> msg = new HashMap()<>;
  12. msg.put("data","hello,rabbmitmq!");
  13. mqProducer.sendDataToQueue(query_key,msg);
  14. }
  15. }

运行测试程序,Run with JUnit,会发送一条消息到test_queue,监听器监听到消息后,打印出消息。

至此,已经完成了Spring和RabbmitMQ集成,配置,和使用。

RabbitMQ学习总结(7)——Spring整合RabbitMQ实例的更多相关文章

  1. RabbitMQ入门到进阶(Spring整合RabbitMQ&SpringBoot整合RabbitMQ)

    1.MQ简介 MQ 全称为 Message Queue,是在消息的传输过程中保存消息的容器.多用于分布式系统 之间进行通信. 2.为什么要用 MQ 1.流量消峰 没使用MQ 使用了MQ 2.应用解耦 ...

  2. RabbitMQ的介绍与spring整合

    本文主要讲述的是个人参考官网及其他前辈博客,对RabbitMQ的一些理解与spring整个RabbitMQ. 一.RabbitMQ的介绍 1.1.什么是RabbitMQ RabbitMQ是一个由erl ...

  3. Redis总结(五)缓存雪崩和缓存穿透等问题 Web API系列(三)统一异常处理 C#总结(一)AutoResetEvent的使用介绍(用AutoResetEvent实现同步) C#总结(二)事件Event 介绍总结 C#总结(三)DataGridView增加全选列 Web API系列(二)接口安全和参数校验 RabbitMQ学习系列(六): RabbitMQ 高可用集群

    Redis总结(五)缓存雪崩和缓存穿透等问题   前面讲过一些redis 缓存的使用和数据持久化.感兴趣的朋友可以看看之前的文章,http://www.cnblogs.com/zhangweizhon ...

  4. 官网英文版学习——RabbitMQ学习笔记(十)RabbitMQ集群

    在第二节我们进行了RabbitMQ的安装,现在我们就RabbitMQ进行集群的搭建进行学习,参考官网地址是:http://www.rabbitmq.com/clustering.html 首先我们来看 ...

  5. SpringMVC系列(十五)Spring MVC与Spring整合时实例被创建两次的解决方案以及Spring 的 IOC 容器和 SpringMVC 的 IOC 容器的关系

    一.Spring MVC与Spring整合时实例被创建两次的解决方案 1.问题产生的原因 Spring MVC的配置文件和Spring的配置文件里面都使用了扫描注解<context:compon ...

  6. RabbitMQ学习笔记(5)----RabbitMQ整合Spring

    在Spring AMQP项目中Spring也提供了对RabbitMQ的支持,这里在之前学习SpringBoot的时候也整合过,但是今天这里使用的Spring的xml配置来整个rabbit. Sprin ...

  7. 170613、Spring整合RabbitMQ实例

    一.rabbitMQ简介 1.1.rabbitMQ的优点(适用范围)1. 基于erlang语言开发具有高可用高并发的优点,适合集群服务器.2. 健壮.稳定.易用.跨平台.支持多种语言.文档齐全.3. ...

  8. springboot学习笔记-6 springboot整合RabbitMQ

    一 RabbitMQ的介绍 RabbitMQ是消息中间件的一种,消息中间件即分布式系统中完成消息的发送和接收的基础软件.这些软件有很多,包括ActiveMQ(apache公司的),RocketMQ(阿 ...

  9. RabbitMQ之交换机及spring整合

    交换机 交换机属性: Name:交换机名称 Type:交换机类型 direct.topic.fanout.headers Durability:是否需要持久化,true为持久化 Auto Delete ...

随机推荐

  1. hdu5389 Zero Escape DP+滚动数组 多校联合第八场

    Zero Escape Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) To ...

  2. PHP设计模式之 单例模式 工厂模式 实例讲解

    单例模式又称为职责模式,它用来在程序中创建一个单一功能的访问点,通俗地说就是实例化出来的对象是唯一的.所有的单例模式至少拥有以下三种公共元素:1. 它们必须拥有一个构造函数,并且必须被标记为priva ...

  3. luogu2518 [HAOI2010] 计数

    题目大意 给出一个数字$n$,求满足下列条件的数$x$的个数: $x<n$ 对于来自于$x$十进制各个数位上的非零数字,它们的种类与个数都与$n$的相同. 思路 入手点 设$n$有$t$位数字, ...

  4. luogu1024 一元三次方程求解

    题目大意 已知一元三次方程\(ax^3+bx^2+cx+d=0\): 有且只有3个根 对\(\forall x, x\in[-100,100]\) 对\(\forall x_1,x_2,|x_1-x_ ...

  5. BZOJ3172 单词 Fail树

    题目大意:求一篇论文中每个单词分别在论文中出现多少次. 本题用AC自动机太慢,应该用Fail树将AC自动机中所有的Fail指针反向得到一个新树,这就是Fail树.对长度为x的字符串a和长度为y的字符串 ...

  6. luogu2761 软件补丁问题 状态压缩最短路径

    关键词:状态压缩 最短路径 想不出快速办法,就先考虑考虑暴力.枚举每一种错误分布的情况,然后通过可用的补丁转化为另多种情况,这些情况又转化为更多种情况……我们可以用图来表示这种关系! 状态压缩:每个错 ...

  7. Adding Search

    https://docs.asp.net/en/latest/tutorials/first-mvc-app/search.html In this section you’ll add search ...

  8. vim下的autocmd

    AUTOCMD *autocmd.txt* For Vim version 6.2. 最后修改: 2003年3月28日 VIM 参考手册 作者:Bram Moolenaar 翻译:Zimin<c ...

  9. python 飞机大战 实例

    飞机大战 #coding=utf-8 import pygame from pygame.locals import * import time import random class Base(ob ...

  10. MongoDB: The Definitive Guide

    第一章 简介 MongoDB是面向文档的数据库,不是关系型数据库.内置对MapReduce的支持,以及对地理空间索引的支持. 丰富的数据模型 容易扩展,它所采用的面向文档的数据模型可以使其在多台服务器 ...