RabbitMQ

精通SpringBoot---整合RabbitMQ消息队列

孤者浪人 提交于 2020-04-27 20:33:55
今天来和朋友们一起学习下,SpringBoot怎么整合RabbitMQ。目前消息组件大致有三种:.activemq, rabbitmq, kafka。这三者各有优缺点,RabbitMQ相比之下是处于其他二者之间的一个消息组件。RabbitMQ依赖于erlang,在linux下安装的话,要先安装erlang环境。下面来看看怎么SpringBoot 怎么整合RabbitMQ吧。 想要使用RabbitMQ ,pom依赖是少不了的~ <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> 2.再来看看 application.yml 文件的内容 spring: rabbitmq: username: rabbit password: 123456 host: localhost port: 5672 virtual-host: / #手动ACK 不开启自动ACK模式,目的是防止报错后未正确处理消息丢失 默认 为 none listener: simple: acknowledge-mode: manual RabbitMQConfig的内容(注册) import org.springframework

Spring Boot 揭秘与实战之RabbitMQ

喜夏-厌秋 提交于 2020-04-27 20:30:07
Spring Boot 整合 RabbitMQ Spring Boot 整合 RabbitMQ 是非常容易,只需要两个步骤。 首先,在 pom.xml 中增加 RabbitMQ 依赖。 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> 第二步,在 src/main/resources/application.properties 中配置信息。 #rabbitmq spring.rabbitmq.host=localhost spring.rabbitmq.port=5672 spring.rabbitmq.username=guest spring.rabbitmq.password=guest 实战演练 一个简单的实战开始 我们来实现一个简单的发送、接收消息。 Configuration 在 Spring Boot 中使用 @Bean 注册一个队列。 @Configuration public class RabbitMQConfig { public static final String QUEUE_NAME = "spring-boot-simple"; @Bean public

SpringBoot与RabbitMQ进行整合

蹲街弑〆低调 提交于 2020-04-27 19:59:52
准备: 1.RabbitMQ安装(我是在window环境下安装的)。 安装完成之后进入登录页面配置,默认地址:http://localhost:15672 2.创建一个SpringBoot项目。 配置文件: #rabbitmq rabbitmq: host: 127.0.0.1 port: 5672 username: root password: 123456 virtual -host: / publisher -confirms: true publisher -returns: true listener: simple: acknowledge - mode: none concurrency: 1 max -concurrency: 1 retry: enabled: false java代码 RabbitMQ配置: /** * 消息列队配置 * * @author My */ @Component public class RabbitmqConfig { private Logger logger = LoggerFactory.getLogger(RabbitmqConfig. class ); @Autowired private RabbitTemplate rabbitTemplate; // 消息交换机 public final static String

【面试突击】-RabbitMQ常见面试题(三)

╄→尐↘猪︶ㄣ 提交于 2020-04-27 19:40:00
1、什么是RabbitMQ?为什么使用RabbitMQ? 答:RabbitMQ是一款开源的,Erlang编写的,基于AMQP协议的,消息中间件; 可以用它来:解耦、异步、削峰。 2、RabbitMQ有什么优缺点? 答:优点:解耦、异步、削峰; 缺点:降低了系统的稳定性:本来系统运行好好的,现在你非要加入个消息队列进去,那消息队列挂了,你的系统不是呵呵了。因此,系统可用性会降低; 增加了系统的复杂性:加入了消息队列,要多考虑很多方面的问题,比如:一致性问题、如何保证消息不被重复消费、如何保证消息可靠性传输等。因此,需要考虑的东西更多,复杂性增大。 3、如何保证RabbitMQ的高可用? 答:没有哪个项目会只用一搭建一台RabbitMQ服务器提供服务,风险太大; 4、如何保证RabbitMQ不被重复消费? 答:先说为什么会重复消费:正常情况下,消费者在消费消息的时候,消费完毕后,会发送一个确认消息给消息队列,消息队列就知道该消息被消费了,就会将该消息从消息队列中删除; 但是因为网络传输等等故障,确认信息没有传送到消息队列,导致消息队列不知道自己已经消费过该消息了,再次将消息分发给其他的消费者。 针对以上问题,一个解决思路是:保证消息的唯一性,就算是多次传输,不要让消息的多次消费带来影响;保证消息等幂性; 比如:在写入消息队列的数据做唯一标示,消费消息时,根据唯一标识判断是否消费过; 5

