c185960959 2023-08-25 15:09 采纳率: 89.5%
浏览 6
已结题

rabbitmq事务

rabbitmq的事务消息 是不是没有半消息的状态
比如rocketmq 是允许先把事务消息提交到服务器 然后进行事务的提交或回滚 后面也支持事务的回查
rabbitmq好像就是一个txSelect txCommit txRollback 没有半消息的状态, txSelect 后如果不做处理消息是保留在本地内存中没有发送吗

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-08-25 19:40
    关注

    【以下回答由 GPT 生成】

    RabbitMQ中的事务消息和半消息的概念与实现方式:

    1. 事务消息概念:RabbitMQ的事务消息是通过事务机制来实现的,可以将一系列的操作组合成一个原子性的操作,要么全部执行成功,要么全部失败。

    2. 事务消息实现方式:

    3. 使用txSelect命令开始一个事务。
    4. 发送消息时,在txSelecttxCommit之间执行多个发送消息的操作。
    5. 当所有的发送消息操作完成后,通过txCommit提交事务,若提交成功则消息将会被正常发送到消费者。
    6. 若在txSelecttxCommit之间的操作发生异常,通过调用txRollback回滚事务,消息将不会被发送。

    7. 半消息概念:RabbitMQ并没有内置的半消息概念,所谓半消息即可以先发送消息到Broker,然后再通过提交事务或者回滚事务的方式来决定消息最终是否发送。

    8. 半消息的实现方式:在RabbitMQ中,可以通过如下方式来实现类似半消息的机制:

    9. 创建一个专门用于存储未确认消息的队列(例如:unconfirmedQueue)。
    10. 发送消息时,先将消息发送到unconfirmedQueue
    11. 程序根据业务逻辑判断是否需要发送消息。
    12. 若需要发送消息,则将消息从unconfirmedQueue重新发送到目标队列,然后删除unconfirmedQueue中的该消息。
    13. 若不需要发送消息,则删除unconfirmedQueue中的该消息即可。

    这个实现方式并非RabbitMQ官方推荐的做法,只是一种可以模拟半消息机制的方式。

    RabbitMQ与RocketMQ比较:

    1. 事务消息支持:RabbitMQ和RocketMQ都支持事务消息的发送和接收。但是RabbitMQ使用的是事务机制,而RocketMQ使用的是半消息和两阶段提交方式。

    2. 事务回查:RocketMQ支持事务回查机制,即在分布式事务中,可以主动查询本地事务状态并根据结果来判断是提交事务还是回滚事务。而RabbitMQ并没有内置的事务回查机制。

    3. 并发性能:RocketMQ在处理高并发情况下性能更优,因为其支持顺序消息和消息分区,可以将消息发送到不同的broker,在broker端做水平扩展;而RabbitMQ的性能相对较低。

    4. 可用性和稳定性:RabbitMQ因为基于Erlang语言开发,具有良好的可用性和稳定性,支持高可靠性的队列集群。而RocketMQ基于Java开发,对于大规模的消息数和高吞吐量的场景有良好的支持。

    综上所述,RabbitMQ和RocketMQ在事务消息和半消息方面的实现方式和特性不同,选择哪种消息中间件取决于具体的业务场景和需求。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月4日
  • 已采纳回答 8月27日
  • 创建了问题 8月25日

悬赏问题

  • ¥20 c#使用NPOI向word表格中添加字段导致word有概率警告不可识别
  • ¥15 怎么使用hxe16进制编码器修改视频数据和图片一样!求教程!
  • ¥15 怎么用python模拟光的折射,反射,和全反射
  • ¥15 python打印机打印word和PDF文件出来的是乱码
  • ¥15 求达梦8数据库安装包
  • ¥15 YOLOv8模型网络结构更改后报错
  • ¥15 深度学习中梯度为None
  • ¥15 zynq烧写程序到flash后不运行
  • ¥15 裸板ESD问题的思考与实验
  • ¥15 electron+python