ToB企服应用市场:ToB评测及商务社交产业平台

标题: RabbitMQ [打印本页]

作者: 篮之新喜    时间: 2024-10-26 20:16
标题: RabbitMQ
RabbitMQ 是一个强大的消息队列系统,基于 AMQP(高级消息队列协议),广泛应用于各种分布式系统中。
RabbitMQ 组件

生产者(Producer)


交换机(Exchange)


队列(Queue)


消耗者(Consumer)


Broker


RabbitMQ 消息传递模型

RabbitMQ 的消息传递模型基于以下几个关键概念:
消息


路由键(Routing Key)


绑定(Binding)


交换机类型


工作原理

消息流转过程

消息持久化



如何包管消息不丢失

发送者消息不丢失

持久化消息: 在发送消息时,生产者可以将消息设置为持久化,通过将 delivery_mode 属性设置为 2,这样即使 RabbitMQ 服务器崩溃,持久化的消息依然会被保存
持久化队列:队列自己也应声明为持久化(durable),确保队列在 RabbitMQ 重启时仍然存在
确认机制(Publisher Confirms)

异常处理与重试机制:在发送消息时,要捕捉可能的异常,并根据需要举行重试。可以实现一个重试机制,在发送失败时重新尝试发送消息。
消耗者消息不丢失

手动消息确认(Manual Acknowledgments):消耗者在处理完消息后手动发送消息确认(ACK),只有在 RabbitMQ 收到确认后,消息才会从队列中移除。如果没有收到确认,RabbitMQ 会将消息重新入队,并将其分发给其他消耗者。
消息重试机制

利用死信队列(Dead Letter Queue, DLQ):通过设置 TTL(消息存活时间)大概最大重试次数,超时或多次处理失败的消息可以被路由到死信队列。这样可以避免消息丢失,同时为后续手动处理这些“题目消息”提供了保障。

消息重复消耗的缘故原由

RabbitMQ 出现消息重复消耗的缘故原由主要有以下几点:
办理消息重复消耗的思路

虽然 RabbitMQ 的消息投递模型可能导致消息重复消耗,但通过以下几种方法可以有效办理这一题目:
1. 业务幂等性

幂等性是办理消息重复消耗的核心。无论消息被消耗多少次,业务处理的效果应该是一样的。通过以下计谋实现业务的幂等性:

消息堆积的缘故原由

消息堆积的产生通常与以下几种情况有关:
消息堆积的影响


如何办理消息堆积

扩展消耗者

优化业务逻辑

利用批量消耗

设置消息逾期机制

应用分布式消耗模型


特性


优缺点



RabbitMQ 高可用性

集群

RabbitMQ 支持集群摆设,这样多个 RabbitMQ 节点可以协同工作,提供负载均衡和容错能力。集群模式下,消息在差别的节点间传递,某个节点发生故障时,其他节点仍能继续工作。

集群的优势:

创建 RabbitMQ 集群:

  1. rabbitmqctl stop_app
  2. rabbitmqctl reset
  3. rabbitmqctl join_cluster rabbit@A
  4. rabbitmqctl start_app
复制代码
镜像队列(Mirrored Queues)

镜像队列是一种高可用队列,允许队列在多个 RabbitMQ 节点上举行复制。通过将队列的副本(镜像)分布到差别的节点上,确保在单个节点故障时,队列和消息仍然可用。

  1. rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
复制代码
这将使所有队列镜像到集群中的所有节点。

队列分片(Quorum Queues)

队列分片(Quorum Queues)是一种替换镜像队列的机制,专为高可用性和高负载场景设计。与镜像队列相比,Quorum Queues 在处理大量消息时具有更高的容错性和性能。

  1. # 声明 Quorum Queues
  2. rabbitmqctl set_policy quorum-queues "^" '{"queue-type":"quorum"}'
复制代码
网络分区管理(Network Partition Handling)

在 RabbitMQ 集群中,如果网络发生分区(partition),即集群中的节点无法互相通讯,可能会导致一致性题目。为了处理这种情况,RabbitMQ 提供了几种网络分区处理计谋:

  1. # 设置网络分区策略
  2. rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}' --apply-to queues
复制代码
节点健康监控和自动规复


高可用性客户端配置


持久化机制


  1. # 声明持久化队列
  2. channel.queue_declare(queue='your_queue', durable=True)
  3. # 发送持久化消息
  4. channel.basic_publish(
  5.     exchange='your_exchange',
  6.     routing_key='your_routing_key',
  7.     body='your_message',
  8.     properties=pika.BasicProperties(
  9.         delivery_mode=2,  # 设置消息持久化
  10.     ))
复制代码
总结

RabbitMQ 通过多种机制来确保高可用性:

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4