我正在研究一个场景,其中命令和查询服务是分开的节点(弹簧引导)。 我配置为使用杰克逊JSON序列化的RabbitTemplate:axon 3通过rabbitmq:json与xml分离的命令和查询服务
@Bean
RabbitTemplate rabbitTemplate(final ConnectionFactory connectionFactory, Jackson2JsonMessageConverter converter) {
final RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
rabbitTemplate.setMessageConverter(converter);
return rabbitTemplate;
}
@Bean
Jackson2JsonMessageConverter producerJackson2MessageConverter() {
return new Jackson2JsonMessageConverter();
}
这工作,当我将命令发送到该命令的服务,我可以在RabbitMQ的队列检查正确的JSON格式。
我的骨料接收的命令和事件触发,这些被正确地存储在MySQL-eventstore。这里,事件是以xml格式。
现在出现棘手的部分。我用轴突springboot通过财产重新发送事件给兔队列:
axon.amqp.exchange: my-event-exchange
同样,这个工作,我可以检查队列,并查看活动(以XML格式)。
在队列服务,我想收到的事件,并在内存H2表示产生...我用:
@Bean
public SpringAMQPMessageSource myMessageSource(Serializer serializer, EventHandlingConfiguration ehConfig) {
return new SpringAMQPMessageSource(serializer) {
@RabbitListener(queues = "my-event-queue")
@Override
public void onMessage(Message message, Channel channel) throws Exception {
log.info("receiving event: {}#{}", message, channel);
super.onMessage(message, channel);
}
};
}
@Autowired
public void configure(EventHandlingConfiguration ehConfig, SpringAMQPMessageSource myMessageSource) {
ehConfig.registerSubscribingEventProcessor(
"taskQueryObjectUpdater", c -> myMessageSource);
}
如文档中说明。
但是,当我看到“接收事件”日志,我得到一个
2017-06-16 15:17:38.168 WARN 69212 --- [cTaskExecutor-1] o.s.a.s.c.Jackson2JsonMessageConverter : Could not convert incoming message with content-type [null]
警告和我的H2-库服务永远不会被调用。
我担心,JSON转换器我配置了兔子和XML事件轴突处理干扰......还是我在错误的轨道上?如何正确地分离通过rabbit的命令和查询服务,以及eventProcessor名称的好处是什么?我使用的弹簧豆处理eventstream的bean的名字......
谢谢,allard。我会看看它。 –
@JanGalinski您是否找到解决方案?我也有同样的问题。新的SimpleMessageListenerContainerFactory的配置是什么?谢谢 –