我使用的是Spring 4.2和spring-amqp 1.5.5,并且我实现了自己的org.springframework.amqp.core.Message
。此消息转换器应通过查看消息正文中包含的属性在@RabbitListener
和Java对象之间进行映射。但我找不到一种方法来应用此消息转换器与@RabbitListener
public void process(MyEvent myEvent) {
..
}
注释结合使用。我想做的是这样的事情:
DefaultMessageHandlerMethodFactory
但Spring似乎正在使用org.springframework.messaging.converter.MessageConverter
,您只能分配org.springframework.amqp.support.converter.MessageConverter
的实例,这些实例与我使用的MessageConverter类型不同。
实现我自己的__TypeId__
的原因是因为我们从非Java应用程序生成消息,这些消息没有添加Spring使用的魔术SimpleRabbitListenerContainerFactory
标头来确定要将主体反序列化的类
我尝试定义@Bean
public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory() {
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
factory.setConnectionFactory(rabbitConnectionFactory());
factory.setMessageConverter(messageConverter());
return factory;
}
:
org.springframework.amqp.support.converter.MessageConverter
但它似乎没有被使用(或者至少它没有任何区别)。
所以我的问题是,如何应用我的{{1}}?
答案 0 :(得分:2)
你正在以正确的方式做到这一点,所以必须发生其他事情,也许这个bean被另一个定义所覆盖?您可以尝试为bean提供不同的名称,并在@RabbitListener
中明确引用它。
我们有很多测试用例来测试此功能this one for example及其use here。
顺便提一下,在即将发布的1.6版the type from the listener method is provided to the converter中,它有助于丢失__TypeId__
标题。