如何将我的自定义MessageConverter注册到SimpleMessageListenerContainerFactory?

时间:2015-04-27 23:26:31

标签: spring messaging spring-cloud spring-messaging

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

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

有人可以帮我指点我可以注册我的客户MessageMapper吗?

2 个答案:

答案 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 配置您的转换器。