消息可靠性
如何确保RabbitMQ消息的可靠性?
开启生产者确认机制,确保生产者的消息能到达队列
开启持久化功能,确保消息未消费前在队列中不会丢失
开启消费者确认机制为auto,由spring确认消息处理成功后完成ack
开启消费者失败重试机制,并设置MessageRecoverer,多次重试失败后将消息投递到异常交换机,交由人工处理
其实总结起来无非就是 生产者的消息确定是确定他把消息已经给到消费者手里 接下来的事就不归他管了
消息持久化是 给到消费者后 保证消息能够持久到被消费者消费
消费者消息是因为MQ是默认给到消费者就删除
但是消费者没处理完他也不知道 所以就是用的大多的auto 也就是处理完了MQ才会删除
消费失败机制无非就是在你消费者本地失败的 你就在本地多试几遍 实在不行可以有策略发送到指定的交换机由专人处理
无非就是 保证送达 保证存在时间 保证处理完成 保证处理失败的消息不会被删除 保证在本地资源多试几次 实在不行让别人处理 不要往回发
集群
普通的话
做到了共享数据 但是共享前提是存放信息的那个mq要在线 可读不可存
镜像集群
就做到了如果主失去联系 信息也不会丢失
镜像集群:本质是主从模式,具备下面的特征:
交换机、队列、队列中的消息会在各个mq的镜像节点之间同步备份。
创建队列的节点被称为该队列的主节点,备份到的其它节点叫做该队列的镜像节点。
一个队列的主节点可能是另一个队列的镜像节点
所有操作都是主节点完成,然后同步给镜像节点
主宕机后,镜像节点会替代成新的主
准确模式就是 routingkey模式 一定要符合规则的队列才能收到消息
all就是所有 类似广播
nodes 是可以指定哪些节点可以收到我的消息
仲裁队列
从RabbitMQ 3.8版本开始,引入了新的仲裁队列,他具备与镜像队里类似的功能,但使用更加方便
这个类似镜像的all