开发者社区 > 云原生 > 云消息队列 > 正文

有个问题想问大家 RocketMQ中生产者发送一条事务消息 执行本地事务是未知的状态 然后触发MQ?

问题1:有个问题想问大家 RocketMQ中生产者发送一条事务消息 执行本地事务是未知的状态 然后触发MQ的回查机制 但这时候如果生产者断开连接了一段时间再重新连接 MQ怎么知道生产者原来的channel地址呢? 问题2:也就是说生产者如果回查事务逻辑在变化了 回查的就是新的逻辑了?

展开
收起
真的很搞笑 2023-05-30 14:31:39 114 0
4 条回答
写回答
取消 提交回答
  • CSDN博客专家,51CTO博主专家,多知名企业认证讲师&签约作者&培训讲师,特邀作者等,华为云专家,资深测试开发专家,金牌面试官,职场面试培训及规划师。

    【回答】

    • 问题1: 在RocketMQ中,如果生产者发送一条事务消息时未指定消息的确切状态,则交给消息队列自行处理。消息队列会在接收到消息后按照一定的规则执行消息的处理逻辑,如果遇到异常情况,消息队列也会自动进行重试等处理,以确保消息的处理正确性。

    • 问题2: 生产者回查事务逻辑的变化不会影响消息队列中已经存在的消息的状态,因为消息队列是以消息的顺序进行处理的。如果生产者回查后发现需要修改已经发送的消息的状态,可以通过重新发送消息来实现。如果消息队列中已经存在多条相同的消息,则后面的消息会覆盖前面的消息。

    2023-05-30 16:15:22
    赞同 展开评论 打赏
  • 问题1:在 RocketMQ 执行事务消息的回查机制中,当消息发送者断开连接一段时间后再重新连接,RocketMQ 会重新向消息发送方发送回查请求,消息发送方再执行本地事务时需要返回上一次事务执行的结果。RocketMQ 会在消息的属性中保存上一次发送方的 Channel 地址(key 为 TRANSACTION_ID),当 RocketMQ 重新向消息发送方发送回查请求时,通过该属性获取上一次发送方的 Channel 地址。

    问题2:是的,当发送方回查事务逻辑发生变化时,RocketMQ 会根据最新的逻辑执行回查请求。因此,回查逻辑的变化需要在消息生产者方和消息消费者方同时协商好,并进行相应的代码实现和版本管理。

    2023-05-30 14:54:24
    赞同 展开评论 打赏
  • NameServer 会维护关于每个 Group ID 的信息,包括生产者的地址,当生产者重新连接后,它会向 NameServer 注册,并指定之前使用的 Group ID。

    2023-05-30 14:48:27
    赞同 展开评论 打赏
  • 回答1:根据producer group来判断的 回答2:如果producer group下有多个producer,一个断了会找其他的。如果是单个,重连后回查逻辑又变了,那应该就是新逻辑了,此回答整理自钉群“群2-Apache RocketMQ 中国开发者钉钉群”

    2023-05-30 14:36:01
    赞同 展开评论 打赏

涵盖 RocketMQ、Kafka、RabbitMQ、MQTT、轻量消息队列(原MNS) 的消息队列产品体系,全系产品 Serverless 化。RocketMQ 一站式学习:https://rocketmq.io/

相关产品

  • 云消息队列 MQ
  • 相关电子书

    更多
    RocketMQ Client-GO 介绍 立即下载
    RocketMQ Prometheus Exporter 打造定制化 DevOps 平台 立即下载
    基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台 立即下载