我有实现MessageConverter接口的客户转换器。但是,我没有看到使用SimpleMessageListenerContainerFactory注册它的方法。因此,当我尝试从SQS读取源格式的消息时,我收到错误,因为它不知道如何将其转换为目标对象。
我查看了SqsConfiguration类,我看到正在定义的simpleMessageListenerContainer bean上设置了queueMessageHandler。 QueueMessageHandler上有解析器,其中一个是CompositeMessageConverter,它接受MessageConverter类型的集合。我猜不知道我需要将自定义MessageConverter添加到此集合中。我似乎无法掌握如何做到这一点。
有人可以帮我指点我可以注册我的客户MessageMapper吗?
答案 0 :(得分:3)
据我所知,真正做到这一点的唯一方法是使用您需要的任何解析器/转换器创建自己的QueueMessageHandlerFactory
。
例如,将其添加到@Configuration
班级:
@Bean
public QueueMessageHandlerFactory queueMessageHandlerFactory() {
List<MessageConverter> converters = ...
CompositeMessageConverter converter = new CompositeMessageConverter(converters);
QueueMessageHandlerFactory factory = new QueueMessageHandlerFactory();
factory.setArgumentResolvers(Arrays.asList(new PayloadArgumentResolver(converter));
return factory;
}
SqsConfiguration
应该拿起你的QueueMessageHandlerFactory
bean,这样就不会自己创建一个。
答案 1 :(得分:0)
首先转换JMS消息。之后,MessageListenerContainer将消息传输给已注册的侦听器。因此,您需要在MessageListenerContainer获取之前注册您的转换器。仅在 JmsTemplate 或 JmsMessagingTemplate 中调用方法 setMessageConverter 或 setJmsMessageConverter 配置您的转换器。