2019年12道RabbitMQ高频面试题你都会了吗?(含答案解析)

狂风中的少年 提交于 2020-04-27 18:57:32
RabbitMQ 面试题 1、什么是 rabbitmq 2、为什么要使用 rabbitmq 3、使用 rabbitmq 的场景 4、如何确保消息正确地发送至 RabbitMQ? 如何确保消息接收方消费了消息? 5.如何避免消息重复投递或重复消费? 6、消息基于什么传输? 7、消息如何分发? 8、消息怎么路由? 9、如何确保消息不丢失? 10、使用 RabbitMQ 有什么好处? 11、RabbitMQ 的集群 12、mq 的缺点 1、什么是 rabbitmq 采用 AMQP 高级消息队列协议的一种消息队列技术,最大的特点就是消费并不需要确保提供方存在,实现了服务之间的高度解耦 2、为什么要使用 rabbitmq (1)在分布式系统下具备异步,削峰,负载均衡等一系列高级功能; (2)拥有持久化的机制,进程消息,队列中的信息也可以保存下来。 (3)实现消费者和生产者之间的解耦。 (4)对于高并发场景下,利用消息队列可以使得同步访问变为串行访问达到一定量的限流,利于数据库的操作。 (5)可以使用消息队列达到异步下单的效果,排队中,后台进行逻辑下单。 3、使用 rabbitmq 的场景 (1)服务间异步通信 (2)顺序消费 (3)定时任务 (4)请求削峰 4、如何确保消息正确地发送至 RabbitMQ? 如何确保消息接收方消费了消息? 发送方确认模式 将信道设置成 confirm 模式

RabbitMQ消息投递、可靠性传输、重复消费、消息的顺序性等问题

孤街浪徒 提交于 2020-04-27 18:55:37
1、什么是RabbitMQ?为什么要使用RabbitMQ? <br>          RabbitMQ是一款开源的、Erlang语言编写的、基于AMQP协议的消息中间件。<br>          解耦:实现消费者和生产者之间的解耦<br>          异步:将消息写入消息队列,非必要的业务逻辑以异步的方式运行,加快响应速度<br>          削峰:将高并发时的同步访问变为串行访问达到一定量的限流,利于数据库的操作<br> <br> 2、RabbitMQ的使用场景? <br>          1、服务间异步通信<br>          2、顺序消费<br>          3、定时任务<br>          4、请求削峰<br> <br> 3、RabbitMQ的优缺点? <br>          优点:服务间高度解耦、异步通信性能高、流量削峰填谷。<br> 缺点:系统可用性降低:比如在系统中引入MQ,那么万一MQ挂了怎么办呢?一般而言,引入的外部依赖越多,系统越脆弱,每一个依赖出问题都会导致整个系统的崩溃;<br> 系统复杂度提高:要考虑MQ的各种情况,比如:消息的重复消费、消息丢失、保证消费顺序等等;<br> 一致性问题:假设A系统依赖BCD,A已经给用户返回操作成功,这时候操作BC都成功了,操作D却失败了,会导致数据不一致。 <br> 4

Spring Cloud Stream(十三)

只谈情不闲聊 提交于 2020-04-27 17:02:54
说明 对Spring Boot 和 Spring Integration的整合,通过Spring Cloud Stream能够简化消息中间件使用的复杂难度!让业务人员更多的精力能够花在业务层面 简单例子 consumer 1.创建一个一个项目名为spring-cloud-stream-consumer 2.引入pom依赖 < dependency > < groupId > org.springframework.cloud </ groupId > < artifactId > spring-cloud-starter-stream-rabbit </ artifactId > </ dependency > 3.yml配置 spring: application: name: streamConsumer rabbitmq: #更多mq配置看书331页 username: liqiang password: liqiang host: localhost port: 5672 server: port: 8081 5.创建消息监听类 // 实现对定义了多个@Input和@Output的接口实现对通道的绑定 Sink定义了@Input 我们自己处理时是自己定义接口 @EnableBinding(Sink. class ) public class

