当前位置: 首页 > news >正文

依安县建设网站腾讯云如何建设网站

依安县建设网站,腾讯云如何建设网站,做百度网站每年的费用多少合适,织梦cms首页模板文件是哪个目录 一、数据丢失场景二、数据可靠性方案 1、生产者丢失消息解决方案2、MQ 队列丢失消息解决方案3、消费者丢失消息解决方案 一、数据丢失场景 MQ 消息数据完整的链路为#xff1a;从 Producer 发送消息到 RabbitMQ 服务器中#xff0c;再由 Broker 服务的 Exchange 根据…目录 一、数据丢失场景二、数据可靠性方案 1、生产者丢失消息解决方案2、MQ 队列丢失消息解决方案3、消费者丢失消息解决方案 一、数据丢失场景 MQ 消息数据完整的链路为从 Producer 发送消息到 RabbitMQ 服务器中再由 Broker 服务的 Exchange 根据 Routing_Key 路由到指定的 Queue 队列中最后投送到消费者中完成消费。 所以消息在上面三个节点都可能存在消息丢失的情况 生产者丢失消息生产者将消息发送到服务器过程中由于网络问题或服务器问题可能会导致消息发送失败而导致消息丢失MQ 队列丢失消息消息是存放在 MQ 服务器的消息队列中的但由于 MQ 服务故障导致崩溃或服务重启就可能会导致消息队列中的数据丢失消费者丢失消息消费者收到消息后处理过程中可能因为程序出错导致消息的消费失败或中途消费者挂了导致消息没有完成消费这些都会导致消息丢失。 二、数据可靠性方案 上面已经了解到了消息数据可能丢失的环节所以我们需要针对每个环节进行处理以防止数据的丢失。 1、生产者丢失消息解决方案 对于生产者消息丢失的问题我们有常用的两种方案 1、开启消息发送事务功能2、开启 Confirm 消息确认机制。 1-1、开启消息发送事务功能 我们可以选择使用 RabbitMQ 提供的事务功能生产者在发送数据之前开启事物然后再发送消息。如果消息没有成功被 RabbitMQ 接收到那么生产者会受到异常报错这时就可以回滚事务然后尝试重新发送如果收到了消息那么就可以提交事务。 伪代码如下 channel.txSelect();// 开启事物 try{... }catch(Exection e){channel.txRollback()// 回滚事物// 重新提交 }这种方案有个比较大的缺点RabbitMQ 事务一旦开启就会变为同步阻塞操作生产者会阻塞等待是否发送成功由于比较耗性能而会造成吞吐量的下降。所以并不推荐这种方案。 1-2、开启 Confirm 消息确认机制 在生产者中开启了Confirm 模式为每次写的消息分配一个唯一的 ID然后再发送给 RabbitMQ 服务 如果成功写入到了 RabbitMQ 之中RabbitMQ 会给你回传一个 ACK 消息告诉你这个消息发送 OK 了如果 RabbitMQ 没能处理这个消息就会回调你一个 NACK 接口告诉你这个消息失败了你可以进行重试。 同时也可以结合这个机制知道自己在内存里维护每个消息的 ID如果超过一定时间还没接收到这个消息的回调那么可以尝试进行重发。 伪代码如下 //开启confirm channel.confirm();//发送成功回调 public void ack(String messageId){ }// 发送失败回调 public void nack(String messageId){//重发该消息 }由于事务机制是同步阻塞的而 Confirm 机制是异步的在发送消息之后可以接着发送下一个消息最后通过 RabbitMQ 的回调告知成功与否所以生产者消息丢失方案一般都是采用 Confirm 确认机制。 2、MQ 队列丢失消息解决方案 对于 MQ 队列丢失消息的问题我们可以开启消息的持久化当然队列本身也要开启持久化毕竟队列如果不存在了哪怕消息持久化也没有用。关于 RabbitMQ 的持久化机制可以参考我的另一篇博客【RabbitMQ】之持久化机制 开启了消息队列的持久化后可以将消息的持久化和生产者的 Confirm 机制配合起来只有消息持久化到了磁盘才会个生产者发送 ACK这样就算是在持久化之前 RabbitMQ 挂了数据丢了生产者收不到 ACK 回调也会进行消息重发。 持久化有个关键的问题需要注意 消息在正确存入 RabbitMQ 之后还需要有一段时间这个时间很短但不可忽视才能存入磁盘之中。因为 RabbitMQ 并不是为每条消息都做 fsync 的处理可能仅仅保存到 cache 中而不是物理磁盘上在这段时间内 RabbitMQ 的 broker 发生 crash消息保存到 cache 但是还没来得及落盘那么这些消息将会丢失。 解决这个问题的方案是 RabbitMQ 开启镜像队列镜像队列相当于配置了副本当 master 在此特殊时间内 crash 掉可以自动切换到 slave这样有效地保障了数据的丢失。更多关于 RabbitMQ 镜像队列的知识可以参考我的另一篇博客【RabbitMQ】之高可用集群搭建 3、消费者丢失消息解决方案 针对消费者丢失消息问题我们可以使用 RabbitMQ 提供的 ACK 应答机制首先需要将 自动应答标志位 autoAck 设置为 false 来关闭 RabbitMQ 的自动ack这是为了防止 Consumer 收到消息后还没来得及处理完成就 crash 掉了。所以我们采用手动应答的方式 String basicConsume(String queue, boolean autoAck, Consumer callback) throws IOException;然后在消费者执行完毕之后手动应答channel.basicAck。 总结RabbitMQ 消息的可靠性涉及 producer 端的确认机制、broker 服务的持久化与镜像队列的配置、consumer 端的确认机制。要想确保消息的可靠性越高那么性能也会随之而降所以需要根据实际情况进行选择和取舍。
http://www.zqtcl.cn/news/472727/

相关文章:

  • 在线音乐网站开发现状有什么网站接效果图做的
  • 网站开发自学难吗上海网站建设百度推广公司哪家好
  • 建设部网站官网四库一平台房地产网站大全
  • 做外贸如何建立网站微信信息流广告投放
  • 上海工程建设招投标网站开发购物网站描述
  • 网站系统维护一般多久电商关键字优化
  • 孝感市建设局网站宁波seo网络推广价格
  • 百度商桥网站网络编程技术试题
  • 设计素材网站排名网站建设网站软件有哪些内容
  • 互联网兼职做网站维护wordpress评论微信通知
  • 合肥瑶海区网站建设方案长沙网站 建设推广世云网络
  • wordpress 挂码seo推广公司哪家好
  • 高端 网站设计公司wordpress添加投稿功能
  • 长沙 网站设计 公司价格江苏专业网站建设费用
  • 做的好的手机网站有哪些内容手机怎么做app详细步骤
  • net网站开发参考文献c++能不能作为网页开发语言
  • 我公司让别人做网站了怎么办厦门logo设计公司
  • 闸北专业做网站怎么判断网站优化过度
  • 搭建网站seowordpress重新安装如何做
  • 网站设计优化重庆教育建设有限公司网站
  • 域名注册网站查询手工制作视频教程简单又漂亮
  • 书画院网站源码网站百度指数
  • 网页设计与网站开发第三版课后答案网络运营商是干嘛的
  • wordpress分类目录网站主题自己做营销型网站
  • 简述网站推广的五要素seo排名软件怎么做
  • 做网站能做职业吗织梦如何做几种语言的网站
  • 手机网站定制咨询如何修改网站
  • 长沙大型网站建设公司建站工作室源码
  • 找设计方案的网站专注南昌网站建设
  • UE做的比较好的网站汕头网站关键词优化教程