RocketMQ出现了一个问题?[阿里云消息队列MQ]

RocketMQ在将spring-cloud-starter-stream-rocketmq升级到2022.0.0.0之后,出现了一个问题:
producer端启动事务消息(spring.cloud.stream.rocketmq.bindings.demon2Channel-out-0.producer.producterType=Trans)后,consumer端的spring.cloud.stream.bindings.demon2Cannel-in-0.consumer.partition=true配置将不生效,这时consumer端接收到的消息的header也是包含scst_Partition的,并且值正确。如果事务消息被取消(producer.productType=Normal),那么consumer.partitiond=true将生效。如果将spring-cloud-starter-stream-rocketmq降级到以前的旧版本,则不存在这样的问题。

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
=====这是一个广告位,招租中,联系qq 78315851====
1 条回复 A 作者 M 管理员
  1. 根据您的描述,升级到RocketMQ 2022.0.0.0版本后,遇到了一个问题:当在producer端启动事务消息(spring.cloud.stream.rocketmq.bindings.demon2Channel-out-0.producer.producterType=Trans)时,consumer端的spring.cloud.stream.bindings.demon2Cannel-in-0.consumer.partition=true配置不生效。而如果事务消息被取消(producer.productType=Normal),则consumer.partition=true会生效。同时,如果将spring-cloud-starter-stream-rocketmq降级到旧版本,则不存在这个问题。

    这个问题可能是由于新版本的RocketMQ对事务消息处理的改变导致的。建议您尝试以下解决方案:

    1. 检查RocketMQ和Spring Cloud Stream的版本兼容性:确保您使用的RocketMQ版本与Spring Cloud Stream版本兼容。可以查阅官方文档或Spring Cloud Stream的GitHub页面了解版本兼容性信息。

    2. 升级Spring Cloud Stream版本:尝试升级您使用的Spring Cloud Stream版本,以查看是否有已知的问题修复。可以参考Spring Cloud Stream的官方文档或GitHub页面了解最新版本。

    3. 查看RocketMQ的发布说明:仔细阅读RocketMQ的发布说明和变更日志,查看是否有关于事务消息或者相关配置的改变。可能会提供一些线索或解决方案。

  2. 这个问题可能是由于RocketMQ在2022.0.0.0版本中对事务消息的处理逻辑发生了变化,导致了消费者端的分区功能失效。具体的原因和解决方案如下:

    • 原因:RocketMQ在2022.0.0.0版本中,对于事务消息,会在发送时为每条消息生成一个唯一的事务ID,并将其作为消息的key。这样做的目的是为了保证事务消息的幂等性和顺序性。但是,这也导致了消费者端的分区功能失效,因为分区功能是根据消息的key来进行负载均衡的。如果每条消息的key都不同,那么分区功能就无法正确地将消息分配给不同的消费者。
    • 解决方案:有两种可能的解决方案:
      • 一种是修改RocketMQ的源码,让事务消息在发送时不生成事务ID,而是使用用户自定义的key或者默认的key。这样就可以恢复消费者端的分区功能,但是也会牺牲事务消息的幂等性和顺序性。
      • 另一种是修改消费者端的配置,让消费者端不使用分区功能,而是使用负载均衡组或者广播模式来接收消息。这样就可以保证事务消息的幂等性和顺序性,但是也会增加消费者端的复杂度和开销。