spring-cloud-alibaba icon indicating copy to clipboard operation
spring-cloud-alibaba copied to clipboard

[Announce] Spring Cloud Alibaba 2.2.5.RocketMQ.RC2 released

Open theonefx opened this issue 3 years ago • 16 comments

鉴于rocketmq-client版本迭代速度较快,而现release版本中stream-rocketmq使用的client版本比较老,很多rocketmq新特性也无法支持; 通过对issues的整理与内部讨论,现对stream-rocketmq做了一次重构,在使用上部分发生了变化,在修复bug的同时也增加了很多内容,如下:

RC1 版本的功能:

  1. 剥离 RocketMQ Spring Boot Starter,主要方便自定义功能
  2. 修复RocketMQ消息失败的反馈
  3. 规范了内部部分bean的签名
  4. 支持批量消费
  5. 支持异步消息回调处理
  6. 支持MessageConverter机制
  7. 支持自定义CustomizedTraceTopic
  8. 支持自定义消费最大重试次数
  9. 支持Push模式下指定消费起始位
  10. 支持自定义延迟消息的延迟等级(定时消息需要自行通过header处理)
  11. 支持阿里云rocketmq对接(没有充分测试)
  12. 支持可能常用bean的自定义,需要在配置中指定beanName;如MessageConverter, AllocateMessageQueueStrategy,MessageQueueSelector, MessageListener, TransactionListener,SendCallback, SendMessageHook,ErrorAcknowledgeHandler
  13. 使用上主要体现在配置参数的变化,这次跨度比较大,就没有做兼容处理;因为剥离了rocketmq-boot则相关注解无法直接使用,需自行引入依赖

RC2 版本的功能:

  1. 修复自定义bean无法被rockmq启用的问题
  2. 一些小的体验优化

后续计划: 1、支持consumer多个订阅 2、对spring stream 原生配置参数将充分利用 3、兼容RocketMQ Spring Boot Starter 4、弱化现有的强依赖关系绑定,为后续的pop消费做准备

当前rc版本的更新,必定有很多不足的地方,欢迎各位大佬参与和指导,社区有你更精彩。

https://github.com/alibaba/spring-cloud-alibaba/releases/tag/2.2.5-RocketMQ-RC1

新手册链接 https://github.com/alibaba/spring-cloud-alibaba/blob/rocketmq/spring-cloud-alibaba-docs/src/main/asciidoc-zh/rocketmq-new.adoc

theonefx avatar Apr 09 '21 07:04 theonefx

版本发布快被你们玩坏了。乱七八糟。

lilaizhencn avatar Apr 10 '21 02:04 lilaizhencn

版本发布快被你们玩坏了。乱七八糟。

不好意思,给你造成困扰了。 这是一个独立发行的RC版本,主要目的是将一组大的重构预先发布出来。而且很多同学对 RocketMQ 相关的新集成特性也期待很久了。 待这部分功能稳定了以后,这个分支的全部功能会回归主干的。届时,这个独立叉出来的分支也会关闭掉。

theonefx avatar Apr 12 '21 02:04 theonefx

rocketmq-produce-example 指定binding为事务消息无效

spring.cloud.stream.rocketmq.bindings.output2.producer.transactional=true

如图: image 看代码已经被移除了

spring.cloud.stream.rocketmq.bindings.output2.producer.producerType=Trans

我用上面替换了就好了。没有仔细看过代码 不知道用法是否正确

aholeye avatar Apr 14 '21 05:04 aholeye

另外,在如图位置 image 无法将自己实现的TransactionListener加入到RocketMQBeanContainerCache,是未扫描到 我不清楚spring初始化的具体逻辑 我跑的是example (好像是Spring cloud上下文分层的关系 image debug之后发现只能扫描到这几个bean

aholeye avatar Apr 14 '21 06:04 aholeye

另外,在如图位置 image 无法将自己实现的TransactionListener加入到RocketMQBeanContainerCache,是未扫描到 我不清楚spring初始化的具体逻辑 我跑的是example (好像是~Spring cloud~上下文分层的关系 image debug之后发现只能扫描到这几个bean

这个的原因是TransactionListener 先于RocketMQConfigBeanPostProcessor 初始化了,导致BeanPostProcessor#postProcessAfterInitialization获取不到这个bean,RocketMQBeanContainerCache也就没有了。你可以看下BeanPostProcessor的介绍

panzhi33 avatar Apr 14 '21 09:04 panzhi33

另外,在如图位置 image 无法将自己实现的TransactionListener加入到RocketMQBeanContainerCache,是未扫描到 我不清楚spring初始化的具体逻辑 我跑的是example (好像是~Spring cloud~上下文分层的关系 image debug之后发现只能扫描到这几个bean

这个的原因是TransactionListener 先于RocketMQConfigBeanPostProcessor 初始化了,导致BeanPostProcessor#postProcessAfterInitialization获取不到这个bean,RocketMQBeanContainerCache也就没有了。你可以看下BeanPostProcessor的介绍

我理解的BeanPostProcessor是会给spring容器里的每一个bean做处理,与注入的先后顺序无关,如果使用时需要考虑注入顺序的问题,那这个方法使用上会给使用者带来很大的困扰,spring大概不会这么做

aholeye avatar Apr 14 '21 13:04 aholeye

这个问题,后面会被修复;同时也欢迎大家的积极反馈和参与。

zkzlx avatar Apr 17 '21 07:04 zkzlx

这个问题,后面会被修复;同时也欢迎大家的积极反馈和参与。

我没有研究过Spring cloud steam将上下文分层的目的是什么。我修复该问题的手段是把RocketMQConfigBeanPostProcessor的注入从spring.binders文件移动到了spring.factories中间,使得他能直接在parent context初始化从而代理到我们自定义的bean 上述操作我提交了一个pr--fix issus#2040

aholeye avatar Apr 18 '21 01:04 aholeye

大家在测试的时候,尽可能使用rocketmq的配置参数,spring stream原生的配置参数目前对接的不多; com.alibaba.cloud.stream.binder.rocketmq.properties.RocketMQConsumerProperties com.alibaba.cloud.stream.binder.rocketmq.properties.RocketMQProducerProperties wiki文档若哪个小伙伴有时间可帮忙更新下

zkzlx avatar Apr 25 '21 01:04 zkzlx

啥情况,没动静了?

mostcool avatar Jul 14 '21 01:07 mostcool

请问什么大概什么时候能稳定?能合并到主干

wangwengeek avatar Sep 26 '21 02:09 wangwengeek

请问后续怎么了呢?

SZMOFEI avatar Oct 26 '21 02:10 SZMOFEI

预计2.2.7版本就会合并到主干并发布重构后的第一个release版本

zkzlx avatar Nov 15 '21 13:11 zkzlx

快点吧,两年了。

alive-z avatar Jan 13 '22 08:01 alive-z

mark

Cyoking avatar Sep 21 '22 11:09 Cyoking