如何通过SpringBoot官方手册集成RabbitMQ
众所周知,SpringBoot是对Spring的一层封装,用来简化操作。
随着SpringBoot的越发成熟,很多的流行技术都提供了SpringBoot的版本。
可以点击下方的连接查看spring-boot的家族都有哪些成员。
可以发现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的更多相关文章
- Springboot整合二 集成 rabbitmq
1.在application.yml文件中进行RabbitMQ的相关配置先上代码 spring: rabbitmq: host: 192168.21.11 port: username: guest ...
- springboot集成rabbitmq(实战)
RabbitMQ简介RabbitMQ使用Erlang语言开发的开源消息队列系统,基于AMQP协议来实现(AMQP的主要特征是面向消息.队列.路由.可靠性.安全).支持多种客户端,如:Python.Ru ...
- SpringBoot集成rabbitmq(二)
前言 在使用rabbitmq时,我们可以通过消息持久化来解决服务器因异常崩溃而造成的消息丢失.除此之外,我们还会遇到一个问题,当消息生产者发消息发送出去后,消息到底有没有正确到达服务器呢?如果不进行特 ...
- SpringBoot集成rabbitmq(一)
前言 Rabbitmq是一个开源的消息代理软件,是AMQP协议的实现.核心作用就是创建消息队列,异步发送和接收消息.通常用来在高并发中处理削峰填谷.延迟处理.解耦系统之间的强耦合.处理秒杀订单. 入 ...
- SpringBoot集成RabbitMQ消息队列搭建与ACK消息确认入门
1.RabbitMQ介绍 RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性.扩展性.高可用性等方面表现不俗.Rabbi ...
- spring集成rabbitMq(非springboot)
首先 , pom文件需要加入spring集成rabbitMq的依赖: <dependency> <groupId>org.springframework.amqp</gr ...
- SpringBoot系列之集成logback实现日志打印(篇二)
SpringBoot系列之集成logback实现日志打印(篇二) 基于上篇博客SpringBoot系列之集成logback实现日志打印(篇一)之后,再写一篇博客进行补充 logback是一款开源的日志 ...
- RabbitMQ(3) Spring boot集成RabbitMQ
springboot集成RabbitMQ非常简单,如果只是简单的使用配置非常少,springboot提供了spring-boot-starter-amqp项目对消息各种支持. 资源代码:练习用的代码. ...
- 集成RabbitMQ做秒杀
由于秒杀的并发量太大,所以仅仅使用缓存是不够的,还需要用到RabbitMQ. 这里推荐一款用于分库分表的中间件:mycat 解决超卖的问题(看第五章节): 秒杀接口优化: 实操: 然后把下载好的文件上 ...
随机推荐
- Python程序的执行方式
Python代码有两种执行方式: 一.文件执行 二.交互器执行(推荐) 一.文件执行 1.用 notepad++ 或 Sublime Text,甚至 写字本创建一个文件. 2.比如:print('He ...
- java里程碑之泛型--类型通配符
1,泛型与数组在子类上面的对比 在整理java泛型的类型通配符之前,我们先来研究下java在数组设计上的一个不合理.我们来看下面代码: public class Test { public stati ...
- java.lang.Thread
package java.lang; import java.lang.ref.Reference; import java.lang.ref.ReferenceQueue; import java. ...
- Android ButterKnife注解式开发
在Android开发中findViewById和setOnClickListener解脱写法. 在任意的一个类中 @Bind(R.id.et) EditText editText; @OnClick( ...
- 编译原理:基于状态转换图识别for语句
int state =0;while(state<9){ switch state{ case 0: if(ch=='f'){ state=1;getchar(ch); } case 1: if ...
- matlab文件读写处理实例(三)——读取文件特定行
(1) 读取文件特定行 CODE: ; ; if nline==line fprintf(fidout,'%s\n',tline); data ...
- Core Animation 文档翻译 (第四篇)
Core Animation 文档翻译(第四篇) 让Layer的content动画起来 核心动画的基础接口以及为拥有Layer的View做的动画扩展接口,使得为Layer制作复杂动画变得简单化.例如改 ...
- java 多维数组遍历
java 多维数组遍历的顺序的性能问题 ps:下图为java多维数组内存分布原理.出自:http://math.hws.edu/javanotes/c7/two-dimensional-array.p ...
- 隐藏C语言黑窗口
隐藏C语言程序运行的黑窗口,加入预编译命令: (预编译,Linker链接,windows模式,黑窗口是dos模式) #pragma comment(linker,"/subsystem:\& ...
- Web安全之CSP
内容安全策略(Content-Security-Policy,简称CSP) 概念: 内容安全策略(CSP)是一种web应用技术用于帮助缓解大部分类型的内容注入攻击,包括XSS攻击和数据注入等,这些攻击 ...