Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 如何将自定义MessageConverter注册到SimpleMessageListenerContainerFactory?_Spring_Messaging_Spring Cloud_Spring Messaging - Fatal编程技术网

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

Spring 如何将自定义MessageConverter注册到SimpleMessageListenerContainerFactory?,spring,messaging,spring-cloud,spring-messaging,Spring,Messaging,Spring Cloud,Spring Messaging,我有一个实现MessageConverter接口的客户转换器。但是,我看不到向SimpleMessageListenerContainerFactory注册它的方法。因此,当我尝试从SQS读取源格式的消息时,会出现一个错误,因为它不知道如何将其转换为目标对象 我查看了SqsConfiguration类,发现正在定义的SimpleMessageListenerContainerBean上设置了queueMessageHandler。QueueMessageHandler上有解析程序,其中一个是Co

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

我查看了SqsConfiguration类,发现正在定义的SimpleMessageListenerContainerBean上设置了queueMessageHandler。QueueMessageHandler上有解析程序,其中一个是CompositeMessageConverter,它接受MessageConverter类型的集合。我猜我需要将自定义MessageConverter添加到此集合中。我似乎弄不懂我该怎么做


有人能帮我指出一种注册我的客户消息映射器的方法吗?

首先转换JMS消息。之后,MessageListenerContainer将消息传输到注册的侦听器。因此,在MessageListenerContainer获得转换器之前,您需要注册它。只有在JmsTemplateJMSMessageTemplate中调用方法setMessageConvertersetJmsMessageConverter来配置转换器。

据我所知,真正做到这一点的唯一方法是使用您需要的任何解析器/转换器创建您自己的
QueueMessageHandlerFactory

例如,将其添加到
@配置
类:

@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;
}
@Bean
public QueueMessageHandlerFactory QueueMessageHandlerFactory(){
列表转换器=。。。
CompositeMessageConverter=新的CompositeMessageConverter(转换器);
QueueMessageHandlerFactory=新的QueueMessageHandlerFactory();
setArgumentResolver(Arrays.asList(新的PayloadArgumentResolver(转换器));
返回工厂;
}
SqsConfiguration
应该选择您的
QueueMessageHandlerFactory
bean,这样它就不会自己创建一个