![](https://img-blog.csdnimg.cn/direct/6335ea972eb4422d99033e43bdcd8c8f.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
RabbitMQ 内容分享
文章平均质量分 93
RabbitMQ 是由 Erlang 语言开发,基于 AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列,它是一种应用程序之间的通信方法,消息队列在分布式系统开发中应用非常广泛。
之乎者也·
机车疾驰在路上,代码飞舞在指尖,热血与逻辑交织,创造属于我的数字世界。
展开
-
JAVA面试题分享二百:RabbitMQ 其他知识点
幂等性概念用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。举个最简单的例子,那就是支付,用户购买商品后支付,支付扣款成功,但是返回结果的时候网络异常,此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果成功,用户查询余额发现多扣钱了,流水记录也变成了两条。在以前的单应用系统中,我们只需要把数据操作放入事务中即可,发生错误立即回滚,但是再响应客户端的时候也有可能出现网络中断或者异常等等。可以理解为验证码,只能输入一次,再次重新输入会刷新验证码,原来原创 2023-12-06 10:01:40 · 885 阅读 · 0 评论 -
JAVA面试题分享一百九十九:RabbitMQ 发布确认高级
在生产环境中由于一些不明原因,导致 RabbitMQ 重启,在 RabbitMQ 重启期间生产者消息投递失败,导致消息丢失,需要手动处理和恢复。于是,我们开始思考,如何才能进行 RabbitMQ 的消息可靠投递呢?首先发布消息后进行备份在缓存里,如果消息成功发布确认到交换机,则从缓存里删除该消息,如果没有成功发布,则设置一个定时任务,重新从缓存里获取消息发布到交换机,直到成功发布到交换机。获取回退的消息,首先在配置文件开启该功能,然后需要自定义类实现。原创 2023-12-06 09:51:50 · 936 阅读 · 0 评论 -
JAVA面试题分享一百九十八:RabbitMQ 延迟队列
延时队列,队列内部是有序的,最重要的特性就体现在它的延时属性上,延时队列中的元素是希望 在指定时间到了以后或之前取出和处理,简单来说,延时队列就是用来存放需要在指定时间被处理的 元素的队列。订单在十分钟之内未支付则自动取消新创建的店铺,如果在十天内都没有上传过商品,则自动发送消息提醒用户注册成功后,如果三天内没有登陆则进行短信提醒用户发起退款,如果三天内没有得到处理则通知相关运营人员预定会议后,需要在预定的时间点前十分钟通知各个与会人员参加会议。原创 2023-12-06 09:42:12 · 801 阅读 · 0 评论 -
JAVA面试题分享一百九十七:RabbitMQ 死信队列
先从概念解释上搞清楚这个定义,死信,顾名思义就是无法被消费的消息,字面意思可以这样理解,一般来说,producer 将消息投递到 broker 或者直接到queue 里了,consumer 从 queue 取出消息 进行消费,但某些时候由于特定的原因。先启动消费者 C1,创建出队列,然后停止该 C1 的运行,则 C1 将无法收到队列的消息,无法收到的消息 10 秒后进入死信队列。,这样的消息如果没有后续的处理,就变成了死信,有死信自然就有了死信队列。1、消息生产者代码去掉 TTL 属性,原创 2023-12-06 09:38:02 · 852 阅读 · 1 评论 -
JAVA面试题分享一百九十六:RabbitMQ 交换机
上一节中的我们的日志系统将所有消息广播给所有消费者,对此我们想做一些改变,例如我们希望将日志消息写入磁盘的程序仅接收严重错误(errros),而不存储哪些警告(warning)或信息(info)日志 消息避免浪费磁盘空间。Fanout 这种交换类型并不能给我们带来很大的灵活性-它只能进行无意识的广播,在这里我们将使用 direct 这种类型来进行替换,这种类型的工作方式是,消息只去到它绑定的 routingKey 队列中去。在上面这张图中,我们可以看到 X 绑定了两个队列,绑定类型是 direct。原创 2023-12-06 09:34:43 · 936 阅读 · 0 评论 -
JAVA面试题分享一百九十五:RabbitMQ 消息应答与发布
在最开始的时候我们学习到 RabbitMQ 分发消息采用的轮询分发,但是在某种场景下这种策略并不是很好,比方说有两个消费者在处理任务,其中有个消费者 1处理任务的速度非常快,而另外一个消费者 2处理速度却很慢,这个时候我们还是采用轮询分发的化就会到这处理速度快的这个消费者很大一部分时间处于空闲状态,而处理慢的那个消费者一直在干活,这种分配方式在这种情况下其实就不太好,但是 RabbitMQ 并不知道这种情况它依然很公平的进行分发。为了避免这种情况,在消费者中消费消息之前,设置参数//队列名称。原创 2023-12-06 09:02:27 · 848 阅读 · 0 评论 -
JAVA面试题分享一百九十四:RabbitMQ 入门案例
通过程序执行发现生产者总共发送 4 个消息,消费者 first 和消费者 second 分别分得两个消息,并且是按照有序的一个接收一次消息。在下图中,“ P” 是我们的生产者,“ C” 是我们的消费者。案例中生产者叫做 Task,一个消费者就是一个工作队列,启动两个工作队列消费消息,这个两个工作队列会以轮询的方式消费消息。轮询消费消息指的是轮流消费消息,即每个工作队列都会获取一个消息进行消费,并且获取的次数按照顺序依次往下轮流。创建一个类作为消费者,消费 RabbitMQ 队列的消息。原创 2023-12-05 14:15:19 · 813 阅读 · 0 评论 -
JAVA面试题分享一百九十三:RabbitMQ 安装
RabbitMQ 是采用 Erlang 语言开发的,所以系统环境必须提供 Erlang 环境,需要先安装 Erlang。安装包,分别是 RabbitMQ 安装包和 Erlang 环境安装包,后者提供环境给前者运行。这里安装的是 3.8.8 版本的 RabbitMQ,需要的 Erlang 版本依然是21.3。默认情况下,RabbiMQ 没有安装 Web 端的客户端软件,需要安装才可以生效。安装好这个后,再次安装 Erlang 即可成功。登录,输入添加好的用户名和密码,即可进入后台。原创 2023-12-05 14:14:11 · 753 阅读 · 0 评论 -
JAVA面试题分享一百九十二:RabbitMQ 介绍
Broker:接收和分发消息的应用,RabbitMQ Server 就是 Message Broker:出于多租户和安全因素设计的,把 AMQP 的基本组件划分到一个虚拟的分组中,类似于网络中的 namespace 概念。当多个不同的用户使用同一个 RabbitMQ server 提供的服务时,可以划分出多个 vhost,每个用户在自己的 vhost 创建 exchange/queue 等Connection:publisher/consumer 和 broker 之间的 TCP 连接Channel。原创 2023-12-05 12:38:10 · 898 阅读 · 0 评论 -
JAVA面试题分享一百九十一:MQ的相关概念
MQ(message queue),从字面意思上看,本质是个队列,FIFO 先入先出,只不过队列中存放的内容是 message 而已,还是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中,MQ 是一种非常常 见的上下游「逻辑解耦 + 物理解耦」的消息通信服务。使用了 MQ 之后,消息发送上游只需要依赖 MQ,不用依赖其他服务。原创 2023-12-05 12:34:58 · 876 阅读 · 0 评论