众所周知,SpringBoot是对Spring的一层封装,用来简化操作。

随着SpringBoot的越发成熟,很多的流行技术都提供了SpringBoot的版本。

可以点击下方的连接查看spring-boot的家族都有哪些成员。

spring-boot-starter家族成员简介

可以发现RabbitMQ是被spring-boot-starter-amqp所实现的。

下面我们打开springboot的官方指南(根据自己的版本)

可以发现官方的指南东西太多了。如何快速找到amqp相关的指南呢?

ctrl+F   输入:amqp

从目录定位:

这里面就提供了RabbitMQ的基本使用,可以发现就很简单的三步:

1.把必备属性写到application.properties或者application.yml里

spring:
rabbitmq:
host: localhost
port: 5672

2.在发送端,注入一个AmqpTemplate和AmqpAdmin,用来向Rabbit服务器发送数据

import org.springframework.amqp.core.AmqpAdmin;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import com.xiaokong.bean.People; @Component
public class AmqpSender {
private AmqpTemplate template;
private AmqpAdmin admin;
@Autowired
public void setTemplate(AmqpAdmin admin,AmqpTemplate template) {
this.template=template;
this.admin=admin;
} public void sendMessage(People people) {
String exchangeName="springbootExchangeTopic";
//声明一个topic类型的交换器
admin.declareExchange(new TopicExchange(exchangeName, false, true));
String routingKey="com.xiaokong.test";
template.convertAndSend(exchangeName, routingKey, people);
}
}

这里需要注意的是:在Exchange构造函数里的(String name, boolean durable, boolean autoDelete)需要和接受端里的一致,否则会报错 inequivalent arg 'xxxx' for exchange '

3.在接受端,通过注解方式设置队列交换器的绑定规则

import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.QueueBinding;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component; import com.xiaokong.bean.People; @Component
public class AmqpReceiver {
@RabbitListener(
bindings= {
@QueueBinding(
value=@Queue,
exchange=@Exchange(value="springbootExchangeTopic",type="topic",durable="false",autoDelete="true"),
key="#"
)})
public void receiveMessage(People people) {
System.out.println("-------->接收到消息:"+people);
}
}

一定要注意,注解@Exchange中的参数一定要和发送端的一致,因为这个框架里,发送端和接受端的默认值是不一致的(坑了我好久),如果使用默认值可能就会出错!!

最后,写一下过程中出现的问题:

中间有报过一次异常,com.rabbitmq.client.ShutdownSignalException: channel error; protocol methodxxxx

大致意思是队列不存在,我一直以为是真的队列无法创建。

最后发现因为后面我改了交换器的配置,但是因为rabbit服务器交换器还存在,所以不会重新创建,配置也还是原来的配置。

解决方案就是打开Rabbit管理页面把Exchange删除就好了。

如何通过SpringBoot官方手册集成RabbitMQ的更多相关文章

  1. Springboot整合二 集成 rabbitmq

    1.在application.yml文件中进行RabbitMQ的相关配置先上代码 spring: rabbitmq: host: 192168.21.11 port: username: guest ...

  2. springboot集成rabbitmq(实战)

    RabbitMQ简介RabbitMQ使用Erlang语言开发的开源消息队列系统,基于AMQP协议来实现(AMQP的主要特征是面向消息.队列.路由.可靠性.安全).支持多种客户端,如:Python.Ru ...

  3. SpringBoot集成rabbitmq(二)

    前言 在使用rabbitmq时,我们可以通过消息持久化来解决服务器因异常崩溃而造成的消息丢失.除此之外,我们还会遇到一个问题,当消息生产者发消息发送出去后,消息到底有没有正确到达服务器呢?如果不进行特 ...

  4. SpringBoot集成rabbitmq(一)

    前言 Rabbitmq是一个开源的消息代理软件,是AMQP协议的实现.核心作用就是创建消息队列,异步发送和接收消息.通常用来在高并发中处理削峰填谷.延迟处理.解耦系统之间的强耦合.处理秒杀订单.  入 ...

  5. SpringBoot集成RabbitMQ消息队列搭建与ACK消息确认入门

    1.RabbitMQ介绍 RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性.扩展性.高可用性等方面表现不俗.Rabbi ...

  6. spring集成rabbitMq(非springboot)

    首先 , pom文件需要加入spring集成rabbitMq的依赖: <dependency> <groupId>org.springframework.amqp</gr ...

  7. SpringBoot系列之集成logback实现日志打印(篇二)

    SpringBoot系列之集成logback实现日志打印(篇二) 基于上篇博客SpringBoot系列之集成logback实现日志打印(篇一)之后,再写一篇博客进行补充 logback是一款开源的日志 ...

  8. RabbitMQ(3) Spring boot集成RabbitMQ

    springboot集成RabbitMQ非常简单,如果只是简单的使用配置非常少,springboot提供了spring-boot-starter-amqp项目对消息各种支持. 资源代码:练习用的代码. ...

  9. 集成RabbitMQ做秒杀

    由于秒杀的并发量太大,所以仅仅使用缓存是不够的,还需要用到RabbitMQ. 这里推荐一款用于分库分表的中间件:mycat 解决超卖的问题(看第五章节): 秒杀接口优化: 实操: 然后把下载好的文件上 ...

