
《RabbitMQ系列》
文章平均质量分 71
围绕RabbitMQ工作模式、Spring整合RabbitMQ、SpringBoot整合RabbitMQ、TTL队列、死信队列、延迟队列、队列限流、消息幂等、消息可靠发布等知识点讲解
緑水長流*z
一个专注于编写自学教程的博主;热衷于分享当下热门的技术~
展开
-
《RabbitMQ系列教程-第十三章-消息的幂等性》
消息的幂等性13.1 幂等简介幂等性:用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用,例如用户在下订单时,由于网络卡顿等原因多次点击下单按钮,但最终订单只生成了一个,并不会多次下订单;消息幂等性:即消息无论被发送多少次,最终只会消费一次。保证消息不会重复被消费多次;13.1.1 方案实现消息的幂等性通常有两种方案来解决:全局消息ID、Redis标识,两种方案从原理上讲都是一样的;全局消息ID:发送消息时给消息分配一个全局ID,每次消费消息时判断该ID是原创 2021-01-06 11:15:25 · 457 阅读 · 1 评论 -
《RabbitMQ系列教程-第十二章-SpringBoot整合RabbitMQ高级特性》
SpringBoot整合RabbitMQ高级特性我们在实际开发中,一般使用的是SpringBoot来开发,因此这一章我们主要采用SpringBoot来实现RabbitMQ的高级特性,顺便回顾一下之前学的知识;首先先准备一个SpringBoot整合RabbitMQ的环境(参考上述案例)12.1 消息确认机制12.1.1 确认模式概念:当消息发送后会有不管发送成功与否都会进入Producer端的一个回调,回调中的参数说明了此次消息发送成功与否回顾Spring环境下如何开启确认模式:1、在Conne原创 2021-01-06 11:11:17 · 5935 阅读 · 2 评论 -
《RabbitMQ系列教程-第十一章-RabbitMQ之队列限流》
RabbitMQ之队列限流我们在之前讲MQ好处的时候就说过MQ可以做流量削峰,当网站承受的压力已经到达极限时,我们可以采用MQ来进行限流操作11.1 案例测试11.1.1配置spring.xml:一般情况下,队列限流设置为手动签收<!-- 定义监听器容器 <rabbit:listener-container connection-factory="connectionFactory" acknowledge="none" prefetch="1" >原创 2021-01-06 11:10:46 · 475 阅读 · 0 评论 -
《RabbitMQ系列教程-第十章-RabbitMQ之延时队列》
RabbitMQ之延时队列有时候我们希望消息到达之后不会被立即消费,而是等到指定的时间进行消费,这个时候我们就可以利用延时队列来完成我们的功能延时队列的应用场景:1)下一个订单,如果10分钟后还未支付,那么修改其订单状态2)当用户3天未登录,进行登录提醒、礼包赠送等3)开启一个会议后,会议达到开始时间时自动更改状态在RabbitMQ中,我们可以借助TTL+死信队列来完成延时队列的效果延时队列很大程度上解决了我们以前定时器的功能,定时器通常采用每秒、每分钟轮询方式进行,这样不仅效率低,对数据库原创 2021-01-06 11:10:19 · 324 阅读 · 0 评论 -
《RabbitMQ系列教程-第九章-RabbitMQ之死信队列》
RabbitMQ之死信队列9.1.1 简介死信:Dead Letter,缩写DL;当一条正常的消息变成为"死信"时,会被RabbitMQ进行特殊处理,如果配置了死信队列信息,那么该消息将会被丢进死信队列中,如果没有配置,则该消息将会被丢弃。消息什么情况下会变为死信?1)当使用 channel.basicNack 或 channel.basicReject 拒绝签收消息,并且此时requeue 属性被设置为false时;2)当消息设置了TTL,并且已经到达时间时;3)消息队列中的消息数量已经到达原创 2021-01-06 11:09:58 · 363 阅读 · 2 评论 -
《RabbitMQ系列教程-第八章-RabbitMQ之TTL队列》
RabbitMQ之TTL队列TTL:全称Time To Live,表示过期时间、存活时间,TTL队列顾名思义就是带有存活时间的队列,在RabbitMQ中,可以对队列或者消息设置过期时间;设置了TTL的Queue中的消息到达TTL时间之前没有被消费将自动删除;在发布消息的时候也可以针对这条消息设置TTL,当队列和消息都设置了TTL时,以时间短的为准;8.1.1 给队列设置TTL配置spring.xml:<!--声明一个队列--><rabbit:queue name="test_qu原创 2021-01-06 11:09:34 · 693 阅读 · 1 评论 -
《RabbitMQ系列教程-第四章-00-RabbitMQ工作模式》
第四章 RabbitMQ工作模式在RabbitMQ中共提供有6种工作模式,分别为Simple、work、Pub/Sub、Routing、Topics、RPC、Publisher Confirms,不同的工作模式具有不同的消息分发规则;接下来我们详细介绍着7种交换模式;...原创 2021-01-06 11:07:04 · 333 阅读 · 0 评论 -
《RabbitMQ系列教程-第七章-04-RabbitMQ的Consumer Ack》
RabbitMQ的Consumer Ack当Consumer端接受到一个消息进行消费时,如果消费失败了我们希望此次消息就应该定义为"消费失败",也就是这条消息我们希望拒绝签收,Consumer的Ack机制可以根据Consumer的消费情况来决定此次消息时签收还是拒绝签收;RabbitMQ中提供有3种消息签收方式:1)none:自动签收(消息被消费就自动签收)2)manual:手动签收(需要调用basicNack或 basicReject方法手动签收)3)auto:由rabbitmq来决原创 2021-01-05 15:28:28 · 369 阅读 · 0 评论 -
《RabbitMQ系列教程-第七章-03-消息确认机制之事务处理模式》
消息确认机制之事务处理模式RabbitMQ提供有事务处理机制,在一个事务中,多条消息要么全部发送成功,要么全部发送失败编写spring.xml配置文件:在spring配置文件中配置事务管理器<!--平台事务管理器--><bean id="transactionManager" class="org.springframework.amqp.rabbit.transaction.RabbitTransactionManager"> <property name=原创 2021-01-05 15:28:11 · 326 阅读 · 0 评论 -
《RabbitMQ系列教程-第七章-02-消息确认机制之回退模式》
消息确认机制之回退模式在回退模式中,当Producer发送消息之后,队列无法接受到消息时,触发回调函数配置spring.xml开启回退模式:在connectionFactory中开启确认模式publisher-returns="true"<!-- 定义rabbitmq connectionFactory publisher-confirms="true": 开启确认模式 publisher-returns="true": 开启回退模式-->原创 2021-01-05 15:27:50 · 516 阅读 · 0 评论 -
《RabbitMQ系列教程-第七章-01-消息确认机制之确认模式》
消息确认机制之确认模式在确认模式中,当Producer发送消息之后,不管是否到达队列(交换机)都会触发Producer端的一个回调函数,在回调函数参数中能够判断此次消息是否发送成功,我们可以根据反馈的信息来做相应的处理搭建消息生产者;采用RabbitMQ整合Spring环境(参考前面工程)编写spring.xml配置文件:开启确认模式:在connectionFactory中开启确认模式publisher-confirms="true"<?xml version="1.0" encoding=原创 2021-01-05 15:27:32 · 384 阅读 · 0 评论 -
《RabbitMQ系列教程-第七章-00-消息确认机制》
第七章 消息确认机制我们知道MQ中存在Producer(生产者)和Consumer(消费者),正常情况下Producer发送的消息Consumer都能够接受的到,但是可能由于某种原因导致Producer发送的消息Consumer并没有接收到,那么此时对于消息投递的可靠性是我们需要保障的;在RabbitMQ中提供有三种模式来保障我们消息的可靠传递:确认模式、回退模式、事务处理模式...原创 2021-01-05 15:27:09 · 359 阅读 · 0 评论 -
《RabbitMQ系列教程-第六章-SpringBoot整合RabbitMQ》
第六章 SpringBoot整合RabbitMQ6.1 搭建消息生产者6.1.1 pom.xml:<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.原创 2021-01-05 15:26:22 · 384 阅读 · 2 评论 -
《RabbitMQ系列教程-第五章-Spring整合RabbitMQ》
五、Spring整合RabbitMQ5.1 搭建消息生产者pom.xml:<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/P原创 2021-01-05 15:25:51 · 291 阅读 · 0 评论 -
《RabbitMQ系列教程-第四章-08-Header类型交换机》
RabbitMQ工作模式之Header类型交换机4.8.1 简介关于RabbitMQ官网提供的所有交换模式我们都已经介绍完毕了,唯独还有一个header类型的交换机没有介绍,那header类型的交换机又有什么作用呢?header类型的Exchange与Routing有点类似,不同的是,header类型的Exchange取消了Routing Key,使用key/value来匹配队列header的匹配有两种方式,一种是all另一种是any。这两种方式是在接收端必须要用键值"x-mactch"来定义。原创 2021-01-05 15:24:48 · 833 阅读 · 0 评论 -
《RabbitMQ系列教程-第四章-07-RabbitMQ工作模式之Publisher Confirms 模式》
4.7 RabbitMQ工作模式之Publisher Confirms 模式Publisher Confirms(发布者确认)模式是一个RabbitMQ扩展,用于实现消息可靠发布。消息的确认机制在后续的章节会详细介绍,本章暂时不做简介原创 2021-01-05 15:24:33 · 381 阅读 · 0 评论 -
《RabbitMQ系列教程-目录大纲》
RabbitMQ系列教程-目录大纲 RabbitMQ 初级 《RabbitMQ系列教程-第一章-消息中间件简介》《RabbitMQ系列教程-第二章-RabbitMQ简介》《RabbitMQ系列教程-第三章-RabbitMQ快速入门》《RabbitMQ系列教程-第四章-01-RabbitMQ工作模式之Simple模式》《RabbitMQ系列教程-第四章-02-RabbitMQ工作模式之Work模式》《RabbitMQ系列教程-第四章-03-RabbitMQ工作模式之Pu原创 2021-01-05 09:18:29 · 3879 阅读 · 7 评论 -
《RabbitMQ系列教程-第四章-06-RabbitMQ工作模式之RPC模式》
RabbitMQ工作模式之RPC模式4.6.1 简介前面几种模式的通信都是基于Producer发送消息到Consumer,然后Consumer进行消费,假设我们需要Consumer操作完毕之后返回给Producer一个回调呢?前面几种模式就行不通了;例如我们要做一个远程调用加钱操作,客户端远程调用服务端进行加钱操作,操作完毕之后服务端将用户最新的余额返回给客户端;客户端进行后续操作,例如更新到数据库等;在RPC模式中,客户端和服务器都是Producer也都是Consumer;RPC模式官网介绍原创 2021-01-04 18:52:58 · 632 阅读 · 0 评论 -
《RabbitMQ系列教程-第四章-05-RabbitMQ工作模式之Topics主题模式》
RabbitMQ工作模式之Topics主题模式4.5.1 简介在Routing模式下,一个Exchange绑定Queues时可以指定Routing Key,但Routing Key都是固定的值,如果想要通配符的匹配(类似于模糊匹配)我们就得使用Topics模式了,例如red开头的Routing key我都进行消息路由,以green结尾的Routing key的我都进行消息路由等;Topics模式强调的是topic模式的Exchange,Topics模式也叫主题模式,该模式下的Exchange在绑定Q原创 2021-01-04 18:52:32 · 389 阅读 · 1 评论 -
《RabbitMQ系列教程-第四章-04-RabbitMQ工作模式之Routing路由模式》
RabbitMQ工作模式之Routing路由模式4.4.1 简介刚刚我们说的Pub/Sub订阅模式中介绍了Exchange,Exchange有四种类型(direct、topic、headers、fanout),Pub/Sub订阅强调的是Fanout类型的Exchange,Routing模式则强调的是Exchange的direct模式,Routing模式也叫直连模式;Routing模式官网介绍:https://www.rabbitmq.com/tutorials/tutorial-four-java原创 2021-01-04 18:52:04 · 429 阅读 · 3 评论 -
《RabbitMQ系列教程-第四章-03-RabbitMQ工作模式之Pub/Sub发布订阅模式》
RabbitMQ工作模式之Pub/Sub发布订阅模式4.3.1 简介在发布订阅模式中,Producer发送消息到指定的交换机(Exchange)中,由Exchange绑定不同的Queues,消费者依旧监听这些队列进行消费(work模式使用的是默认的交换机)tips:交换机(Exchange)只负责将消息转发到绑定的队列(Queues)中,不会存储消息,如果Exchange没有绑定Queues或者Exchange不能将消息路由到指定的Queues中时,此消息将会丢失;一个Exchange可以有d原创 2021-01-04 18:51:39 · 540 阅读 · 1 评论 -
《RabbitMQ系列教程-第四章-02-RabbitMQ工作模式之Work模式》
RabbitMQ工作模式之Work模式4.2.1 简介Work模式与Simple模式几乎是一模一样的,只不过我们在只有一个Producer和一个Consumer时习惯把这种模式成为Simple模式,而当一个Producer有多个Consumer时我们把这样的模式成为Work模式,因此Work模式和Simple模式的代码是一模一样的,只不过是多个Consumer监听同一个队列而已;Work模式官网介绍:https://www.rabbitmq.com/tutorials/tutorial-two-j原创 2021-01-04 18:50:46 · 547 阅读 · 0 评论 -
《RabbitMQ系列教程-第四章-01-RabbitMQ工作模式之Simple模式》
RabbitMQ工作模式之Simple模式4.1.1 简介simple模式就是我们之前做的快速入门案例简单模式中表现为一个生产者对应一个消费者,生产者(Producer)生产消息发送到队列,消费者(Consumer)监听此队列,进行消息的消费;Simple模式官网介绍:https://www.rabbitmq.com/tutorials/tutorial-one-java.html4.1.2 生产者package com.lscl.rabbitmq;import com.rabbitm原创 2021-01-04 18:50:15 · 581 阅读 · 1 评论 -
《RabbitMQ系列教程-第三章-RabbitMQ快速入门》
第三章 RabbitMQ快速入门3.1 消息生产者pom.xml:<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4原创 2021-01-04 18:47:12 · 609 阅读 · 0 评论 -
《RabbitMQ系列教程-第二章-RabbitMQ简介》
第二章 RabbitMQ简介RabbitMQ 是一个由 Erlang 语言开发的 AMQP 的开源实现。AMQP :Advanced Message Queue Potocal,高级消息队列协议。它是应用层协议的一个开放标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受产品、开发语言等条件的限制。RabbitMQ最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。2.1 RabbitMQ架构RabbitMQ内部架构图:Produ原创 2021-01-04 18:46:41 · 626 阅读 · 0 评论 -
《RabbitMQ系列教程-第一章-消息中间件简介》
第一章 消息中间件简介1.1 概述MQ全称为Message Queue,消息队列是消息在传递过程中的容器,消息队列常用于分布式系统之间的通信消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题实现高性能,高可用,可伸缩和最终一致性架构;使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ以下介绍消息队列在实际应用中常用的使用场景:异步处理,应用解耦,流量削锋和消息通讯四个场景1.2 消息中间件的好处在项目中,原创 2021-01-04 18:45:11 · 3490 阅读 · 1 评论 -
Linux安装RabbitMQ
Linux安装RabbitMQRabbitMQ是Erlang语言基于AMQP协议开发的,因此我们必须首先安装Erlang的运行环境RabbitMQ官网:https://www.rabbitmq.com/1)在线安装依赖指令:yum install -y gcc gcc-c++ wget2)安装# 安装依赖包rpm -ivh socat-1.7.3.2-1.1.el7.x86_64.rpm --force --nodeps# 安装erlangrpm -ivh erlang-18.3-1.原创 2021-01-04 18:44:28 · 358 阅读 · 0 评论