网站建设软件有哪些,成都官网优化多少钱,网站宽度 像素,网站代理备案价格一、如何确保消息接收⽅消费了消息#xff1f;接收⽅消息确认机制#xff1a;消费者接收每⼀条消息后都必须进⾏确认#xff08;消息接收和消息确认是两个不同操作#xff09;。只有消费者确认了消息#xff0c;RabbitMQ才能安全地把消息从队列中删除。这⾥并没有⽤到超时…一、如何确保消息接收⽅消费了消息接收⽅消息确认机制消费者接收每⼀条消息后都必须进⾏确认消息接收和消息确认是两个不同操作。只有消费者确认了消息RabbitMQ才能安全地把消息从队列中删除。这⾥并没有⽤到超时机制RabbitMQ仅通过Consumer的连接中断来确认是否需要重新发送消息。也就是说只要连接不中断RabbitMQ给了Consumer⾜够⻓的时间来处理消息。特殊情况1、如果消费者接收到消息在确认之前断开了连接或取消订阅RabbitMQ会认为消息没有被分发然后重新分发给下⼀个订阅的消费者。可能存在消息重复消费的隐患需要根据bizId去重2、如果消费者接收到消息却没有确认消息连接也未断开则RabbitMQ认为该消费者繁忙将不会给该消费者分发更多的消息。二、如何避免消息重复投递或重复消费在消息⽣产时MQ内部针对每条⽣产者发送的消息⽣成⼀个inner-msg-id作为去重和幂等的依据消息投递失败并重传避免重复的消息进⼊队列在消息消费时要求消息体中必须要有⼀个bizId对于同⼀业务全局唯⼀如⽀付ID、订单ID、帖⼦ID等作为去重和幂等的依据避免同⼀条消息被重复消费。三、消息基于什么传输由于TCP连接的创建和销毁开销较⼤且并发数受系统资源限制会造成性能瓶颈。RabbitMQ使⽤信道的⽅式来传输数据。信道是建⽴在真实的TCP连接内的虚拟连接且每条TCP连接上的信道数量没有限制。1、RabbitMQ采⽤类似NIONon-blocking I/O做法选择TCP连接复⽤不仅可以减少性能开销同时也便于管理。2、每个线程把持⼀个信道所以信道服⽤了Connection的TCP连接。同时RabbitMQ可以确保每个线程的私密性就像拥有独⽴的连接⼀样。四、消息如何分发若该队列⾄少有⼀个消费者订阅消息将以循环round-robin的⽅式发送给消费者。每条消息只会分发给⼀个订阅的消费者前提是消费者能够正常处理消息并进⾏确认。五、消息怎么路由从概念上来说消息路由必须有三部分交换器、路由、绑定。⽣产者把消息发布到交换器上绑定决定了消息如何从交换器路由到特定的队列消息最终到达队列并被消费者接收。1、消息发布到交换器时消息将拥有⼀个路由键routing key在消息创建时设定。2、通过队列路由键可以把队列绑定到交换器上。3、消息到达交换器后RabbitMQ会将消息的路由键与队列的路由键进⾏匹配针对不同的交换器有不同的路由规则。4、如果能够匹配到队列则消息会投递到相应队列中如果不能匹配到任何队列消息将进⼊ “⿊洞”。