rabbitmq
文章平均质量分 67
无语堵上西楼
这个作者很懒,什么都没留下…
展开
-
RabbitMQ 高可用机制
普通集群,或者叫标准集群(),具备下列特征:会在集群的各个节点间共享部分数据,包括:交换机、队列元信息。不包含队列中的消息。当访问集群某节点时,如果队列不在该节点,会从数据所在节点传递到当前节点并返回。这种方式并没有做到所谓消息的高可用,就是个普通的集群,这样还会导致要么消费者每次随机连接一个实例然后拉取数据,这样的话在实例之间会产生网络传输,增加系统开销,要么固定连接那个queue所在的实例消费,这样会导致单实例的性能瓶颈。而且如果那个方queue。原创 2024-03-29 10:20:41 · 408 阅读 · 0 评论 -
MQ百万消息持续积压问题
消息积压消息积压消息积压的原因是生产者的消息生产速度大于消费者的消费速度,遇到这个问题的时候,需要排查具体的原因再提出解决方案扩容即可。可以纵向扩容,即增加服务器资源,该加内存加内存,该加CPU加CPU。如果纵向扩容不方便,那就横向扩容,即将单机改为集群模式,增加集群节点,并且增加消费者数量,让消费速度快起来!原来是5个消费者,现在变成50个消费者!通过异步的方式来处理消息、或者通过批量处理的方式来消费。原创 2024-03-29 10:02:34 · 179 阅读 · 0 评论 -
RabbitMQ 的消息如何实现路由?
它负责接收生产者的消息然后把消息路由到消息队列,而消息的路由规则由ExchangeType 和 Binding 决定。生产者发送消息的时候,需要声明一个 routingKey(路由键),Exchange拿到 routingKey 之后,根据 RoutingKey 和路由表里面的 BindingKey 进行匹配,而匹配的规则是通过ExchangeType 来决定的。其中,Exchange 是一个消息交换机,它里面定义了消息路由的规则,也就是这个消息路由到那个队列。原创 2023-11-14 16:08:17 · 140 阅读 · 0 评论 -
如何保证 RabbitMQ 的消息可靠传输
从生产者发送消息的角度来说,RabbitMQ 提供了一个 Confirm(消息确认)机制,生产者发送消息到 Server 端以后,如果消息处理成功,Server 端会返回一个 ack 消息。不过虽然设置了持久化消息,但是有可能会出现,消息刷新到磁盘之前,RabbitMQ Server 宕机导致消息丢失的问题。从消费端的角度来说,我们可以把消息的自动确认机制修改成手动确认,也就是说消费端只有手动调用消息确认方法才表示消息已经被签收。发送消息的时候,把消息投递模式设置为持久化投递。生产者发送消息的角度。原创 2023-11-14 16:20:19 · 45 阅读 · 0 评论 -
RabbitMQ 如何实现高可用
普通集群在分布式架构下,高可用是最基础的设计。也就是说,一旦依赖的某个服务出现故障,不能影响业务的正常执行。RabbitMQ 提供了两种集群模式:普通集群模式镜像集群模式普通集群这种集群模式下,各个节点只同步元数据,不同步队列中的消息。其中元数据包含队列的名称、交换机名称及属性、交换机与队列的绑定关系等。当我们发送消息和消费消息的时候,不管请求发送到 RabbitMQ 集群的哪个节点。最终都会通过元数据定位到队列所在的节点去存储以及拉取数据。原创 2023-11-14 16:33:44 · 62 阅读 · 0 评论 -
RabbitMQ消息重复的原因与解决方案
对于消息队列(MQ)来说,消息丢失/消息重复/消费顺序/消息堆积是比较常见的问题,都属于消息异常,这几个问题比较重要,面试中也会经常问到。原创 2023-11-22 16:58:03 · 1198 阅读 · 0 评论 -
RabbitMQ保证消息顺序的方案
一个queue,有多个consumer去消费,这样就会造成顺序的错误,consumer从MQ里面读取数据是有序的,但是每个consumer的执行时间是不固定的,无法保证先读到消息的consumer一定先完成操作,这样就会出现消息并没有按照顺序执行,造成数据顺序错误。一个queue对应一个consumer,但是consumer里面进行了多线程消费,这样也会造成消息消费顺序错误。原创 2023-11-22 17:06:44 · 515 阅读 · 0 评论 -
Rabbitmq的消息转换器
Spring会把你发送的消息序列化为字节发送给MQ,接收消息的时候,还会把字节反序列化为Java对象 ,只不过,默认情况下Spring采用的序列化方式是JDK序列化。众所周知,JDK序列化存在下列问题:数据体积过大有安全漏洞可读性差。原创 2023-08-29 14:42:12 · 2675 阅读 · 0 评论 -
Rabbitmq的Shovel
开启插件Federation具备的数据转发功能类似,Shovel够可靠、持续地从一个Broker中的队列作为源端,即source)拉取数据并转发至另一个Broker中的交换器作为目的端,即。作为源端的队列和作为目的端的交换器可以同时位于同一个 Broker,也可以位于不同的Broker上。Shovel可以翻译为铲子,是一种比较形象的比喻,这个"铲子可以将消息从一方铲子另一方。Shovel。原创 2023-08-27 11:31:56 · 772 阅读 · 0 评论 -
Rabbitmq的Federation Exchange
(broker北京(broker深圳彼此之间相距甚远,网络延迟是一个不得不面对的问题。有一个在北京的业务(Client北京需要连接(broker北京,向其中的交换器exchangeA发送消息,此时的网络延迟很小,(Client 北京可以迅速将消息发送至exchangeA中,就算在开启了机制或者事务机制的情况下,也可以迅速收到确认信息。此时又有个在深圳的业务(Client深圳需要向exchangeA发送消息,那么(Client深圳) (broker北京。原创 2023-08-27 09:56:15 · 1783 阅读 · 0 评论 -
RabbitMQ的镜像队列
如果RabbitMQ集群中只有一个Broker节点,那么该节点的失效将导致整体服务的临时性不可用,并且也可能会导致消息的丢失。可以将所有消息都设置为持久化,并且对应队列的durable属性也设置为true,但是这样仍然无法避免由于缓存导致的问题:因为消息在发送之后和被写入磁盘井执行刷盘动作之间存在一个短暂却会产生问题的时间窗。通过 publisherconfirm 机制能够确保客户端知道哪些消息己经存入磁盘,尽管如此,一般不希望遇到因单点故障导致的服务不可用。原创 2023-08-25 21:51:14 · 775 阅读 · 0 评论 -
RabbitMQ 集群
最开始我们介绍了如何安装及运行RabbitMQ服务,不过这些是单机版的,无法满足目前真实应用的要求。如果 RabbitMQ服务器遇到内存崩溃、机器掉电或者主板故障等情况,该怎么办?单台RabbitMQ服务器可以满足每秒 1000条消息的吞吐量,那么如果应用需要RabbitMQ服务满足每秒10万条消息的吞吐量呢?购买昂贵的服务器来增强单机RabbitMQ务的性能显得捉襟见肘,搭建一个RabbitMQ集群才是解决实际问题的关键。原创 2023-08-25 19:43:54 · 107 阅读 · 0 评论 -
springboot整合rabbitmq发布确认高级
在生产环境中由于一些不明原因,导致rabbitmq重启,在RabbitMQ重启期间生产者消息投递失败,导致消息丢失,需要手动处理和恢复。于是,我们如何才能进行 RabbitMQ的消息可靠投递。原创 2023-08-24 23:21:51 · 428 阅读 · 0 评论 -
rabbitmq卸载重新安装3.8版本
卸载前先停止rabbitmq服务查看rabbitmq安装的相关列表卸载rabbitmq相关内容。原创 2023-08-23 22:54:00 · 1908 阅读 · 0 评论 -
springboot整合rabbitmq
下载对应的版本,我的是centos 7.9的,rabbit的版本为erlang-23.3.4.18-1.el7.x86_64.rpm,rabbitmq-server-3.8.30-1.el7.noarch.rpm,对应的rabbitmq_delayed_message_exchange-3.8.17.8f537ac.ez插件版本。两个时间选项,如果需要一个小时后处理,那么就需要增加。的方式,消息可能并不会按时“死亡“,因为。不过,如果这样使用的话,岂不是。,如果过期则丢到死信队列,时间,设置TTL消息。原创 2023-08-23 19:01:11 · 404 阅读 · 0 评论 -
rabbitmq的死信队列
producer将消息投递到broker或者直接到queue里了,consumer从queue取出消息进行消费,但某些时候由于特定的,这样的消息如果没有后续的处理,就变成了死信,有死信自然就有了死信队列。原创 2023-08-17 22:03:12 · 923 阅读 · 0 评论 -
rabbitmq的发布确认
生产者将信道设置成 confirm 模式,一旦信道进入 confirm 模式,(从 1 开始),一旦消息被投递到所有匹配的队列之后,broker就会发送一个确认给生产者(包含消息的唯一 ID),这就使得生产者知道消息已经正确到达目的队列了,如果消息和队列是可持久化的,那么确认消息会在将消息写入磁盘之后发出,broker 回传给生产者的确认消息中 delivery-tag 域包含了确认消息的序列号,此外 broker 也可以设置。原创 2023-08-17 21:00:00 · 897 阅读 · 0 评论 -
rabbitmq的持久化
一旦数量达到配置的数量,RabbitMQ 将停止在通道上传递更多消息,除非至少有一个未处理的消息被确认,例如,假设在通道上有未确认的消息 5678,并且通道的预取计数设置为4,此时RabbitMQ将不会在该通道上再传递任何消息,除非至少有一个未应答的消息被 ack。比方说tag=6这个消息刚刚被确认ACKRabbitMQ将会感知这个情况到并再发送一条消息。消息应答和 QoS预取值对用户吞吐量有重大影响。通常,增加预取将提高向消费者传递消息的速度。原创 2023-08-14 08:51:47 · 798 阅读 · 0 评论 -
rabbitmq的消息应答
消费者完成一个任务可能需要一段时间,如果其中一个消费者处理一个长的任务并仅只完成了部分突然它挂掉了,会发生什么情况。RabbitMQ 一旦向消费者传递了一条消息,便立即将该消息标记为删除。在这种情况下,突然有个消费者挂掉了,我们将丢失正在处理的消息。以及后续发送给该消费这的消息,因为它无法接收到。原创 2023-08-14 08:27:41 · 1602 阅读 · 0 评论 -
初试rabbitmq
实际上,通常生产者甚至都不知道这些消息传递传递到了哪些队列中。RabbitMQ 消息传递模型的核心思想是。总共有以下类型: 直接(direct),getChannel的工具类。接收者2,打印控制台信息。接收者1 ,写入错误日志。线程1和线程2平分消息。原创 2023-08-13 23:37:12 · 867 阅读 · 0 评论