spring-cloud-bus整合rocketmq 无法消费自定义的事件
问题:
服务A作为发起方可以创建本地事件,并发送消息到rocketmq,消费端也可以接收消息,但是无法将接收到的消息关联本地事件监听
简单打个断点:
在 org.springframework.cloud.bus.BusConsumer.accept(RemoteApplicationEvent event) 添加断点,event参数类型是UnknownRemoteApplicationEvent
对比rabbitMq:
一模一样的代码 将实现类从 spring-cloud-starter-bus-rocketmq 切换到 spring-cloud-starter-bus-amqp 问题就解决了
我也遇到这个问题,初步判断是序列化反序列化没走同一个Converter。 反序列化 从Message<?> 反序列化 payload 是走 BusJacksonAutoConfiguration.BusJacksonMessageConverter。但是BusJacksonMessageConverter转换到指定子类是依赖RemoteApplicationEvent里的注解@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type")。但反序列化是Message里payload发现没有type值。故Jackson无法将其转换成自定义事件。 关键代码处 BusJacksonAutoConfiguration.BusJacksonMessageConverter#convertFromInternal(179)
springboot版本:2.6.11 springcloud版本:2021.0.3 springcloudalibaba版本:2021.0.1.0
hi @pumbf @skylarkn ,if you have some idea to solve it, welcome to create pull request.If not,we will solve it later.
hi @pumbf @skylarkn ,if you have some idea to solve it, welcome to create pull request.If not,we will solve it later.
hi , i found the reason. Because s-c-b-rocketmq will create MappingFastJsonMessageConverter. it will replace ApplicationJsonMessageMarshallingConverter to convert the message. so "type" property will not exist
core method: SimpleFunctionRegistry.FunctionInvocationWrapper::convertOutputMessageIfNecessary
temporarily solve this problem by overriding the bean and removing the FastJsonConverter. @skylarkn
/**
* fix issue https://github.com/alibaba/spring-cloud-alibaba/issues/2742
* @return CompositeMessageConverter
*/
@Bean(RocketMQMessageConverter.DEFAULT_NAME)
public CompositeMessageConverter rocketMqMessageConvert() {
Set<MessageConverter> messageConverters = new HashSet();
ByteArrayMessageConverter byteArrayMessageConverter = new ByteArrayMessageConverter();
byteArrayMessageConverter.setContentTypeResolver((ContentTypeResolver)null);
messageConverters.add(byteArrayMessageConverter);
messageConverters.add(new StringMessageConverter());
return new CompositeMessageConverter(messageConverters);
}
Plz keep open util I check 2.2.x.
还是不行