2

我有实现 MessageConverter 接口的客户转换器。但是,我看不到使用 SimpleMessageListenerContainerFactory 注册它的方法。结果,当我尝试从 SQS 读取源格式的消息时出现错误,因为它不知道如何将其转换为目标对象。

我查看了 SqsConfiguration 类,发现正在定义的 simpleMessageListenerContainer bean 上设置了 queueMessageHandler。QueueMessageHandler 上有解析器,其中之一是 CompositeMessageConverter,它采用 MessageConverter 类型的集合。我猜想我需要将我的自定义 MessageConverter 添加到这个集合中。我似乎无法掌握如何做到这一点。

有人可以帮我指出一种方法我可以注册我的客户 MessageMapper 吗?

4

2 回答 2

4

据我所知,真正做到这一点的唯一方法是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豆子,这样它就不会自己创造一个。

于 2015-05-01T13:33:06.963 回答
0

JMS 消息首先被转换。之后,MessageListenerContainer 将消息传送给注册的监听器。所以你需要在 MessageListenerContainer 得到它之前注册你的转换器。只有在 JmsTemplateJmsMessagingTemplate中调用方法setMessageConvertersetJmsMessageConverter来配置您的转换器。

于 2015-04-28T07:29:23.937 回答