当前位置:   article > 正文

MQ消息队列数据丢失问题_net messagequeue 数据丢失

net messagequeue 数据丢失

数据的丢失问题可能出现在生产者、MQ服务器、消费者中,以RabbitMQ和Kafka为例来分析一下。

RabbitMQ

生产者弄丢了数据

生产者将数据发送到RabbitMQ的时候,可能数据就在半路给搞丢了,因为网络问题等都有可能。可以用RabbitMQ提供的事务功能,生产者发送数据之前开启RabbitMQ事务channel.txSelect() ,然后发送消息,如果消息没有成功被RabbitMQ接收到,生产者会收到异常报错,此时就可以回滚事务channel.txRollback() ,然后重试发送消息。如果收到了消息,那么可以提交事务channel.txCommit() 。

  1. try {
  2. // 通过工厂创建连接
  3. connection = factory.newConnection();
  4. // 获取通道
  5. channel = connection.createChannel();
  6. // 开启事务
  7. channel.txSelect();
  8. // 这里发送消息
  9. channel.basicPublish(exchange, routingKey, MessageProperties.PERSISTENT_TEXT_PLAIN, msg.getBytes());
  10. // 模拟出现异常
  11. int result = 1 / 0;
  12. // 提交事务
  13. channel.txCommit();
  14. } catch (IOException | TimeoutException e) {
  15. // 捕捉异常,回滚事务
  16. channel.txRollback();
  17. }

RabbitMQ事务机制(

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/826258
推荐阅读
相关标签
  

闽ICP备14008679号