饿了么交易系统 5 年演化史

时间秒杀一切 提交于 2020-04-27 15:51:29
个人简介: 2014年12月加入饿了么,当时参与后台系统的研发(Walis+Javis=>Walle),主要面向客服和BD。 2015年5月开始接触订单系统的研发,7月负责订单研发组;度过单体应用到服务化这个阶段。 2016年初搭建订单的测试团队,订单拆分为正逆向后,主要负责正向和交付部分。 2017年做了一些平台搭建的探索。 2018年初负责整个订单正逆向和交付,年中将下单、购物车部分一起归并,年底和商户订单部分整合,形成交易中台。 2019年10月从交易中台转出,近期做了一小段时间的组织效能和架构。 我为什么会写这篇文章,究其缘由: 一是自己在交易域做了 4 年,有很多只有我才知道,才能串起来的故事,想把这些记录并保留下来。 二是发现后边的很多同学看交易体系时,一接触就是分布式、SOA、每日百万、千万数据量,只知道它是这个样子,很难理解背后的思考和缘由。伴随自己这几年的经验,想让大家能够更容易的理解这个演化过程的原因和历程,有甘有苦。 三是很多总结也好,方法论也好,更多是去除了“糟粕”呈现在大家面前,这里可能会稍微加一点“毒鸡汤”,现实不一定那么美好,我们有很多抉择,现在回过头来看,也许是庆幸,也许是错误。 这篇文章希望通过一些发展的故事和思考来给读者呈现整个历程,大家可以看到非常多野蛮生长的痕迹,并会附带一些思考和总结,但不会像快餐式的总结很多大道理。

rabbitmq生产者的消息确认

荒凉一梦 提交于 2020-04-27 08:49:46
通过Publisher Confirms and Returns机制,生产者可以判断消息是否发送到了exchange及queue,而通过消费者确认机制,Rabbitmq可以决定是否重发消息给消费者,以保证消息被处理。 1.什么是Publisher Confirms and Returns? Delivery processing acknowledgements from consumers to RabbitMQ are known as acknowledgements in AMQP 0-9-1 parlance; broker acknowledgements to publishers are a protocol extension called publisher confirms. 地址: http://www.rabbitmq.com/confirms.html 根据RabbitMq官网定义,rabbitmq代理(broker)对发布者(publishers)的确认被称作发布者确认(publisher confirms),这种机制是Rabbitmq对标准Amqp协议的扩展。因此通过这种机制可以确认消息是否发送给了目标。 2.如何通过Spring amqp来使用Publisher Confirms and Returns机制? Confirmed and

Redis与RabbitMQ作为消息队列的比较

只愿长相守 提交于 2020-04-27 04:00:04
简要介绍 RabbitMQ RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。 Redis 是一个Key-Value的NoSQL数据库,开发维护很活跃,虽然它是一个Key-Value数据库存储系统,但它本身支持MQ功能,所以完全可以当做一个轻量级的队列服务来使用。 具体对比 可靠消费 Redis:没有相应的机制保证消息的消费,当消费者消费失败的时候,消息体丢失,需要手动处理 RabbitMQ:具有消息消费确认,即使消费者消费失败,也会自动使消息体返回原队列,同时可全程持久化,保证消息体被正确消费 可靠发布 Reids:不提供,需自行实现 RabbitMQ:具有发布确认功能,保证消息被发布到服务器 高可用 Redis:采用主从模式,读写分离,但是故障转移还没有非常完善的官方解决方案 RabbitMQ:集群采用磁盘、内存节点,任意单点故障都不会影响整个队列的操作 持久化 Redis:将整个Redis实例持久化到磁盘 RabbitMQ:队列,消息,都可以选择是否持久化 消费者负载均衡 Redis:不提供,需自行实现 RabbitMQ:根据消费者情况,进行消息的均衡分发 队列监控 Redis