随机推荐

  1. 在CMainFrame里使用定时器是有讲究的

    设置定时器函数:SetTimer 单位毫秒 销毁定时器函数:KillTimer 消息:WM_TIMER 注意事项: (1)不要在构造函数里设置定时器. (2)不要在析构函数里销毁定时器. 原因:构造函 ...

  2. 无废话XML--XML解析(DOM和SAX)

    XML处理模式 处理XML有2种方式,DOM和SAX.一般的实际开发中,这2种使用的不多,直接用dom4j来解析XML就好了,包括CRUD等操作都很方便的.这里介绍的DOM和SAX是比较底层的,具体的 ...

  3. SQL Server 2005的服务器角色(public)的问题

    SQL Server 默认会有9个服务器角色,而且这些角色是不能删除和新增.修改的.关于这些角色相关介绍和权限,请参考 其中有一个特殊的角色public,任何登录都会属于该角色,它只拥有的权限是VIE ...

  4. 《css定位 position》课程笔记

    这是我学习课程css定位 position时做的笔记! 本节内容 html的三种布局方式 position可选参数 z-index 盒子模型和定位的区别 侧边栏导航跟随实例 html的三种布局方式 三 ...

  5. CSS :befor :after 伪元素的妙用

    本篇重点介绍CSS中的:befor.:after创建的伪元素几种使用场景,如填充文本.作为iconfont.进度线.时间线以及几何图形. 1. 介绍 1.1 说明 CSS中的:befor.:after ...

  6. C#基础(五)--枚举的含义及其应用

    本章讲解如下枚举的如下几个知识点:    1.什么是枚举?    2.枚举是值类型还是引用类型?    3.如何定义枚举?    4.枚举的好处?    5.枚举在实际系统开发过程中的用处?    一 ...

  7. OpenStreetMap数据清洗(SQL&MonogoDB版本)

    目标:通过网上下载的OpenStreetMap.xml数据格式,将该文件的格式进行统计,清洗,并导出成CSV格式的文件,最后倒入到SQLite中 本案例中所需的包 import csv import ...

  8. SpringMVC环境搭建---xml版及注解版

    一.建立 JavaWeb 项目(基于Intellij 14.0.3搭建) 1.建立一个 Java 项目,在项目下新建一个文件夹 webapp ,然后在该文件夹下新建一个 WEB-INF 文件夹: 2. ...

  9. CentOS的软件包的管理之rpm和yum

    在linux上,一个软件包通常由二进制程序,库文件,配置文件和帮助文件组成. 其中: 二进制程序一般都放在/bin,/sbin,/usr/bin,/usr/sbin,/usr/local/bin和/u ...

  10. 关于metaclass,我原以为我是懂的

    关于Python2.x中metaclass这一黑科技,我原以为我是懂的,只有当被打脸的时候,我才认识到自己too young too simple sometimes native. 为什么之前我认为 ...