首页 > 其他分享 >19-RabbitMQ消息一致性问题

19-RabbitMQ消息一致性问题

时间:2022-10-04 23:47:41浏览次数:73  
标签:异步 事务 publisher 19 broker RabbitMQ 消息 一致性

消息一致性问题

  • 在使用rabbitmq中,消息的一致性是非常重要的一个话题。在数据一致性方面,发送者发送消息出来,在数据一致性的要求下,我们通常认为必须达到以下条件
    • broker持久化消息
    • publisher知道消息已经成功持久化
  • 首先,我们可以采用事务来解决此问题。每个消息都必须经历以上两个步骤,就算一次事务成功。
  • 事务是同步的。因此,如果采用事务,发送性能必然很差。官方给出来的性能是:

  • 异步的方法的效率是事务方法效率的100倍。
  • 我们可以采用异步的方式来解决此问题。publisher发送消息后,不进行等待,而是异步监听是否成功。这种方式又分为两种模式,一种是return,另一种是confirm. 前一种是publisher发送到exchange后,异步收到消息。第二种是publisher发送消息到exchange,queue,consumer收到消息后才会收到异步收到消息。可见,第二种方式更加安全可靠。如下所示:

  • 但是,异步也存在些局限性。如果一旦出现broker挂机或者网络不稳定,broker已经成功接收消息,但是publisher并没有收到confirm或return.这时,对于publisher来说,只能重发消息解决问题。而在这里面,我们会发生重复消息的问题。当然,如果业务类型要求数据一致性非常高,可以采用低效率的事务型解决方案:引用:http://www.rabbitmq.com/blog/2011/02/10/introducing-publisher-confirms/

 

标签:异步,事务,publisher,19,broker,RabbitMQ,消息,一致性
From: https://www.cnblogs.com/flower-dance/p/16754849.html

相关文章

  • 20-SpringBoot整合RabbitMQ
    SpringBoot整合RabbitMQ整合就直接使用单机版的了,一直开着5个虚拟机,我电脑不太行新建SpringBoot工程你已经是一个长大的IDEA了,要学会自己新建工程,然后IDEA自己......
  • 21-RabbitMQ延迟队列插件
    RabbitMQ延迟队列插件下载官网https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases我用的是3.10.7的RabbitMQ,但是官网没有这么新版本的,只......
  • 22-FAQ登录RabbitMQ控制台提示不是私密连接
    登录RabbitMQ控制台提示不是私密连接将启动的时候的赋权操作再执行一遍rabbitmqctladd_userrootrabbitmqctlset_permissions-p/root".*"".*"".*"rabbitmqct......
  • 15-RabbitMQ高级特性-消费端限流
    消费端限流什么是消费端限流假设一个场景,首先,我们RabbitMQ服务器有上万条消息未处理的消息,我们随机打开一个消费者客户端,会出现下面情况巨量的消息瞬间全......
  • 16-RabbitMQ高级特性-消费端的消息ACK与重回队列
    消费端的消息ACK与重回队列消费端的手工ACK和NACKACK分为自动和手动消费端进行消费的时候,如果由于业务异常我们可以进行日志的记录,然后进行补偿如果由于服务器宕......
  • 17-RabbitMQ高级特性-TTL队列/消息
    TTL队列/消息TTL:TimeToLive,生存时间RabbitMQ支持消息的过期时间,在消息发送时可以指定RabbitMQ支持队列的过期时间,从消息进入队列开始计算,只要超过了队列......
  • 18-RabbitMQ高级特性-死信队列
    死信队列死信队列:DLX,Dead-Letter-Exchange利用DLX,当消息在一个队列中变成死信(deadmessage)之后,它能被重新publish到另一个Exchange,这个Exchange就是DLXDL......
  • 07-RabbitMQ核心API-Direct Exchange
    DirectExchange简介所有发送到directexchange的消息被转发到Routekey中指定的Queue注意:Direct模式可以使用RabbitMQ自带的Exchange(defaultexchange),所以不需......
  • 08-RabbitMQ核心API-Topic Exchange
    TopicExchange简介所有发送到TopicExchange的消息被转发到所有关心RouteKey中指定Topic的Queue上Exchange将RouteKey和某Topic进行模糊匹配,此时队列需要绑定一个T......
  • 09-RabbitMQ核心API-Fanout Exchange
    FanoutExchange简介不处理路由键,只需要简单的将队列绑定到交换机上发送到交换机的消息都会被转发到与该交换机绑定的所有队列上Fanout交换机转发消息是最快的......